Rust part31at TECH
Rust part31 - 暇つぶし2ch2:デフォルトの名無しさん
25/07/03 22:02:35.22 5eizpyG1.net
if let Channel::Stable(v) = release_info()
 && let Semver { major, minor, .. } = v
 && major == 1
 && minor == 88
{
 println!("`let_chains` was stabilized in this version");
}

↑よりも↓こっちのほうがわかりやすいな

if let Channel::Stable(Semver { major, minor, .. }) = release_info {
 if major == 1 && minor == 88 {
  println!("`let_chains` was stabilized in this version");
 }
}

3:デフォルトの名無しさん
25/07/03 23:20:17.81 DF8MM2z8.net
>>2
それはサンプルであることと
本質はif多段を避けたい

if let Channel::Stable(Semver { major, minor, .. }) = release_info &&
 imajor == 1 &&
 minor == 88
{
 println!("`let_chains` was stabilized in this version");
}

4:デフォルトの名無しさん
25/07/04 00:29:23.67 uYpH3kMo.net
あくまでも例だね
今回の例に限ればこれが短く可読性もいい

if let Channel::Stable(Semver { major: 1, minor: 88, .. }) = release_info {
 println!("`let_chains` was stabilized in this version!!!");
}

5:デフォルトの名無しさん
25/07/04 00:39:18.38 OGvk30E1.net
rust楽しい
仕事では全く使わんが趣味で遊んでる

6:デフォルトの名無しさん
25/07/04 00:42:27.31 sejGpbp9.net
ClaudeCodeもGeminiCLIもTypeScript製ですが、なぜ最強言語Rustで作らないんだろう
あいつら頭悪いんですかね?なんかムカついてきた

7:デフォルトの名無しさん
25/07/04 02:08:21.93 al3hptYi.net
原理主義者きたー

8:デフォルトの名無しさん
25/07/04 04:51:54.94 j3pXRdpv.net
rust使った後仕事でPythonに戻ると頭の使う場所が変わってすごい疲れる
コンパイラーに頼りっきりの悪い癖で、Python走らせてランタイムエラー出るとドキッとしてしまうわ

9:デフォルトの名無しさん
25/07/04 06:06:43.93 JIudql3e.net
できる限り性的に解決してくれる言語サイコー

10:デフォルトの名無しさん
25/07/04 06:44:45.86 ZoTp4+J7.net
AIを使う上で必要なのはプロンプトエンジニアリングよりも「コンテキストエンジニアリング」
URLリンク(gigazine.net)

11:デフォルトの名無しさん
25/07/04 06:52:51.55 OGvk30E1.net
>>6
全てのプログラムをRustにして
そして私もRustになろう

12:デフォルトの名無しさん
25/07/04 07:46:13.09 ZoTp4+J7.net
7月2日 夜の番組で

安倍晋三 総理大臣

ドキュメンタリーをしていたのですが
山口県ではだれも逆らえなかった模様です
※自民党と対立候補ほかしれませんが自民党支持している者関係者?が対立している人が後ろから突飛ばしたりもしていたそうです
※自民党をに牙をむいたら物理的な新た暴力があるように流されていました
自民党が戦略として行ったのが反対意見を速やかにつぶすために自民党の議席を増やして議会で話をさせないようにもしていたようです
自民党の戦術としては裏で統一教会が動いていた模様で
統一教会がしていたことは
1 集会場の助っ人でさくら役であたかも人気があるように見せかけていた
2 選挙のやり方は熟知しているので何も言わなくても事務所は完成する
3 2と同様で選挙違反ぎりぎりの行動をして他の選挙立候補者に嫌がらせもしくは裏工作をしていた?
※兵庫県知事問題も暗躍していた可能性あり
4 統一教会からの投票だけでもまとまった票を集める
5 比例投票で○○党に投票すればさらにその政党の議席を増やせるしキムを作成したのも自民党?
などあったのか知っている人教えて

13:デフォルトの名無しさん
25/07/04 08:05:27.91 oaxeMCLD.net
アンジャッシュの新作コントが見たい

14:デフォルトの名無しさん
25/07/04 08:33:07.43 2TtQZu8y.net
2024 editionでif letチェーンができるようになった前提として
2024 editionでは以下のように一時的生成物のスコープ変更が行なわれている

fn f(value: &RwLock<Option<bool>>) {
 if let Some(x) = *value.read().unwrap() {
  println!("value is {x}");
 }
 // <--- 2024 edition だとここで read lock が drop
 else
 {
  let mut v = value.write().unwrap(); // 2021 editionだとここでデッドロック
  if v.is_none() {
   *v = Some(true);
  }
 }
 // <--- 2021 edition だとここで read lock が drop
}

15:デフォルトの名無しさん
25/07/04 08:55:18.58 HIBkUYal.net
>>4
C#だとこんな感じだからやっとRustが追いついて来た

if (release_info() is Stable { Semver{ Major: 1, Minor: 88 } } stable)
{
Console.WriteLine($"Matched version: {stable.Version}");
}

16:デフォルトの名無しさん
25/07/04 09:11:32.38 O068PO4l.net
>>15
勘違いしているようだが
Rustでは当初からstruct/enum/list/rangeパターンマッチングできている
むしろC#がRustより遅れてC#8.0でようやくlistパターンマッチングできるようになった

17:デフォルトの名無しさん
25/07/04 09:48:57.07 HIBkUYal.net
可読性では段違いにC#が優れている

18:デフォルトの名無しさん
25/07/04 10:08:54.80 3ctOs1dz.net
各言語それぞれ一長一短あるけどC#のように条件節でのパターンマッチがboolean expressionとしても扱われるほうが汎用的でベターな設計だと思う

Rustはパターンマッチはboolean expressionではないから()で括ったり||でつなげたりできない
別のルールが必要になるのはわかるが今のやり方は対処療法というか無理やりパッチを当てたイメージ
当初ターゲットだった2018エディションでは実現できず次のターゲットだった2021エディションでも実現できず8年近くも”慎重に検討を重ねて”対処療法の妥協の産物しか生み出せない現状を見ると根本的な進化はあまり期待しないほうがいいと思ってる

19:デフォルトの名無しさん
25/07/04 10:22:41.50 pz2zExAy.net
>>17
よく見ろよ>>4>>15
Rustが可読性も良い

20:デフォルトの名無しさん
25/07/04 10:26:08.30 HIBkUYal.net
主客が逆転している
if let Channel::Stable(Semver { major: 1, minor: 88, .. }) = release_info
の方が可読性が良いというのはおかしい


コーディングする場合も
release_info() が major: 1, minor: 88であるかのチェックなのでC#が自然
これを左辺に持ってきて可読性が良いというのは無理がある

21:デフォルトの名無しさん
25/07/04 10:26:51.75 aOfpZ2e6.net
>>18
変数を宣言するからletだという基本を理解しましょう

22:デフォルトの名無しさん
25/07/04 10:27:34.97 HIBkUYal.net
Rustでコーディングする際は右辺を書いてから左辺に戻ることになる
非常に不自然で劣っている

23:デフォルトの名無しさん
25/07/04 10:28:08.57 aOfpZ2e6.net
>>20
変数を宣言するからletだという基本を理解しましょう
C#が劣っています

24:デフォルトの名無しさん
25/07/04 10:29:32.89 HIBkUYal.net
>>23
誰が見てもC#の方が優れている
今後Rustにも取り入れられるかもしれない

それが理解できないお前が劣っているとしか言いようがない

25:デフォルトの名無しさん
25/07/04 10:31:15.69 wZ441BSd.net
>>20
そんなの主観と慣れだろう。
OCaml あたりから持ち込まれた記法なので C 系にしか馴染みがなければ読みにくく感じるのは理解できるが優劣をいうような筋合いのものではない。

26:デフォルトの名無しさん
25/07/04 10:31:51.81 HIBkUYal.net
>>25
主観ではない
Rustは事実上ヨーダ記法と同じことをしている

27:デフォルトの名無しさん
25/07/04 10:32:09.16 aOfpZ2e6.net
>>24
まずはRustのlet文を学んでください
C#が間違っていると明確にわかりますよ

28:デフォルトの名無しさん
25/07/04 10:34:18.39 HIBkUYal.net
C#がやっていることは事実上
x is 88のチェック
Rustがやっているのは事実上
88 is xのチェック

29:デフォルトの名無しさん
25/07/04 10:37:23.35 wZ441BSd.net
>>26
この例でやっていることが比較ではなくパターンマッチなのだということがわからないのか?
比較で書きたきゃそうも書けるよ。

30:デフォルトの名無しさん
25/07/04 10:39:35.11 HIBkUYal.net
>>29
では>>4をまともな日本語に変換してからコーディングしてみろよ

31:デフォルトの名無しさん
25/07/04 10:41:17.29 yzVoJtUY.net
>>30
そういう人を試すふりですべての答えにいちゃもんを付ける態度が一番卑怯だよ

32:デフォルトの名無しさん
25/07/04 10:42:22.73 h364eCOG.net
>>20
それはC#が文法設計を失敗して間違えているんだよ
C#ではvarや代入でパターンマッチングする時はちゃんと左辺(値が入る変数がある側)と右辺(任意の式)
Rustでも全く同じでこれが正しい
そしてRustではifの中でも>>4のように一貫して同じ形なる
C#は一貫性がなく文法設計を間違えた

33:デフォルトの名無しさん
25/07/04 10:43:11.39 HIBkUYal.net
>>31
事実だろ試すふりじゃないだろ?

もしバージョンが丸々ならと言う条件式のコーディング順をなんで逆にするんだよ

34:デフォルトの名無しさん
25/07/04 10:44:29.15 HIBkUYal.net
>>32
Rustはその場しのぎで糖衣構文を導入したので上手くいかなかっただけだろ?

ヨーダ記法が正しいのか?コーディングしやすいのか?

35:デフォルトの名無しさん
25/07/04 10:46:38.35 HIBkUYal.net
事実上やりたいのはこれ
if x is 88
xが88に束縛されているか?のチェック

if 88 is x
88がxに束縛されているのかと言うのは不自然で主客逆転している

36:デフォルトの名無しさん
25/07/04 10:49:13.21 h364eCOG.net
>>34
この件でRustに糖衣構文なんかない
letもif letも新規変数側が左辺となり一貫したわかりやすい文法となっている
一方でC#は一貫性なく真逆にして失敗した

37:デフォルトの名無しさん
25/07/04 10:51:18.40 HIBkUYal.net
>>36
言語として破綻しててコーディングしにくいRustが失敗してる

38:デフォルトの名無しさん
25/07/04 10:58:39.15 h364eCOG.net
>>37
文法に一貫性がなく失敗作のC#とは異なり
Rustでは一貫して常に同じ形でわかりやすく記述できる
let Foo { x, y, } = a;
let Foo { x: 123, y, } = a else { ... };
if let Foo { x: 123, y, } = a { ... } else { ... }

39:デフォルトの名無しさん
25/07/04 10:59:55.20 ZCWHj/xV.net
醜い争いだなw

40:デフォルトの名無しさん
25/07/04 11:03:32.72 HIBkUYal.net
もしバージョンが1.88である場合と言うコードを書くときに
先に数値や構造を書くのはおかしな話だろう?
コーディングしにくいなって感じるだろう?

もしバージョンがと言う時点でこれを綺麗にコードに落とせないのはプログラムする側の問題ではなくRustの問題なので
いつかC#のような形式が取り込まれる
そうしないと書きにくいのを我慢して使うことになる

41:デフォルトの名無しさん
25/07/04 11:09:17.97 h364eCOG.net
C#だけが文法設計に失敗して一貫性のない醜い文法となってしまった
新規変数が右辺に来る異様さ

Rustはわかりやすく可読性の良い形で一貫した文法となっている

42:デフォルトの名無しさん
25/07/04 11:13:36.96 HIBkUYal.net
>>41
残りの人生を書きにくいルールで右辺左辺行ったり来たりし続けるつもりか?
もしバージョンが1.88である場合を自然に記述できないRustのことを憂いたほうが良い
Rustの可読性とコーディング性向上のためにC#のような文法の取り入れの提案書でも書けばよい

43:デフォルトの名無しさん
25/07/04 11:20:48.50 IQMzIZOQ.net
この件はRustなどC#以外の言語が正しいよ

代入ならば既出の
> let Foo { x, y, } = a;
> let Foo { x: 123, y, } = a else { ... };
> if let Foo { x: 123, y, } = a { ... } else { ... }
他の言語と同様に代入される側が常に左辺の原則
C#では右辺に来る過ちを犯した

比較ならば
if Foo { x: 123, y: 456, } = a { ... } else { ... }
if a = Foo { x: 123, y: 456, } { ... } else { ... }
対等なので他の言語と同様に左辺と右辺は入れ替えてもよい
C#では入れ替えができない不自由

44:デフォルトの名無しさん
25/07/04 11:26:30.89 OGvk30E1.net
話ずれるけど
Syntactic Sugar (糖衣構文)をカタカナで「シンタックスシュガー」と言い始めたやつを過去に戻ってぶん殴りたい

45:デフォルトの名無しさん
25/07/04 17:05:40.02 OI9Lh1US.net
Algorithmic~ をアルゴリズミック~とは訳さないことが多いのと同じで日本人にとって超馴染みの薄い形容詞形の単語をそのまま使わずによく知られた使いやすい名詞形のnoun + noun形式にするパターン

syntax sugarでもネイティブにもノンネイティブにも問題なく通じるからそんなに気にしなくていいよ

46:デフォルトの名無しさん
25/07/04 20:45:43.08 uq+xMRPp.net
普通にif x is Some(Ok(value))の方が良くね?
chatGPTに案出ししてもらったら
if x matches Some(y)
とか出して来た

47:デフォルトの名無しさん
25/07/04 21:40:03.12 TbEgb2Ls.net
一貫性があり最も優れている記述法

> let Foo { x, y, } = a;
> let Foo { x: 123, y, } = a else { ... };
> if let Foo { x: 123, y, } = a { ... } else { ... }

変数


48:代入は必ず左辺にその変数が来る



49:デフォルトの名無しさん
25/07/04 21:47:39.19 uq+xMRPp.net
単純な変数代入じゃないし…といってもつたわらないなか?
もしaがSome(b)だとしたらと言う文脈
そのほうが書くのは楽だし

50:デフォルトの名無しさん
25/07/04 22:31:48.02 CkdJ7cjj.net
主観でいうならPython の

def foo() -> str | None: ...

if (f := foo()) is str:
 # このブロックでは f は str

が分かりやすいという人もいるんじゃないの?
Pythonは英語の自然な文法に近いと言われるけど、そういうのを「可読性」と呼ぶ人もいる

関数型の書き方が好きなら Rust の構文を好むだろうけど、C#のスタイルだって十分理解しやすい
その言語で書いていればすぐに慣れるような問題だし、正直かなり些細な話だと思う

51:デフォルトの名無しさん
25/07/04 22:39:48.52 5zc4SaJd.net
>>48
Rust使ったことないでしょ?
代入でなく比較なら対称だから入れ替えてどちらでも書けるよ
if a == Some(b) {
if Some(b) == a {

52:デフォルトの名無しさん
25/07/04 22:40:25.66 xvN7viZF.net
>>46
考えたことなかったが言われてみればこの2つなら上のほうが明らかに可読性はいいな
if x is Some(Ok(value)) {…}
if let Some(Ok(value)) = x {…}

まあでも今のやり方でも許容範囲なので俺は別に構わないが

53:デフォルトの名無しさん
25/07/04 22:51:50.85 YS2Js17U.net
>>51
上のC#構文は非常にわかりにくくなってる
if letの置き換えだけでなくletやlet elseも書いてごらん

> let Foo { x, y, } = a;
> let Foo { x: 123, y, } = a else { ... };
> if let Foo { x: 123, y, } = a { ... } else { ... }

54:デフォルトの名無しさん
25/07/04 23:28:49.57 OevS8/0x.net
代入される左辺値が右側に来ることもあるC#は最悪だ
文法に整合性がない

55:デフォルトの名無しさん
25/07/05 09:29:48.43 pq7Cj05V.net
>>39
本当にそう思う
笑い無しの真顔で

56:デフォルトの名無しさん
25/07/05 09:33:40.72 To+HU3do.net
色んな言語がある中
最もダメなC#でRustスレを荒らしに来て倒されたコント

57:デフォルトの名無しさん
25/07/05 12:48:59.24 IvwLD0VH.net
そうですか
Rustにも早くdowncast patternが入るといいですね

58:デフォルトの名無しさん
25/07/05 14:12:46.57 X00W2RsD.net
Rustは10年前の1.0の時からdowncastできるよ

59:デフォルトの名無しさん
25/07/05 15:52:38.96 q1Gtuhav.net
他の言語から来るとletみたいな束縛の考えに馴染みが無いんじゃない?
メジャーな言語で採用してるのはRustくらいだし
(Swiftも?)

var x = ... のように代入する言語だと、is string や when x < 0 のような条件は後付けする方が自然な気がする
var (string x) = foo() みたいな構文はあり得ないわけだから

60:デフォルトの名無しさん
25/07/05 15:56:08.92 N7XfN1yQ.net
letはHaskellからパクったキーワードでしょ

61:デフォルトの名無しさん
25/07/05 15:56:29.40 B1JMipmh.net
Rustに構文を追加するなら「Rustユーザーにとって自然であること」が正義で、C#に構文を追加するなら「C#ユーザーにとって自然であること」が正義というだけの話

62:デフォルトの名無しさん
25/07/05 16:13:01.56 Cfq4jI1n.net
>>58 >>60
どの言語でも新たに代入される変数は必ず左側の左辺に来る原則があるんだよ
C#はそれがなぜか右側に来ることもある不作法と一貫性の無さが批判されてる

63:デフォルトの名無しさん
25/07/05 16:20:30.23 7adKTS5g.net
単なる主観なのに可読性とかかっこつけんなよw

64:デフォルトの名無しさん
25/07/05 16:22:02.84 SoZdSA74.net
いつも可読性の低い汚コードを披露してくださってる複オジ大先生の可読性講義はありがたい
一般人には理解しがたい汚コーダーの心理を知ることができる大変貴重な機会

65:デフォルトの名無しさん
25/07/05 16:26:56.00 E3MH6Lcw.net
複おじはRustならなんでも良い人だから

if x is Some(Ok(value)) {…}が導入されたらどうするのか

66:デフォルトの名無しさん
25/07/05 16:35:04.80 2M7CqIfD.net
整合性がなく他の言語から見ても異端なC#のどうでもいい話でRustスレを荒らして何がしたいんだろうな

67:デフォルトの名無しさん
25/07/05 16:46:38.73 qZ93qmfR.net
>>60
左辺値が右側に来る不自然な文法を採用している言語はC#だけ

68:デフォルトの名無しさん
25/07/05 17:54:23.08 IvwLD0VH.net
ところでmatches!マクロの引数はpattern, scrutineeの順ですね
間にあるのが=じゃないからどうでもいいか
文法をそこまで気にする意味ってなんだろうね

69:デフォルトの名無しさん
25/07/05 17:55:05.10 IvwLD0VH.net
>>67
いや逆だ、scrunitee, patternの順

70:デフォルトの名無しさん
25/07/05 18:41:21.67 lbbyBqBC.net
matches!はmatch式の順序に従ってる

71:デフォルトの名無しさん
25/07/05 18:45:25.78 N7XfN1yQ.net
そういや、俺はRustであんまりmatch式使ってないなあ
Scala書いてた時はアホみたいに多用してたのに

72:デフォルトの名無しさん
25/07/05 18:55:54.06 /SDSty6t.net
Rustでも他の言語のmatch文やswitch文と同様にこの順序だよ

match ターゲット {
 パターン1 => 値1,
 パターン2 => 値2,
 ...
}

パターンに合致するかの真偽値がほしい時は

match ターゲット {
 パターン => true,
 _ => false,
}

これをマクロ
matches!(ターゲット, パターン)
として用意してるだけだよ

73:デフォルトの名無しさん
25/07/05 19:54:23.33 VOx5iHml.net
釣り針がデカいですね

74:デフォルトの名無しさん
25/07/05 20:11:12.40 BbgyVmWu.net
>>67
matches!で変数に値が代入されてその変数が使われることはありえない
だからそもそも代入変数が左に来る話の対象外

75:デフォルトの名無しさん
25/07/05 22:06:06.04 q1Gtuhav.net
「他の言語」てのは関数型言語くらいしか無いんじゃないの?

76:デフォルトの名無しさん
25/07/05 22:54:21.80 IvwLD0VH.net
>>73
代入じゃなくて束縛な

表層的な文法の話するならC#は=じゃなくてisなんだからRustのif letとは別物だし比較してもしょうがない、とも言える
というかC#er的には「動的型判定のis演算子を拡張して作ったんだから型が後ろに来たほうが自然だね、イチから作り直すなら別の文法でもいいけど」くらいにしか思わないしな
他言語を知る気が無いなら好きに思ってればいいけど、だったら荒らしだとか不自然だとか変なケチ付けずにスルーするべきだ

77:デフォルトの名無しさん
25/07/05 23:01:35.02 lZw753Wj.net
ここはRustスレ
C#erとやらがいつも暴れていることこそタブー
出禁な

78:デフォルトの名無しさん
25/07/05 23:16:48.59 PVqr3Cva.net
>>75
>> 型が後ろに来たほうが自然だね

ここ意味がわからない
右辺式も左辺束縛パターン式も通常は同じ型で区別はないよ
後ろは束縛パターンではなく右辺式となるのが普通だね

79:デフォルトの名無しさん
25/07/05 23:25:51.26 CUiBCYBD.net
if (x is int) のような型判定のisを拡張して
if (x is int a) のようにパターンマッチも使えるようにした
という話を理解してないから意味わからないんでしょ

頼むよ複おじ~

80:デフォルトの名無しさん
25/07/05 23:28:41.76 IvwLD0VH.net
スルーするべきだとこちらからわざわざ書いているのに、それでも反応してしまうなら、これはスレチではないということでいいんだね?

>>77
Rustしか知らないとそれが「通常」で「普通」なんだろうなということはよく分かるよ

81:デフォルトの名無しさん
25/07/05 23:31:50.52 IvwLD0VH.net
そもそもmatchでもifでもないif let相当の構文がわざわざ用意されてる言語ってそんなにあったっけという感じ
普通ってなんだっけ

82:デフォルトの名無しさん
25/07/05 23:34:23.07 UzVr4/VY.net
Rustが優秀すぎ
特にlet elseが便利すぎる

83:デフォルトの名無しさん
25/07/05 23:39:26.10 fELDm2s5.net
どのプログラミング言語でも同じ
値が代入される変数がある側を左側に書いて左辺値(L-Value)とも呼ばれる
代入する値がある側を右側に書いて右辺値(R-Value)とも呼ばれる

84:デフォルトの名無しさん
25/07/05 23:49:12.59 I56lB4/6.net
C#だけおかしい
値が代入される変数がなぜか右側に来る

85:デフォルトの名無しさん
25/07/06 00:07:39.02 lRp9/n7j.net
年を取ると固定観念が強くなりすぎて自分のやり方考え方以外は認められなくなるってやつだな

後置ifを親の仇のごとく毛嫌いしてたお年寄りを思い出した

86:デフォルトの名無しさん
25/07/06 00:20:16.92 zqvmJlyP.net
またletのこと束縛じゃなくて代入って言ってるし
Rustのほうもダメダメじゃないか

87:デフォルトの名無しさん
25/07/06 00:22:40.71 XwybGXxU.net
左辺値を右に置いたのはC#が初めて?

88:デフォルトの名無しさん
25/07/06 00:28:28.56 zqvmJlyP.net
誰からもツッコまれないから延々同じ勘違い垂れ流し続けててウケますね

89:デフォルトの名無しさん
25/07/06 00:33:15.50 McLsJkFl.net
構文なんてのはかなり瑣末な問題だからな
一般的な開発者は「パフォーマンスが必要だからRust」「Unityでゲーム開発したいからC#」「科学計算に強いからPython」のような選び方をする
「パターンマッチの構文が美しい」とかの理由が言語選定に影響することはまず無い

構文の良さで「勝つ」ことは無いというのは、Scalaなんかを見れば分かる話
企業がRustにら求めるメリットは「メモリ安全かつ高速」という特性の方
もし仮にRustが JVM で動く言語だったとしたら、「構文が美しい」というメリットはあっても、それが Java に勝つことは無いというのは分かるでしょ

90:デフォルトの名無しさん
25/07/06 00:34:21.43 0as+y0VS.net
Rustは従来のプログラミング言語と同じ形
左右逆転のC#は前例がないと思う

91:デフォルトの名無しさん
25/07/06 00:44:22.43 HzRlk2pS.net
前例がないのは別に悪いことではない
現実の実装は知らんけど`x is int a`は`x.Is(int, var out a)`と考えればありふれた形でもある

92:デフォルトの名無しさん
25/07/06 00:45:28.51 KkaZGoEi.net
これ経緯の最初はRustの構文はおかしいと言い出してC#の例を持ち出してきたところからスタートしてるな
C#erとやらはC#のみが異端であることに気付いていなかった

93:デフォルトの名無しさん
25/07/06 01:12:01.40 HzRlk2pS.net
パターンマッチでC#がRustより優れてる点はis演算子を使ったパターンマッチ式がブール式だということ
ブール式が使えるところではどこでも使えてどのブール演算も使える

型判定のisを拡張した副作用かもしれないが
8年もかけてツギハギだらけのlet-chainsしか作れないのと比べると羨ましい限り

語順はどちらかというと些末な問題

94:デフォルトの名無しさん
25/07/06 01:19:17.49 11lsXWC0.net
>>90
それは左辺値を理解できていないかな
例えばC#のlist is [first, .. , last]や
Rustの[first, .. , last] = list
この[first, .. , last]は左辺値だから関数に渡すことはできない
関数に渡すと右辺値になってしまう

95:デフォルトの名無しさん
25/07/06 09:20:13.49 KjjDSONE.net
>>93
それこそ勝手に自分の編み出した左辺値の定義にとらわれてる老害としか思えない

if x is y(z)
これがわかりにくいとか、不都合が出てるならダメだけどこれは何も問題は引き起こしてない

96:デフォルトの名無しさん
25/07/06 09:40:05.23 oWLlECDI.net
Kotlinみたいなのはどうなん?

val a: Any = "hello"
if (a is String) {
 // このブロックでは a は String
 println(a.length) // .length にアクセス可能
}

合理的だし便利だけど、この値は Any で宣言されてて、かつ String 型の別の引数に代入されてもいない
構文の一貫性に拘る人は、こういうのも受け入れないタイプなんかね?

97:デフォルトの名無しさん
25/07/06 09:51:03.49 oWLlECDI.net
パターンマッチでないけど、Golangはかなり一貫性を欠いてると思う
ジェネリクスはずっと無かったのに、ビルドインの make 関数だけ特別扱いされてるなど

だけど多くの人にとってそんなのは重要でないし、そういう気持ち悪さとは関係なく、一定の人気を得ている
言語オタクが拘るようなところって、実用上はそんな問題にされないんだよ

98:デフォルトの名無しさん
25/07/06 09:59:51.35 zqvmJlyP.net
この人は言語オタクとかじゃなくてすべてがRust風でないと気に入らない病人だから

99:デフォルトの名無しさん
25/07/06 10:09:00.81 E6KLY+k2.net
みんなはパターンマッチングの話をしているのに
パターンマッチングの例を一つも出せない人が連投してるな

100:デフォルトの名無しさん
25/07/06 10:23:10.17 KjjDSONE.net
is演算子の話をしてるんだと思う

101:デフォルトの名無しさん
25/07/06 10:24:24.82 nk12zw98.net
パターンでなくても左辺値ならどれでもいい
どの言語でも必ず左側に来る
C#だけ右側に来ることがあり異様

102:デフォルトの名無しさん
25/07/06 10:29:10.92 nk12zw98.net
>>99
is自体には何の問題もない
右側に左辺値さえ使われなければ普通

103:デフォルトの名無しさん
25/07/06 10:29:24.70 KjjDSONE.net
それはいくら何でも理解不足では?

104:デフォルトの名無しさん
25/07/06 10:30:27.71 KjjDSONE.net
Rustの借用やライフタイムは異様だけど?

105:デフォルトの名無しさん
25/07/06 10:32:57.16 nk12zw98.net
>>103
どこが異様なんだ?
ポインタを持つプログラミング言語は多いぞ

106:デフォルトの名無しさん
25/07/06 10:36:43.53 nk12zw98.net
>>103
もしかしてRustスレにいるのに借用の意味を知らない?
借用とは参照を使うこと
参照とは有効なアドレスポインタ
他の言語と同じ

107:デフォルトの名無しさん
25/07/06 10:38:50.54 zqvmJlyP.net
>借用とは参照を使うこと
作ることだろ

108:デフォルトの名無しさん
25/07/06 10:48:47.39 KjjDSONE.net
>>104
不変の借用と可変の借用とかRustで普通に使ってるルールは異様だろw
Rust使ってないのか?

109:デフォルトの名無しさん
25/07/06 10:54:26.34 u7xehLsH.net
>>106
作るでももちろんいいよ
参照を使っている間が借用

110:デフォルトの名無しさん
25/07/06 11:01:46.67 zt7irUL7.net
>>107
新たな概念に対して異様というのは好ましくないな
普遍的な概念やその利用方法が他と異なるなら異様といってもいいかもしれない
他の言語では常に左側に来るものがC#では右側に来る件は異様だといえる

111:デフォルトの名無しさん
25/07/06 11:08:29.14 zqvmJlyP.net
>>108
参照を受け取る関数があったとき、その参照は関数の終了まで生存する
しかしその参照を実際に使う(=dereference することだと解釈した)のは関数内の1行だけだったりするのはよくあって、「使っている間」では語弊がある
正しくは「参照が生きている間が借用」

112:デフォルトの名無しさん
25/07/06 11:19:14.78 u7xehLsH.net
>>110
それは参照を使うではなく逆参照を使うじゃないかなー
不変参照を受け取る関数があった場合それはコピーかもしれないからその時は関数が終了しても参照を使ってるままになるよ

113:デフォルトの名無しさん
25/07/06 11:31:34.32 zqvmJlyP.net
関数をborrowckが検査するときには、それが終了した後の参照の生存性が呼び出し元によって違うかもなんてことは関知しない

114:デフォルトの名無しさん
25/07/06 11:33:05.57 zqvmJlyP.net
"逆参照を使う" - Google 検索
約 6 件 (0.27 秒)

115:デフォルトの名無しさん
25/07/06 11:38:30.38 KjjDSONE.net
使う側から言えばisは普通の英文と同じでなにも問題は感じない

116:デフォルトの名無しさん
25/07/06 11:44:51.62 zqvmJlyP.net
letの左辺が必ずパターンというのが既にRustの尖った特徴なんだよね
実際タプルの分割くらいなら変数束縛と類似の構文でできる言語なら結構ある
irrefutableかrefutableかで実は違う構文が必要というのはRustでもそうなんだけど、どっちにもletが含まれてて同じ感じで書けるからなんか同じだと思っちゃうんだろうね

117:デフォルトの名無しさん
25/07/06 11:51:46.99 NwfPA8TS.net
>>112
関数に参照が渡ってきた時点で、それより前に借用は成立しているのだから、参照が渡ってきた関数をチェックしても意味ないぜ

118:デフォルトの名無しさん
25/07/06 12:11:00.61 m2loU78I.net
左辺値・右辺値を全く理解してない複おじw

119:デフォルトの名無しさん
25/07/06 12:17:11.74 Mpt+cCWu.net
左辺値・右辺値の詳細はC言語とC++ですら異なってるから言語間の細かな違いはどうでもいいんだよな
全ての言語間で共通してることは左辺値では値が書き換わるが右辺値では値は書き換わらない

120:デフォルトの名無しさん
25/07/06 12:18:19.87 KjjDSONE.net
確かに

is自体はただの演算子で代入しているわけじゃない
右辺値左辺値の意味間違えてる

121:デフォルトの名無しさん
25/07/06 12:20:16.48 zqvmJlyP.net
>>116
チェックしなかったら関数内で参照先の値をムーブしてしまうようなコードがはじけないよ

122:デフォルトの名無しさん
25/07/06 12:23:03.74 KjjDSONE.net
一般的にライトに言えば右辺値は名前のついてないどこからも参照できない値

x+1とか

123:デフォルトの名無しさん
25/07/06 12:26:16.88 h4isHUgd.net
>>119
C#のisは変数束縛が生じる
変数束縛が右側で生じるのはC#だけ
他の言語では左側

124:デフォルトの名無しさん
25/07/06 12:28:13.36 KjjDSONE.net
>>122
それが独創的で画期的で素晴らしいのだろう?
常識を破って使い勝手が良くなるんだろ?
それに反対するのはただの偏屈な人でしょ?

125:デフォルトの名無しさん
25/07/06 12:32:06.47 zqvmJlyP.net
>>122
そろそろRust以外の「他の言語」の例を挙げてくれよ

126:デフォルトの名無しさん
25/07/06 12:40:56.17 H8aipw3w.net
C#しか知らない子供がどうしてRustのスレに来ているの

127:デフォルトの名無しさん
25/07/06 12:41:54.12 KjjDSONE.net
複数IDおじさんって意味なんですか?

128:デフォルトの名無しさん
25/07/06 12:42:38.39 zqvmJlyP.net
Rustしか知らない子供がいつまでも構い続けるからですよ

129:デフォルトの名無しさん
25/07/06 12:45:25.93 zqvmJlyP.net
スレリンク(tech板:510番)
もう3年半経ってるんだな

130:デフォルトの名無しさん
25/07/06 12:


131:55:11.67 ID:0azu4uZW.net



132:デフォルトの名無しさん
25/07/06 12:57:51.49 RIdsIFJz.net
さっきAIに書かせた論文

URLリンク(ja.wikiversity.org)

他にも色々書いてるからリンク辿って

133:デフォルトの名無しさん
25/07/06 13:15:09.12 oWLlECDI.net
C#の構文で is T をパターンとして使うなら、変数はその後に置くのが自然だろう
Rust の let と違って var (string s) = ... の形はあり得ないし、構文としても string s = ... のように「型 変数」の順が基本なんだから

「C#にしかない」のは単に「C系の言語でパターンマッチのような構文を持つ言語はC#しかない」というだけじゃない?
C系からすれば let Some(x) = ... の形の方が異様で、根底にある考えがML系とは違うんだから比べようがない

134:デフォルトの名無しさん
25/07/06 13:33:01.19 I7m1WU+l.net
C#な人がRustの構文はおかしい!と言い出したのが議論の始まり
SwiftやRustのif letは極自然な構文

135:デフォルトの名無しさん
25/07/06 17:44:09.80 RIdsIFJz.net
興味のある人いない?
Rest C++
Rest C
Rest Asm
要するにCという共通部分だけでブリッジを書こうとするな、という話なんだけど

URLリンク(ja.wikiversity.org)

136:デフォルトの名無しさん
25/07/06 18:07:53.94 WJe1asKY.net
趣味でやるなら好きにすればいいと思うけど、新言語がもたらす複雑性が解決しようとする問題の複雑さを上回っている印象

137:デフォルトの名無しさん
25/07/06 18:10:31.84 Q1ZS7qye.net
>>118
細かな違いじゃなくて根本的にわかってないじゃん
自分の無知度を極度に矮小化するなよw

138:デフォルトの名無しさん
25/07/06 18:34:09.05 hOb8OjPx.net
俺はインラインアセンブラを使ったことがない
必要な時は関数ひとつ、ファイルひとつ、ライブラリひとつを丸々アセンブラで書くから

Rustでもそれと同様のことがやりたい。それが根っこにある

139:デフォルトの名無しさん
25/07/06 18:36:45.89 5/bs/rq7.net
勉強中なのですがパターンマッチングによるデータ取り出しの違いはこれで合ってますか?

【JavaScript】
const list = [1, 2, 3];
const [first, second, third] = list;
const user = { name: "名前", age: 99 };
const { name, age } = user;

【Rust】
let list = [1, 2, 3];
let [first, second, third] = list;
let user = User { name: "名前", age: 99 };
let User { name, age } = user;

【C#】
List<int> list = new List<int>() {1, 2, 3};
list is [first, second third];
User user = new User { name = "名前", age = 99 };
user is User { name, age };

140:デフォルトの名無しさん
25/07/06 19:42:19.52 hOb8OjPx.net
Rustの関数ひとつ、オブジェクトひとつ、モジュールひとつを
アセンブラやCやC++で書きたければ書けるようにもしておくべきだと思うが

141:デフォルトの名無しさん
25/07/06 19:48:35.16 hOb8OjPx.net
俺はてっきり近代的な言語はそういうABI戦争をしてると思ってたんだが
なんのことはない、CのABIで爪楊枝剣道してるだけじゃん

142:デフォルトの名無しさん
25/07/06 22:07:41.34 cf5nJFAB.net
ヘッダファイルがCで書かれていることをCのABIというのか?
ヘッダがなくてもわかるmain関数などはCのABIではないのか?

143:デフォルトの名無しさん
25/07/06 22:36:10.79 hOb8OjPx.net
>>140
C++はadd(int, int)とadd(float,float)を別物とみなして呼び分けてくれるだろ
同じソースをCに食わせたらエラーが出る
C++は内部で関数名を_add_int_intとかadd_float_floatに返還してくれてる
Cにはそんなものはなにもない
要するにアセンブラやリンカといった下部構造がなにを(システム共通の)シンボルとみなすか、
それをCやC++のABIと呼んで、関数名以外にも
引数や返り値の渡し方とか果ては仮想関数のテーブルだったり色々ある

144:デフォルトの名無しさん
25/07/06 23:31:47.19 aqZ6GFId.net
>>137
複おじ~w
もちろん間違ってるよ

145:デフォルトの名無しさん
25/07/07 00:55:47.45 Y7WXhsl4.net
>>131
JavaがC#の真似してif (shape instanceof Rectangle r)の形
isに比べてはるかにわかりにくいけどパターンを演算子の左に置くか右に置くかはさして重要じゃないわな

Kotlinもそのうちパターンマッチ取り入れる予定らしいから似たような構文になるかも

146:デフォルトの名無しさん
25/07/07 01:10:39.87 xGHCrZSN.net
>>95
それは構文関係なくて、単に文脈に依存して型の解釈を変えることを認めるかどうかでしょ
ちなみにTypeScriptも同様に文脈で型が変わる
C#は全体的な設計ポリシーとしてマルチスレッドに対して防御的なので、
他スレッドで書き換えられる可能性がない場合のみに使えるようなものは採用されにくいんじゃないかな
Rustの場合はコピーが絡んで複雑になったり暗黙的なオーバーヘッドが生じちゃったりするから好まれないだろうね

147:デフォルトの名無しさん
25/07/07 02:38:27.63 5+Ycek38.net
ヒマだから投稿してきた

URLリンク(discourse.llvm.org)

148:デフォルトの名無しさん
25/07/07 08:26:53.31 zzJXEVKX.net
>>140
ABI はバイナリの規定。
構造体の表現がメモリの上ではどのようにレイアウトされるかとか、関数の呼び出しはどのように値を受け渡す機械語が生成されるかとか。
これは通常は CPU を作ってるメーカーが提供する。(様々な事情があるので絶対ではない。)
C の表現に対してそのバイナリという形で対応付けて書いてあるという話。
C に無い概念が現れると独自の対処をすることになるし、言語ごとに独自にやってる。
だから言語間の接続が必要なときに使う共通の規定は C の ABI になるんだよ。

149:デフォルトの名無しさん
25/07/07 08:45:32.87 OW9nKfuN.net
インターフェースの規定だと思えば単純そうだがバイナリの規定だと思ったら泥沼化しそう

150:デフォルトの名無しさん
25/07/07 10:11:57.14 yOeC9ZKg.net
全ての暗号化一瞬で解読される
京大、マクロな世界で時間が過去から未来へと一方向に流れる謎に迫る発見
掲載日 
2025/07/07 09:33
URLリンク(news.mynavi.jp)

これが成功したら一瞬で計算できるでしょう
1 計算を始めた段階から未来では完了している結果が表示される
2 結果が表示された結果を現在に戻せば計算結果のみが表示される
3結果的に一瞬で計算できているように観測される

151:デフォルトの名無しさん
25/07/07 10:15:45.15 yOeC9ZKg.net
人間と同じように考え、次にとる行動を再現する最新AIモデル「ケンタウロス」
公開: 2025-07-06 20:00
URLリンク(karapaia.com)
 >>ドイツのヘルムホルツ・ミュンヘン研究所のチームが開発した
 >>新しいAI言語モデル「ケンタウロス(Centaur)」は、
★>> 160の心理学実験に参加した6万人以上の人々が行った1000万件を超える意思決定データを学習している。
 >>『Nature』(2025年7月2日付)に掲載された。
★>> AIケンタウロスの力があれば、たとえば不安症やうつ病など、精神疾患のある人の意思決定プロセスをシミュレーションすることで、その行動や心の動きを深めることができるという
 >> 研究チームは今後、年齢や性格などの心理的・人口統計的特性もデータセットに組み込んでいく予定だそうだ。
★ >>医療・政策設計・社会科学など、人間の意思決定が重要になる幅広い分野で活用できると期待されている。

152:デフォルトの名無しさん
25/07/07 11:30:08.28 i0K1gyoO.net
>>92
判別共用体を持たないC#はパターンマッチング自体が非常に使いにくい
リストのパターンマッチングもこの前C# 11.0でようやく対応とかなり出遅れている言語
C#が判別共用体に対応する日はいつになるのだろうか?

153:デフォルトの名無しさん
25/07/07 12:35:13.47 9VVsnulM.net
>>147
文脈によってバイナリが公開するインターフェース仕様を主に指している場合と
ターゲットアーキテクチャのマシンとやり取りするためにバイナリが従うべき仕様を指してる場合とがある

ABI Stabilityなど言語のABIの話は主に前者
チップメーカーが提供するABI仕様の話は主に後者
前者も後者の影響下にはあるんだけどABIを定義する主体と対象範囲が違う

154:デフォルトの名無しさん
25/07/07 12:52:27.12 9VVsnulM.net
>>151
OSベンダーが定義するC ABIは前者と後者と両方を含んでる

155:デフォルトの名無しさん
25/07/07 12:53:31.02 UHTq3/8h.net
無視されてる
欧州時間までには丁重にあしらわれる

156:デフォルトの名無しさん
25/07/07 12:54:57.23 T1FEn5DJ.net
独自名称で説明されてもよくんからんわ

157:デフォルトの名無しさん
25/07/07 12:57:14.16 9VVsnulM.net
>>145
何が言いたいのかよくわからん文章だな
とりあえずRustはABIはstableでないし仕様化もほぼされてないから他言語のコンパイラが依存できるようなものではないぞ

158:デフォルトの名無しさん
25/07/07 13:00:35.34 lFX1DI4W.net
なんかよくわからんのだけどこの辺の話であってる?

URLリンク(w.wiki)
URLリンク(w.wiki)
URLリンク(w.wiki)

159:デフォルトの名無しさん
25/07/07 14:06:54.76 u3ob5AqD.net
>>139
まともな言語は階層的な名前空間を持つが
リンカでは平坦な名前空間1つに縮退せざるを得ない
このため各言語でバラバラな方法で1つの名前空間に名前を変換する
同じ言語でも例えばC++はコンパイラによってその変換方法が異なることもある
したがって異言語間で最も使われるのが平坦な名前空間のC言語に寄せる形を取る

例えばRustでスタートアップから書くならば最初の_start()関数呼び出しをこう書く
#[no_mangle]
pub extern "C" fn _start() -> ! {
 ...
}
ここでno_mangleは平坦な名前空間そのままの関数名を使う指定

160:デフォルトの名無しさん
25/07/07 15:02:42.03 5+Ycek38.net
>>155
Rustの方からextern "C"するんじゃなくて
C/C++の方からRust ABIを目指す

どの言語もそうすべきだと思うんだよ

161:デフォルトの名無しさん
25/07/07 15:05:10.88 09qUGqEv.net
rustからextern "C"すると使い勝手が落ちるのでextern "C++"相当が必要

rustcがclang++互換のC++ class headerとlib/dllを出力してくれる方が需要ある
欲を言えばg++とmsvc(++)互換出力も追加

162:デフォルトの名無しさん
25/07/07 15:17:11.02 nx3GLves.net
C++には例外という古臭い厄介な仕組みがあるからそれを封じる境界処理を用意せざるを得ない

163:デフォルトの名無しさん
25/07/07 16:35:10.53 5+Ycek38.net
Rust ABIがC++ ABIを意識して洗練されていくなら意義深い

164:デフォルトの名無しさん
25/07/07 18:01:39.13 OW9nKfuN.net
制御の反転みたいなことを言ってるということは
GUIの使いにくさをRustのせいにしてる感じ?

165:デフォルトの名無しさん
25/07/07 18:22:52.82 5+Ycek38.net
わかるように書けよ

166:デフォルトの名無しさん
25/07/07 19:46:16.90 1vlGX1uI.net
>>161
Rust ABIの具体形は何?
プロジェクトローカルのビルドキャッシュ(のファイル形式と内容)の事か?

167:デフォルトの名無しさん
25/07/07 21:00:40.15 dOkdVmrZ.net
>>164
上で「ヘッダがCで書かれている」云々を言ってた人がいたけど
これは正確にはその関数が
Cコンパイラでコンパイルされたか
C++コンパイラでコンパイルされたかによる
同じprintfという関数でも、
Cコンパイラでコンパイルされたら名前修飾はないし、
C++コンパイラでコンパイルされたらある
それをC ABI、C++ ABIと呼んでる

C++が登場した時、もうコンパイラはC++で統一してしまおう、
libcもC++コンパイラでコンパイルし直してC++ ABIで統一しよう、
そうすればCのライブラリも名前空間に分けられる、
となったかというとならなかった
C++にはそんな信用も甲斐性もはるかはるか無かった

さて、時は下ってRustという有望株
RustにはRustのABIがもちろんある
ここから先は1度自分の頭で妄想してみよう

168:デフォルトの名無しさん
25/07/07 21:41:52.44 NDz1f/gp.net
(C ABI に加えて) 名前のマングルルール統一だけしてもダメなので C++ コンパイラは意図的にマングルルールを違わせる習慣になっている。

169:デフォルトの名無しさん
25/07/07 21:57:20.51 zlFZP/5A.net
C以外の言語でのABI安定化ははっきり言って無理
素直にCのABIを使うか、特定の言語セット間でコードをブリッジするフレームワークを作るかだと思う
PyO3はかなり上手くできてる好例 (Rust/Python)

170:デフォルトの名無しさん
25/07/07 22:10:09.41 xACI0ypr.net
技術的に無理なんじゃなくて言語開発者が面倒くさいからやりたくないだけ
開発者やユーザーの利便性を考えたらABI安定化してるほうがいいに決まってる

171:デフォルトの名無しさん
25/07/07 23:57:12.36 6CFfRXKN.net
逆に、手作業で面倒くさいと思ったことがないから機械化しない可能性もあるのでは

172:デフォルトの名無しさん
25/07/08 02:46:49.06 Kws1v2Yx.net
返事キター

URLリンク(discourse.llvm.org)

173:デフォルトの名無しさん
25/07/08 10:32:30.37 9Qrrm7Qc.net
>>170
めっっっっっちゃ優しい回答じゃん
1行で返せるところをここまで遠回しに柔らかく書けるのは尊敬する

174:デフォルトの名無しさん
25/07/08 13:02:48.46 4AXc47u+.net
Swiftの例を見れば分かるようにあのくらい多機能な言語でもやる気のある優秀な人材さえいれば3年かそこらでABIを安定化させることができる

Rustがやらなければ他の新言語がやるだろう

175:デフォルトの名無しさん
25/07/08 16:01:09.84 J6qvAQ9A.net
ここにいる奴全員ガイジだからまだcopilotに聞いた方が良い解答貰える。

176:デフォルトの名無しさん
25/07/08 16:27:23.21 2TKLdwr9.net
人間のことを冷笑したくてAIに何兆円も投資するというのはちょっとコストが高過ぎる気がする

177:デフォルトの名無しさん
25/07/08 16:35:20.58 Kws1v2Yx.net
みんなわかってんだよ
1. C ABIに
2. マングリングを許し
3. そのことによって関数のオーバーロードと、
4. オペレータオーバーロードと、
5. 名前空間の利用と、
6. 仮想でないメンバ関数が可能になる

問題はvtable

178:デフォルトの名無しさん
25/07/08 16:42:14.52 2TKLdwr9.net
ObjectiveCはextern "C"に肯定的なのか否定的なのかをAIに問い詰める必要がありそう

179:デフォルトの名無しさん
25/07/08 17:54:43.16 JNTp8eI4.net
ABIの機能不足が問題でなく言語ごとの違いが大きいことが問題だろ

180:デフォルトの名無しさん
25/07/09 00:05:39.42 8Z99caZO.net
抽象化機能が足りない筈のCのポインタや関数が
抽象化の道具として全く問題ないかのように使われていることが問題かも

181:デフォルトの名無しさん
25/07/09 12:31:40.05 EKMDM/sM.net
159
RustとC++の相性は最悪
RustとCが最適
PyO3が良く出来てる様に観えるのはRustの成果じゃなく
CPythonのPyObjectが良く出来てるから
これはtcl/tkにも当てはまる

182:デフォルトの名無しさん
25/07/09 14:10:37.09 v3DTOQQZ.net
ABIは人が書くもんではないので抽象化の目的は互換性とかであって人の理解のしやすさではないでしょ
ハードウェアの観点でポインタは十分抽象的

183:デフォルトの名無しさん
25/07/09 14:46:23.28 g6VxBFGK.net
>>172
問題は技術や開発リソース的に可能かどうかではなく、コントリビュータにやる気があるかどうか
Rustは言語仕様の互換性すらロクに維持できてない(する気がない)のにABIの安定化なんかやれるわけないでしょ

184:デフォルトの名無しさん
25/07/09 16:34:27.18 8Z99caZO.net
変化しないものが理解しやすい
やる気がある時とない時で結果が変わるのは理解し難い

185:デフォルトの名無しさん
25/07/09 17:52:55.51 tzwaaY8r.net
そういや、GCC Rustって互換性どうなってるんだろ?

186:デフォルトの名無しさん
25/07/09 18:10:41.06 wRpV3t8d.net
>>181
これもSwiftの例を見ればわかるように「いつまでにABIを安定化することを目標にする」と宣言するのが先なんだよ
その時期のSwiftの仕様の激変ぶり比べれば今のRustなんて何も変化してないと言っていいくらい

でその目標設定ができるのはコントリビュータと呼ぶような広い範囲の人間ではなくてフルタイムで仕事としてRustの開発に従事してるようなコアのメンバーだけ

187:デフォルトの名無しさん
25/07/09 18:23:50.30 ZKntcAAj.net
仕様が安定しないとか互換性がどうのとか言うのはまず脇に置いて、今の仕様がどうなってるのかわからん。
仕様を整理するリポジトリはあるのに今のところ何も書いてないしさ……。
URLリンク(github.com)

188:デフォルトの名無しさん
25/07/09 18:40:43.72 8Z99caZO.net
ドメイン知識だけでは宣言できない項目だからしょうがない

189:デフォルトの名無しさん
25/07/09 19:59:48.48 U49xcpSA.net
優先度の問題ですな

190:デフォルトの名無しさん
25/07/09 22:25:14.97 cmuoaTCa.net
リポジトリに、RustでCコンパイラもC++コンパイラも書きますってあるといいのかもな

191:デフォルトの名無しさん
25/07/10 00:31:26.38 VEUfq48z.net
例えば>>175みたいなスペックを、
「これらを許すCコンパイラを作ってしまわない?」
「いや、それはC++としてやろうよ」
みたいな場末談義が深まるべき

192:デフォルトの名無しさん
25/07/10 00:49:21.61 IAlfBwP8.net
よくわからんが予言者のように予言すればいいのか

大丈夫、次は当たるよ

193:デフォルトの名無しさん
25/07/10 01:10:44.11 VEUfq48z.net
言語を学ぶ際に本当に難しいのは、
例えばVecのあるRustではダブルリンクリストが要らないのだ、
という文法外の知識を得なくてはならないことだ
ダブルリンクリスト相当のものを備え付けの機能でまかなってる言語で
本当にOSカーネルが書けるのか、とこちらが知りたいのはそこだ
一番いいのはVecの機能がライブラリ化されててCからも呼び出せるようになっていることだろう
そうすれぱこのタッグはいつかOSカーネルを書くだろうと安心して見ていられる

194:デフォルトの名無しさん
25/07/10 05:42:20.43 qeCO91fI.net
・事件を起こしたオウムしんりきょう幹部反社会のソシオパスではないか?!
知能が高い人ほど、道徳心のスコアが低くなっていた
2025.07.09 07:00:09 WEDNESDAY
URLリンク(nazology.kusuguru.co.jp)
>>英国エディンバラ大学(The University of Edinburgh)の最新研究によると、認知能力が高い人ほど、道徳的価値観を全体的に弱く支持する傾向があることを明らかになったのです。
>>道徳心には「6つの基盤」がある
>>① 思いやり/危害(Care / Harm)
>>② 公平さ/不正(Fairness / Cheating)
>>③ 忠誠/裏切り(Loyalty / Betrayal)
>>④ 権威/転覆(Authority / Subversion)
>>⑤ 純潔/堕落(Sanctity / Degradation)
>>⑥ 自由/抑圧(Liberty / Oppression)
>>これらは「道徳心のセンサー」のようなものであり、文化や時代を超えて人類に共通する心理的傾向です。
>>政治的立場によっても傾向が分かれ、リベラルな人は「思いやり」や「公平さ」を強く支持し、保守的な人は6つすべてを重視する傾向があると指摘されています。
>>結果、興味深いことに、知能が高い人ほど、6つすべての道徳基盤のスコアが一様に低くなるという驚きの結果が得られたのです。
>>とくに顕著だったのは、「純潔」基盤との関係で、言語的知能が高い人ほど、「心や体は神聖なものだ」といった伝統的な価値観に共感しにくい傾向が見られました。
>>道徳的判断を“直感”ではなく“分析”でとらえる傾向がある」と指摘します。
>>たとえば「これは悪いことだ」と即断する代わりに、「それは誰にどんな影響があるのか?」「文脈によっては正当化されるのでは?」と一歩引いて考えてしまうのです。

195:デフォルトの名無しさん
25/07/10 07:28:55.90 VEUfq48z.net
ABI、ABIと言うが要するにアセンブラインターフェースのことだよな?
unsafe Rustの代わりにRustの関数ひとつ、ファイルひとつ、モジュールひとつをまるまる(unsafeな)C、C++、またはアセンブラで書いてしまうことができればそれをRust ABIと呼んでいいよな?
Cはそれができる。Cの関数ひとつをまるまるアセンブラで書いてしまうことはとくに難しくない。なんならファイルひとつ、ライブラリひとつをアセンブラで書いてしまうことだってできる
C++はなぜかできない。なぜできないのかというと、このあたりから話は既におかしいから気をつけないといけない

196:デフォルトの名無しさん
25/07/10 08:33:18.81 VEUfq48z.net
不思議ではあるよね
メンバ関数、仮想関数と、言ったところで
引数のコンベンション、退避するレジスタなんかはCのをそのまま流用すればいいんだろうに

197:デフォルトの名無しさん
25/07/10 10:37:11.35 1drjG1ps.net
>>193
書ける書けないの話じゃない
ABIは使い捨てのインタフェースでなく互換性を維持するために長期間維持されるインタフェースでなければならない
そういう意味で注意深く設計しないといけないから難しいんだよ
あと異なる言語のバイナリを組み合わせる話なのか、rust単体なのか
そのあたりもよくわからんコメ多い

198:デフォルトの名無しさん
25/07/10 11:28:13.53 zELG0Cxl.net
何もわかってないやつだということだけはよく分かる

199:デフォルトの名無しさん
25/07/10 11:39:07.25 nn3AKhN3.net
>のことだよな?
>んでいいよな?
ちがいます
>C++はなぜかできない。
そんなことない
>このあたりから話は既におかしいから気をつけないといけない
おかしいのはお前な

200:デフォルトの名無しさん
25/07/10 13:37:21.53 kAqs2enK.net
C++はできていない
混ぜるの禁止

201:デフォルトの名無しさん
25/07/10 15:12:52.14 lyFkypYA.net
毎日濃い妄想してるのにRustはむしろ冷たい言語かもね

202:デフォルトの名無しさん
25/07/10 15:29:37.59 lyFkypYA.net
cargoでコンパイルするヘッダーのないC言語というのはどうだろう
内部的にはソースからヘッダを作ってインクルードさせてgccを呼ぶとかでいいから誰か作ってほしい

203:デフォルトの名無しさん
25/07/10 15:56:05.52 UMLMi9p2.net
>>200
Arduino言語は宣言を自動生成するぞ

204:デフォルトの名無しさん
25/07/10 17:19:29.24 qeCO91fI.net
AMDが画像生成AI「Nitro-T」をリリース、32基のInstinct MI300Xでゼロから1日未満でトレーニング可能
URLリンク(gigazine.net)

205:デフォルトの名無しさん
25/07/10 21:07:56.60 lyFkypYA.net
投稿した

URLリンク(discourse.llvm.org)

206:デフォルトの名無しさん
25/07/10 22:17:50.46 yFw8mCQ1.net
何がThank youだよ

207:デフォルトの名無しさん
25/07/11 04:40:49.97 E6MoWIZ/.net
各言語版のcargoの名前
cargo-rs
cargo-cc
cargo-c
cargo-s

208:デフォルトの名無しさん
25/07/11 08:47:53.23 rfNcv5Se.net
cargoってそんなに優れてる?
パッケージシステムとしてはいまいちだけど

rsのmainから参照されていないのはコンパイルしないのが嫌

209:デフォルトの名無しさん
25/07/11 08:53:44.13 rfNcv5Se.net
後は言語のモジュール階層パスの仕組みを変えて欲しい
わかりにくい

210:デフォルトの名無しさん
25/07/11 08:58:22.97 MNB3kz8h.net
>>206
ライブラリ作ったこともない初心者かよ

211:デフォルトの名無しさん
25/07/11 09:04:12.88 QgOkaB0h.net
ライブラリークレート、バイナリークレートあたり知らん人がラスト触ってる時代なのか

mod.rs, lib.rs, Cargo.tomlに数行足すのそんなに嫌か

212:デフォルトの名無しさん
25/07/11 09:05:23.45 QgOkaB0h.net
>>203
英語で投稿ってすごいレベル高いな
俺はえぐいレベルで外国語苦手だから読めん、レスが頭に入らん

213:デフォルトの名無しさん
25/07/11 09:05:59.03 rfNcv5Se.net
>>208
ライブラリにしてもそうですよね
参照されていないとコンパイルしない
他の言語は大体フォルダ単位でコンパイルされてバグが判る

214:デフォルトの名無しさん
25/07/11 09:06:53.41 gY3Yq/Ko.net
機械翻訳でいいよ。
専門用語が妥当かどうか確認するくらいはしたほうが良いと思うけど。

215:デフォルトの名無しさん
25/07/11 09:08:24.51 rfNcv5Se.net
>>209
その仕組みがいまいちなので今風に改善して欲しい
大至急

216:デフォルトの名無しさん
25/07/11 09:08:29.21 QgOkaB0h.net
>>211
ほかの言語って何?
Cならmakefileに記載しないとコンパイルされないよ
つまり一緒じゃない?

217:デフォルトの名無しさん
25/07/11 09:11:23.43 z/osT16e.net
>>211
他の言語はコンパイルされてバグがわかる??
何を言い出してるんだこいつ

218:デフォルトの名無しさん
25/07/11 09:12:27.76 QgOkaB0h.net
>>213
フォルダー単位で”勝手に”コンパイルされるってあるのかな?
gccとかclangも引数で-I付けないとヘッダーは読み込まれないし、指定しないCファイルはビルド対象外
もちろん、cmakeとかでCmakelists.txtに、サブフォルダまで再起的に探してビルドしろって指示はできますけど、、、それCMakeLists.txtにロジック書いてるわけで

219:デフォルトの名無しさん
25/07/11 09:12:39.00 rfNcv5Se.net
>>214-215
馬鹿なんだったら黙ってた方がいいんじゃないですか?

220:デフォルトの名無しさん
25/07/11 09:13:06.74 QgOkaB0h.net
再帰的の間違いごめん

221:デフォルトの名無しさん
25/07/11 09:13:51.24 QgOkaB0h.net
具体的に、ほかの言語っての教えてよ

222:デフォルトの名無しさん
25/07/11 09:15:14.23 rfNcv5Se.net
無知なんだったら黙って納得したらいいんじゃないですか?

223:デフォルトの名無しさん
25/07/11 09:16:40.77 QgOkaB0h.net
ほら、ほかの言語が何かも言えてないじゃん
フォルダー単位でビルドなんてものがないからでしょ

ほんとにそんな新言語があるなら、逆にフォルダー内のファイル全部ビルドするのやめてって言うに決まってるし!

224:デフォルトの名無しさん
25/07/11 09:16:55.83 z/osT16e.net
>>217
Rustも他の言語と同じかそれ以上に判明するぞ

225:デフォルトの名無しさん
25/07/11 09:18:00.71 rfNcv5Se.net
>>221-222
馬鹿で無知なら黙ってた方が利口じゃないですか?

226:デフォルトの名無しさん
25/07/11 09:19:40.75 rfNcv5Se.net
実際に言語でコンパイルしないとコンパイル範囲が判明しないなんてビルドツールとして致命的じゃないですか?

227:デフォルトの名無しさん
25/07/11 09:19:53.31 QgOkaB0h.net
rustcの悪口はまだ様々な意見あるからわかるが、cargoにケチつけるのはよく分からないよ
無知って何に関して無知なのさ

228:デフォルトの名無しさん
25/07/11 09:22:05.99 rfNcv5Se.net
>>225
ここまで書いてるのにまだ弱点が理解できないなら恥の上塗りじゃないですか

229:デフォルトの名無しさん
25/07/11 09:23:52.76 QgOkaB0h.net
フォルダーに100個ファイルあって、
main.rs

fn main() { }

みたいなのならフォルダー内の100個ビルドするの無駄じゃんって言ってcargoに文句言うつもりでしょ?Cargo.tomlにdependency書いてないのにビルドされたとか発狂しそう

さっさとフォルダー内のファイル全部勝手にビルドなんて言語は無いって認めたら?

230:デフォルトの名無しさん
25/07/11 09:47:06.95 vtHk7gjh.net
>>210
あの英語見てその感想はヤバ谷底

231:デフォルトの名無しさん
25/07/11 09:51:10.81 eGVnHVEr.net
外国語はむずいだろ
プログラミング言語に比べたら文法も無茶苦茶だし
お前は外国語得意なんか?

232:デフォルトの名無しさん
25/07/11 09:52:46.45 eGVnHVEr.net
>>228
とりあえず外人に向かって堂々と正面から話しかけられる人は俺は尊敬してしまうなあ
昔から道で声かけられたら逃げてたタチだ

233:デフォルトの名無しさん
25/07/11 10:10:20.02 GGQbOPi6.net
tscはトランスパイラだけど依存関係は見ずにフォルダ単位でビルドするね
さすがヘルスバーグ
C#もまとめてコイツ何とかしろ

234:デフォルトの名無しさん
25/07/11 10:47:53.98 tejWjjAq.net
>>206
>> rsのmainから参照されていないのはコンパイルしないのが嫌

それやってみたけどmainから参照されてないfoo()もコンパイルされてバグも指摘してくれたよ

fn main() {
println!("Hello, world!");
}

fn foo() {
let mut v = vec![0, 11, 22, 33, 44, 55, 66, 77];
let fifth = &mut v[5];
v.push(100);
*fifth = 555;
println!("v[5] = {}", v[5]);
}

235:デフォルトの名無しさん
25/07/11 10:52:22.80 eGVnHVEr.net
>>232
すでに最新のrust1.88.0では問題は解決してたのか

236:デフォルトの名無しさん
25/07/11 10:59:30.83 tejWjjAq.net
C++でも同じことをやってみた
fooとmainの順序を入れ替えないといけないのは仕方ないけど
C++はfoo()のバグを指摘してくれなかった

#include <vector>
#include <iostream>

void foo() {
std::vector<int> v{0, 11, 22, 33, 44, 55, 66, 77};
int *fifth = &v[5];
v.push_back(100);
*fifth = 555;
std::cout << "v[5] = " << v[5] << std::endl;
}

int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}

237:デフォルトの名無しさん
25/07/11 11:01:12.88 0Q6SsogA.net
仕様が不安定なほうが解決は早い
一度安定してしまった仕様を変えるのは難しい

238:デフォルトの名無しさん
25/07/11 11:42:41.88 rfNcv5Se.net
>>232 誰もそんな幼稚な話してないだろう? Rust初心者?



240:デフォルトの名無しさん
25/07/11 11:46:35.23 rfNcv5Se.net
Rustはフォルダのrs参照は自動じゃないけど新しめの言語やビルドツールは大体フォルダ含めてコンパイルしてエラー報告する
そのほうが便利だから

古い言語と同じ仕様がRustとcargo

241:デフォルトの名無しさん
25/07/11 12:00:39.70 Fa+81ZsH.net
めちゃ幼稚な話をしてる初心者が他人を幼稚&初心者扱いしてるのウケる~

自覚ありのタイプだなこれは

242:デフォルトの名無しさん
25/07/11 12:05:34.53 YqQkES31.net
>>234
C++はダメだな

243:デフォルトの名無しさん
25/07/11 12:16:41.62 0Q6SsogA.net
フォルダ全体を読むとしても
参照される側の(headerの代わりに必要な)バイナリの生成が終わってから参照する側をコンパイルするのは変わらない

244:デフォルトの名無しさん
25/07/11 12:23:31.25 4tGIKRue.net
>>237
例えば他の言語ってどれ?

245:デフォルトの名無しさん
25/07/11 13:57:19.86 E6MoWIZ/.net
,ちなみに>>205>>200のためのものなので幼稚じゃないんだよ

246:デフォルトの名無しさん
25/07/11 14:31:08.19 QV2TcUYL.net
フォルダ指定で中のソースを全部自動でビルドするようなのって危険だから避けるべきって言われるよね
雑Web開発系の人は知らなさそ

247:デフォルトの名無しさん
25/07/11 14:46:46.13 E6MoWIZ/.net
cargoほどのデファクトスタンダードに倣わないセンスは幼稚

248:デフォルトの名無しさん
25/07/11 14:47:01.40 2gyOIwWF.net
>>243
危険になるのは言語による
だから危険になるなら根拠を提示しないと

Rustはそんな危ない言語ではない

249:デフォルトの名無しさん
25/07/11 15:10:21.22 E6MoWIZ/.net
GNUのソースひとつ見てMakefileがディレクトリごとにあるの見ればわかる
プロジェクトにソースがひとつしかなくてもMakefileを書くって自慢するくらいでナンボ

250:デフォルトの名無しさん
25/07/11 15:12:33.70 QV2TcUYL.net
>>245
ん?
rustでできないことに文句言ってる人がいるって話でしょ

251:デフォルトの名無しさん
25/07/11 15:24:56.01 E6MoWIZ/.net
C++はオブジェクトファイルの再利用性を保証しなかったから
タイムスタンプを比べるmakeの純粋性は薄れてた
Rustがcargoを用意しているのでこれ幸いと乗り換えるわけ

252:デフォルトの名無しさん
25/07/11 15:58:25.39 Lj24hmSd.net
>>193-196
C++は禁止で良い
Cだけで充分
ABIでも良いし
C++的なものをお望みならCOMを使う
(ただしC++は一切使わないCだけのCOM)

253:デフォルトの名無しさん
25/07/11 16:00:41.59 E6MoWIZ/.net
ヘッダを書かなくていいC++、cargo-ccと言っても割と複雑
変更のあったクラスから派生するクラスは全部コンパイルし直しの他、
インライン関数だったりもヘッダじゃなくてソースに書かれるだろう

254:デフォルトの名無しさん
25/07/11 16:05:07.28 2gyOIwWF.net
フラグやdefineで文字種を変えたら全部再コンパイルではないか?

255:デフォルトの名無しさん
25/07/11 17:19:52.65 Hql3vaeJ.net
>>237
おまえプログラミング経験がないだろ
条件によってコンパイルするファイルは変わる
だから古くはMakefile方式であっても常に全てのファイルを自動的にコンパイルするなんてバカなことはされてきていない

256:デフォルトの名無しさん
25/07/11 18:39:37.94 eGVnHVEr.net
>>252
ずっとコレ指摘され続けてるのに「新しめのほかの言語」なる架空の言語を武器に煽るのは覚醒者だよなあ

257:デフォルトの名無しさん
25/07/11 18:55:19.26 0Q6SsogA.net
全ファイルをコンパイルするが、いくつかのファイルは条件により空になっているのを見たことがある

258:デフォルトの名無しさん
25/07/11 19:19:24.67 /ogoIu7B.net
どうせ他の言語が何か答えないだろうし、嵐だったのかな

259:デフォルトの名無しさん
25/07/11 20:50:56.69 A0NCGOkS.net
他の言語のシステムってjava,c#,swift,zig,Goとかそんな感じだろ?
普通に連鎖しないとコンパイルしないのはRustぐらいでは?

260:デフォルトの名無しさん
25/07/11 20:53:19.05 A0NCGOkS.net
パッケージシステムによって /src以下のファイルは全部コンパイルされるのが今の潮流
設定ファイルに追加しないとコンパイルされないのはswiftで実際はIDE使ってると普通に追加される

261:デフォルトの名無しさん
25/07/11 20:59:36.81 A0NCGOkS.net
インクルードするのがファイル単体ではなくnamespace系の単位でそれがフォルダ構造に寄らない場合
どのファイルがそのnamespaceなのかがわからない
それで多くのシステムは特定のフォルダ以下と言うか関与するソースは全部コンパイルする

Rustは基本的にモジュールはフォルダ構造に縛られているので自由度は低いがパスの通りに連鎖?してコンパイルしている
この意味がわかる?

262:デフォルトの名無しさん
25/07/11 21:41:07.59 DNhpt4oB.net
選択設定や環境設定によりコンパイル対象となるファイルは異なる
全てがコンパイル対象となってしまったら役に立たない
設定可能なプログラミングをしたことがないなら勉強して出直してこい

263:デフォルトの名無しさん
25/07/11 21:41:14.16 qru/FQVd.net
いいからいっぺんライブラリ自分で作ってみろってw

264:デフォルトの名無しさん
25/07/11 21:43:24.33 A0NCGOkS.net
指定フォルダ以下が全てがコンパイルされる仕組みはかなり多く存在している

265:デフォルトの名無しさん
25/07/11 21:43:54.05 DNhpt4oB.net
そう
作ってみればわかること

266:デフォルトの名無しさん
25/07/11 21:45:54.49 A0NCGOkS.net
上に書いた通りでインクルードなどが名前空間単位で外部からどのファイルに名前空間が分布しているかわからないと
絶対特定フォルダ以下を捜査しないとコンパイル単位がわからない
その時に文法チェックもしてるので当然コンパイルされる

これが事実

267:デフォルトの名無しさん
25/07/11 21:50:02.91 DNhpt4oB.net
そもそも開発途中に勝手にコンパイル対象とされたくない
OS環境によってもソースファイル取捨選択が変わる

268:デフォルトの名無しさん
25/07/11 21:51:43.90 qru/FQVd.net
ライブラリ作ってみました
useしたら使えました
その経験なしでだいそれたこと語るな

269:デフォルトの名無しさん
25/07/11 21:52:22.31 A0NCGOkS.net
やっと理解してもらえたようで何より

全てコンパイルされないとセキュリティリスクが高まるのでコンパイルした方が良い
コンパイルされたくないファイルはフォルダにそもそも入れないでと

270:デフォルトの名無しさん
25/07/11 21:57:37.60 K1887/VN.net
>>266
四面楚歌の状況で誰に理解してもらえたんだw

271:デフォルトの名無しさん
25/07/11 22:04:21.16 A0NCGOkS.net
>>267

>>263に書かれた意味すら理解できないならコピペプログラマでしょw

272:デフォルトの名無しさん
25/07/11 22:07:33.00 qru/FQVd.net
こういうことだ
あんたの老師はライブラリの名前空間の便利さを教える前に他界して、あんたは恐竜になった
悔しきゃ勉強しな

273:デフォルトの名無しさん
25/07/11 22:16:41.00 IEKeJnsn.net
>>263
なんの話をしているのかさっぱりわからないのだが
ディレクトリと言わずにわざわざフォルダと呼んでるということはなんらか仮想的な仕組みの話をしている??

274:デフォルトの名無しさん
25/07/11 22:23:55.17 0Q6SsogA.net
ファイル名と名前空間が無関係ならheaderをincludeするほうがいいな

275:デフォルトの名無しさん
25/07/11 22:30:44.10 qru/FQVd.net
憐れwwwwwwww

276:デフォルトの名無しさん
25/07/11 22:33:25.33 00B+ii7X.net
勝手に全ファイルを常にコンパイル対象にされたらデメリットだらけでメリットが思い浮かばない

277:デフォルトの名無しさん
25/07/11 22:45:27.10 A0NCGOkS.net
上に書いてある理由も理解できず、参照されないとコンパイルされない場合のデメリットも上に書いたけど
理解できないということ?

278:デフォルトの名無しさん
25/07/11 22:52:29.10 A0NCGOkS.net
ヘッダファイルだとその変更でプリプロセッサ(define)が他のコードに影響を及ばしていないかわからないので
関係するオブジェクトファイル自体を再コンパイルしなくてはいけなくなるので時間がかかる

279:デフォルトの名無しさん
25/07/11 22:53:10.69 RM6x3fFU.net
連投してる人は曖昧な文章ばかり
具体的にソースコード出さないとね

280:デフォルトの名無しさん
25/07/11 22:55:32.02 A0NCGOkS.net
普通に理解できてないだけでしょ

281:デフォルトの名無しさん
25/07/11 22:57:37.47 qru/FQVd.net
可哀想になあ
お前の老師はホームディレクトリ下のlibやincludeにライブラリやヘッダを置くやり方は教えてくれなかったのか?
あ、それすら絶対パスで指定しないと使い方のわからなかった初めからの落ちこぼれか?

282:デフォルトの名無しさん
25/07/11 23:01:02.74 0Q6SsogA.net
具体的な未来など存在しないからね
曖昧な未来または具体的な過去の遺物のどちらかで妥協するしかない

283:デフォルトの名無しさん
25/07/11 23:04:21.86 A0NCGOkS.net
なんやかんや言っても上で書いた名前空間の話を理解できてないのは分かった

284:デフォルトの名無しさん
25/07/11 23:13:02.02 A0NCGOkS.net
>>278
それはただ書かれている内容を理解してないだけで的外れで恥ずかしい書き込みでしかないよ

285:デフォルトの名無しさん
25/07/11 23:17:44.44 qru/FQVd.net
おっ、反応があったぞw
なるほどなるほど、老師の作るライブラリは~/includeと~/libにインストールされるんだな
そしてお前はそれをスマートに使うことができないわけだwww

286:デフォルトの名無しさん
25/07/11 23:20:09.69 A0NCGOkS.net
C言語の理解すら出来ないなんてかわいそう

287:デフォルトの名無しさん
25/07/12 00:13:15.23 t5nAYRVV.net
CでもRustでも同じ
コンパイル時の環境や指定で使われるソースコードファイルは変わる
全ては使われない

288:デフォルトの名無しさん
25/07/12 00:40:45.38 SY1fpEzr.net
Rustは1個のでかいコードを複数のファイルに分割してるイメージだからな

mod foo { ... }

mod foo;
にして中身をfoo.rsに切り出してる形だから「fooを参照してる」って表現は微妙

C/C++の分割コンパイルに慣れてる人だと最初は戸惑うはず

289:デフォルトの名無しさん
25/07/12 02:34:14.16 jM2yGhyK.net
.rsファイルを作ったらエディタ拡張機能なりなんなりが検出して親モジュールによしなにmod宣言追加してくれよとはいつも思ってるから気持ちは分かるよ

290:デフォルトの名無しさん
25/07/12 05:44:07.46 acpqK9lK.net
AIに書かせるとき少し油断するとmod.rs作り始めて困る

291:デフォルトの名無しさん
25/07/12 06:18:31.18 UjcX2Tpg.net
ファイル名がでたらめでもOKな言語をほしがる理由がそれなのか

292:デフォルトの名無しさん
25/07/12 06:34:56.39 4NYASHjn.net
>>266
使われないのにどんなセキュリティリスクがあるんだろうか

293:デフォルトの名無しさん
25/07/12 06:42:40.68 WlQJ0D6g.net
>>287
AIに書かせるより俺が書いた方がコードの質もスピードも上。超大規模開発のRustに関してはね
TypeScript, Pythonみたいなスクリプト言語ではもう質でもUIでも処理内容でもライブラリーの使いこなし方でも完全に負けたけど
昔の米長名人の気持ち30年ぶりに味わってる

294:デフォルトの名無しさん
25/07/12 07:18:59.99 bAEcphyz.net
>>286
この二つは全く違うことを理解しよう

○ 編集支援機能で自動的に『// mod xxx;』が補完される
✕ コンパイラが常に全ファイルをコンパイル対象とする

295:デフォルトの名無しさん
25/07/12 09:23:54.25 UjcX2Tpg.net
>>289
人が勝ってAIが負けるリスクが

296:デフォルトの名無しさん
25/07/12 09:51:26.07 jSY0OpNA.net
RustはAIに書かせるとわりとしょうもないミスが多い印象
Rustは型やライフタイムのコンテキストが明示的に示されないケースが多いから、
Claude Codeみたいに人為的な解析なしでコードの字面だけを見るやり方だとミスしやすいんだろうな
とはいえAIが暗黙的なコンテキストを理解しているのは明らかなので、人間が変に工夫するよりAIの向上を待っていれば自ずと解決すると思うが

297:デフォルトの名無しさん
25/07/12 10:00:15.26 d3r8ImcK.net
gcc main.c

とすら打たずに

gcc *.c

と打ってる自分を大切にしたいのかwww

298:デフォルトの名無しさん
25/07/12 10:04:57.96 qtA/fA9B.net
みんな、just使ってる? make?

299:デフォルトの名無しさん
25/07/12 10:43:10.70 q9m3koWp.net
cargoが一番使いやすい

300:デフォルトの名無しさん
25/07/12 10:47:59.16 tq7D7WVM.net
make -j9 って書いて J9 J9 情け無用♪アステーロイドーベルトのー♪
って歌っている。

301:デフォルトの名無しさん
25/07/12 11:37:22.02 jM2yGhyK.net
>>291
理解してますよ
そのうえでそういうIDEやエディタの機能があるなら>>206みたいな意見は出なかったんだろうなと思う
相手の知識不足や認識齟齬を前面から指摘する前に「顧客が本当に求めていたもの」を考えてみるクセを付けるといいと思うぞ

302:デフォルトの名無しさん
25/07/12 11:40:26.35 9l0QlUPV.net
AI的には無駄の多い言語だと思われてるだろうな

303:デフォルトの名無しさん
25/07/12 11:42:32.16 1ZCd6s+2.net
>>286
これは俺もわかるけど全ファイルコンパイルしてくれ君の動機がそれと同じだとは思えないんだが

どこかにそんなこと書いてた?

304:デフォルトの名無しさん
25/07/12 11:50:25.66 1ZCd6s+2.net
>>298
言わんとしてることはわかるんだけどそれだと>>206みたいにcargoやパッケージシステムの文脈で「rsのmainから参照されていないのはコンパイルしないのが嫌」って感想にならなくない?

「明示的にmod foo;を書かないとfoo.rsの要素が使えないのが嫌」みたいな感想になるならわかる

305:デフォルトの名無しさん
25/07/12 11:55:36.97 UcJJHcD2.net
たぶん>>298の思い込みだろな
mod宣言の自動補完サポートのある環境でも
暴れていたソース全て自動コンパイル君は満足しないだろう

306:デフォルトの名無しさん
25/07/12 12:05:28.75 zaTcsa1d.net
Rustはソースを全ててコンパイルしないニッチな環境

307:デフォルトの名無しさん
25/07/12 12:09:06.54 +


308:7hp7pNf.net



309:デフォルトの名無しさん
25/07/12 12:13:55.41 zaTcsa1d.net
>>304
コンフィグしたら本体から使ってないファイルもコンパイルするの?
どうやって?

310:デフォルトの名無しさん
25/07/12 12:15:15.86 zaTcsa1d.net
chatGPTに聞いても全てコンパイルしないのはセキュリティ上のリスクになりうると言ってるぞ
他の言語では指定フォルダ以下は全てコンパイルしてるものがほぼ全て

311:デフォルトの名無しさん
25/07/12 12:15:20.77 +7hp7pNf.net
>>305
日本語読み直したら?

312:デフォルトの名無しさん
25/07/12 12:16:10.75 zaTcsa1d.net
>>307
逃げてて草

313:デフォルトの名無しさん
25/07/12 12:17:33.05 zaTcsa1d.net
cargoのコンパイルの仕組みは他の言語のビルドシステムと違う

314:デフォルトの名無しさん
25/07/12 12:18:38.44 +7hp7pNf.net
>>305
真逆のことを書いてるのにどう読み間違えたのか反省しとけ

315:デフォルトの名無しさん
25/07/12 12:21:44.74 zaTcsa1d.net
>>310
壊れてるのはそっちかと

使われていない構造体や変数は指摘するのに指定フォルダにあるファイルで使われていない物を指摘しないのは一貫性の欠如

316:デフォルトの名無しさん
25/07/12 12:22:23.05 zBzCiWbM.net
>>306
唐突に存在しないセキュリティ上のリスクを主張し出して頭大丈夫かね

317:デフォルトの名無しさん
25/07/12 12:23:06.49 zaTcsa1d.net
>>312
そう思うならchatGPTに聞いてみたら?今すぐに

318:デフォルトの名無しさん
25/07/12 12:24:39.95 1ZCd6s+2.net
>>302
複オジは>>286の意図を理解してなかったから論外
「相手の知識不足や認識齟齬を前面から指摘する前に「顧客が本当に求めていたもの」を考えてみるクセを付けるといいと思うぞ」を噛みしめて反省してから出直してくれ

319:デフォルトの名無しさん
25/07/12 12:24:40.32 L2gy/czp.net
>>305
cfgすら使ったことすらないからそんなありえない勘違いを犯す
そこまでRustに興味がないならこのスレから出てけよ

320:デフォルトの名無しさん
25/07/12 12:25:11.32 HqFV/vpR.net
>>298
rust-analyzerには普通にunlinkなファイルの検出とmodの挿入機能があるが

321:デフォルトの名無しさん
25/07/12 12:27:04.02 4NYASHjn.net
>>313
理解してないから書けないんでしょ?

322:デフォルトの名無しさん
25/07/12 12:27:33.28 EI2UEU98.net
>>301
それはRustプログラマーの視点
Rustを叩いている人はそんな視点に立たない

323:デフォルトの名無しさん
25/07/12 12:35:53.23 zaTcsa1d.net
指定フォルダ以下のファイルが全てコンパイルされたら困るっていうけど

大多数の他の言語ではコンパイルされてるけど誰も困っていない

324:デフォルトの名無しさん
25/07/12 12:38:28.40 mpTolNW0.net
>>319
そのバカな言語が存在するのかどうかも興味ないがC/C++でそんなバカなことは起きない

325:デフォルトの名無しさん
25/07/12 12:38:43.51 zaTcsa1d.net
>>315
皮肉すら理解できない人間って最悪だよ

326:デフォルトの名無しさん
25/07/12 12:39:24.02 zaTcsa1d.net
>>320
井の中の蛙大海をしらず

327:デフォルトの名無しさん
25/07/12 12:46:36.04 Tk694sS/.net
連投荒らし君の根拠がいつもchatGPTに聞いたで笑えるが、それが間違ったことばかりとなってる原因は、正しく質問できていない点と、返ってきた説明を理解できていない点の両者にあるため、具体的にかけないのだろう。

328:デフォルトの名無しさん
25/07/12 12:48:52.47 zaTcsa1d.net
IDコロコロさんがまともにレスできたためしがないし理由を突き付けてもキチガイのように同じことを繰り返すのみ

329:デフォルトの名無しさん
25/07/12 12:49:54.56 zaTcsa1d.net
そのような言語は存在しない!ってキチガイのように繰り返すよな

330:デフォルトの名無しさん
25/07/12 12:50:15.35 ZWetqDe9.net
>>312
唐突に関係ないと思える話をするときは、逆のことを狙ってる可能性がある

331:デフォルトの名無しさん
25/07/12 13:04:34.45 iwkrK9OW.net
例えばマルチOS対象ではOS毎の差異を各々別のファイルに記述するため各OS環境毎にコンパイルされるファイルの種類の数は異なるよ
すべてをコンパイルの対象としてしまう言語があるとしたらそういう基本的なことができないお子様向け言語かな

332:デフォルトの名無しさん
25/07/12 13:05:14.41 SY1fpEzr.net
>>312
ファイル単位でコンパイルする言語だと古い中間ファイルが残るから危ないみたいな意味じゃね?
Rustだと関係ないけど

333:デフォルトの名無しさん
25/07/12 15:09:27.64 4NYASHjn.net
>>319
困るというか無駄じゃないの?使われないのに

334:デフォルトの名無しさん
25/07/12 15:35:07.44 T1I+FsnH.net
コンパイル時間は無駄になるかもしれないというデメリットの代わりに同じ名前空間とみなされる範囲なら明示的インポートしなくても自由に使えるようにできるというメリットがある

後工程でのtree shakingの有無だったり最適化のタイミングやコンパイル速度の違いだったりで何を優先するかの判断が違ってくるんだと思う

RustがGo並みのコンパイル速度なら違う判断もあったかもしれない

335:デフォルトの名無しさん
25/07/12 15:47:24.19 KBFf5+FN.net
>>330
まだ理解できないのか?
各環境でコンパイル対象となるファイル群が異なる開発経験がないのだろうな

336:デフォルトの名無しさん
25/07/12 16:25:13.28 +4bHgOCx.net
ディレクトリ掘るたびに「mod.rs」とか「(ディレクトリ名).rs」が必須になるのは、Rustの嫌いな所ではある。
単に呼び出し元で「mod foo::bar::hoge::fuga」って書けば
「mod.rs」も「(ディレクトリ名).rs」も無しに、サブディレクトリのモジュールも使えるんじゃあかんのか?

337:デフォルトの名無しさん
25/07/12 16:36:33.72 d3r8ImcK.net
お前はそもそもmakeの動作原理がわからなくて
依存関係を書いたら「パターンマッチのように(藁)」buildしてくれると思ってるくせにwww

338:デフォルトの名無しさん
25/07/12 16:44:40.89 8uOZlEYG.net
>>332
モジュールやサブモジュールの意義も理解せずに多段にしてるバカ発見

339:デフォルトの名無しさん
25/07/12 16:45:04.21 jM2yGhyK.net
>>316
なんかと思ったらクイックフィックスのあれか
VSCodeのTypeScript拡張なら.tsファイル移動しただけでモジュールのインポート書き換え確認ダイアログ出るじゃん
あのレベルで良い感じにやってほしい

340:デフォルトの名無しさん
25/07/12 17:05:35.48 jM2yGhyK.net
>>301
知らんけど同IDの書き込み見る感じじゃ「パッケージシステムとして」なんて言いつつ実際は「さっさとエラーチェックしてほしい」ってのが真の要望なんじゃない?

341:デフォルトの名無しさん
25/07/12 17:49:30.66 zaTcsa1d.net
他のシステムは参照されなくてもコンパイルされて潜在的なバグを消しつつ開発できる

342:デフォルトの名無しさん
25/07/12 17:59:19.91 d2Ke6oKu.net
絶対使われないコードに潜在的なバグもなにも無い
逆に使われないはずのコードがコンパイルされ実行可能な状態で配布されるのは深刻なセキュリティリスクになりうる

343:デフォルトの名無しさん
25/07/12 18:05:18.51 zaTcsa1d.net
絶対使われないコードなら対象から外せよが今の流れ

DLLじゃなければ使ってないコードはリンカで結合されないので深刻なセキュリティリスクにはならない


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch