1 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 22:55:27.78 ID:972JwtmU.net] 公式 https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust Web上の実行環境 https://play.rust-lang.org 日本語の情報 https://rust-jp.rs/ ※Rustを学びたい人はまず最初に公式のThe Bookを読むこと https://doc.rust-lang.org/book/ ※Rustのasyncについて知りたければ「async-book」は必読 https://rust-lang.github.io/async-book/ ※C++との比較は専用スレへ C++ vs Rust https://mevius.5ch.net/test/read.cgi/tech/1619219089/ 前スレ Rust part11 https://mevius.5ch.net/test/read.cgi/tech/1623857052/
2 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 22:59:11.03 ID:972JwtmU.net] 次スレは>>980 が立ててくださいな
3 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 23:25:20.99 ID:ELplZZUg.net] 980ですゴメンナサイお詫びに Rust The Book (日本語版) https://doc.rust-jp.rs/book-ja/ Rust edition guide (日本語版) https://doc.rust-jp.rs/edition-guide/ Rust by example (日本語版) https://doc.rust-jp.rs/rust-by-example-ja/ Rust cookbook (日本語版) https://uma0317.github.io/rust-cookbook-ja/ Rust API guideline (日本語版) https://sinkuu.github.io/api-guidelines/ Rust nomicon book (日本語版) https://doc.rust-jp.rs/rust-nomicon-ja/ Rust WASM book (日本語版) https://moshg.github.io/rustwasm-book-ja/ Rust embeded book (日本語版) https://tomoyuki-nakabayashi.github.io/book/ Rust enbeded discovery (日本語版) https://tomoyuki-nakabayashi.github.io/discovery/
4 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 23:38:41.54 ID:dmSXpC2X.net] Rust CLI (Command Line Interface) apps Book https://rust-cli.github.io/book/ Rust async-std Book https://book.async.rs/ Rust The Unstable Book https://doc.rust-lang.org/nightly/unstable-book/ Rust rustc Book https://doc.rust-lang.org/rustc/ Rust Cargo Book https://doc.rust-lang.org/cargo/
5 名前:デフォルトの名無しさん [2021/08/25(水) 02:49:11.51 ID:NhkykFBw.net] >>1 乙です。
6 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 03:59:04.43 ID:4va1W6vx.net] The Rust Reference https://doc.rust-lang.org/reference/ The Rust Standard Library https://doc.rust-lang.org/std/
7 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 08:19:23.75 ID:o6V8MH2P.net] 前スレで循環参照なんて初心者でもすぐ作れてしまうとの意見もあったけど Rc型を使うだけの初心者には原理的に不可能 内部可変性を与えるRefCell型も併用しないと循環参照は作れない 一つの可変参照&mutか複数の不可変参照&のどちらかのみ許されるコンパイル時確認ルールを実行時確認ルールで行なうのがRefCell型 それにより明示的に可変参照を得ることで内部可変性を持てるようにしたもの そしてRcと組み合わせてRc<RefCell<T>>を使うことで既にあるリンクを書き換え出来るようになりようやく循環参照を作れる もちろん自分でunsafeすればやりたい放題てすがunsafeせずともメモリ安全性ルールの元に使えます ここまで出来る人なら強参照Rcだけでなく弱参照Weakも併用できますから循環参照を避けることも出来るでしょう
8 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 08:36:39.57 ID:cBrhi5Vz.net] マーフィーの法則 失敗する余地があるなら、失敗する
9 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 09:53:46.73 ID:wz3i5qam.net] テンプレートがやたらたくさん入り乱れる言語は嫌いだわ 可読性めちゃくちゃ悪いよな
10 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:40:52.46 ID:FDhW8k6p.net] >>7 そこまでできてやっとRust初心者という見方もあるかもしれない
11 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 11:24:43.65 ID:cB4G1Ahy.net] 直接関係ないけど、RefCellは借用チェックが実行時段階でのチェックになって しまうんだってな。
12 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 11:34:25.36 ID:N5SObJek.net] >>11 長文だから>>7 をスルーしたな?
13 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 11:41:16.58 ID:cB4G1Ahy.net] RefCellの借用チェックが実行段階にまで持ち越されるのは、循環参照とは全く別の話。 それはつまり、「ゼロコスト」ではないということ。
14 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 12:14:34.01 ID:CoZuOKep.net] >>7 Rc<RefCell<T>>じゃなくてRefCell<Rc<T>>だね 気持ちはよく分かる
15 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 12:30:44.27 ID:XsBK0uKE.net] >>14 どっちもあるけど通常はRc<RefCell<T>>だよ
16 名前:デフォルトの名無しさん [2021/08/25(水) 13:42:20.13 ID:6n+Di1sM.net] >>983 なるほどサンクス リージョン理論に線形論理を上手く組み合わせて、cycloneとかの欠点を克服したrustってすげーなあ とはいってもそもそも二重開放してエラーになるというのがピンとこない free(a); free(a); は二重解放しているように見えて合法だろ? 一度目のfreeでaにNULLが代入されて、二度目のfreeでは引数がNULLの場合はそのままreturnって処理されるんだから、理論上は何度free使ってもエラーにならないじゃないか
17 名前:デフォルトの名無しさん [2021/08/25(水) 13:42:36.69 ID:6n+Di1sM.net] これに答えろ
18 名前:デフォルトの名無しさん [2021/08/25(水) 14:22:27.47 ID:aLlQE3on.net] >>16 なぜRustのスレに書いているのか不明だけど 当然NULLにならなかったよ キャスト警告無視で #include <stdlib.h> main() { char *ptr = malloc(1024); printf("ptr(1): %x\n", ptr); free(ptr); printf("ptr(2): %x\n", ptr); free(ptr); printf("ptr(3): %x\n", ptr); } 実行結果 ptr(1): ea8f72a0 ptr(2): ea8f72a0 free(): double free detected core dump
19 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 14:49:12.37 ID:FDhW8k6p.net] >>11 静的にチェックできないような使い方を実現するためのものなんだから 実行時チェックになるのは当然では オーバーヘッドが気になるなら UnsafeCell を使えばよい >>16 C には参照はないので free(a) という呼び出しで a の値が書き換わることはなく malloc で獲得した領域のアドレスがそのまま残る 領域自体は free で解放済みになっているため、アクセス (free 呼び出し含む) した場合何が起きるか分からない このような解放済みの領域へのアクセスは use-after-free と言われるもので、脆弱性の原因として有名
20 名前:デフォルトの名無しさん [2021/08/25(水) 14:50:41.52 ID:6n+Di1sM.net] >>18 なるほど free内で代入されるのではなく 自分で代入しないとNULLにはならないのですね。 ありがとうございました。
21 名前:デフォルトの名無しさん [2021/08/26(木) 04:09:52.45 ID:wR4WgiQO.net] そういやNull代入派とかいうのもいたな
22 名前:デフォルトの名無しさん [2021/08/26(木) 07:18:01.38 ID:BSY6c8/C.net] uaf防ぐのってぶっちゃけ簡単ですよね?freeしたあとにNULL代入するのを鉄則化するだけですよね?
23 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 07:18:53.92 ID:tGDEA4MX.net] ポインタコピーすることないの? 加減算することないの?
24 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 07:42:26.49 ID:YoD5H0JF.net] int* p1 = malloc(sizeof(int)); int* p2 = p1; free(p1); p1 = NULL; free(p2); 極端に書くとこうかなあ?
25 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 08:58:05.69 ID:yCq+tuyV.net] >>22 1つのオブジェクトを複数のポインタで挿している場合にそういうわけにはいかない。
26 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:21:56.64 ID:yCq+tuyV.net] >>25 誤字訂正: 挿して ---> 指して
27 名前:デフォルトの名無しさん [2021/08/26(木) 14:46:24.90 ID:BSY6c8/C.net] >>25 複数のポインタにそれぞれNULL代入したらいいだけの話ですよね? 難しい話ですか?
28 名前:デフォルトの名無しさん [2021/08/26(木) 14:52:56.47 ID:BSY6c8/C.net] >>23 加減算考慮するとなんかやばいんですか? 本当に素人なので教えてください!!
29 名前:デフォルトの名無しさん [2021/08/26(木) 14:53:33.93 ID:BSY6c8/C.net] >>24 p2=NULL;すればいいだけの話ですよね?
30 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 14:54:04.18 ID:ILFADcfC.net] Cスレでやれよ
31 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 14:55:34.47 ID:s9ncfwmd.net] >>27 効率が落ちる。
32 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:01:32.05 ID:jqKFKJA4.net] >>27 プログラミングをしたことがなく 頭の中での思考実験もできないのか プログラマーに向いていない
33 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:04:39.60 ID:s9ncfwmd.net] 手で書くと効率は落ちないが、実行段階で自動的に NULL を入れようとすると 効率が落ちるという意味ね。時間とメモリーの両方で。 NULLが入っているか判定して error にするなどの処理も必要となったりする。
34 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:06:19.25 ID:VJ7dcvV2.net] >>27 難しいです…
35 名前:デフォルトの名無しさん [2021/08/26(木) 15:11:05.26 ID:BSY6c8/C.net] >>32 すみません。 おっしゃるとおりかも知れないです。。
36 名前:デフォルトの名無しさん [2021/08/26(木) 15:12:24.56 ID:BSY6c8/C.net] >>31 >>33 そんなに効率が落ちますか?
37 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:18:41.61 ID:s9ncfwmd.net] >>36 凄く落ちるわけではないが。
38 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:21:09.64 ID:s9ncfwmd.net] >>36 参照カウンタ方式は、自動的に関連するポインタを巡ってNULLを入れるよりは 効率が良いのでプログラマーの裁量で選択できるようになっている。 しかし、それでも僅かに効率が落ちるのでなるべく使わないでプログラムする 方が良いと思うプログラマーが多いということだよ。
39 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:24:37.81 ID:bKmDdfbf.net] プログラマーならば、まず思考実験、それで解決しなければコーディング その上で問題点を尋ねる それをしない人はプログラマーではないから、このスレの邪魔
40 名前:デフォルトの名無しさん [2021/08/26(木) 15:24:45.61 ID:BSY6c8/C.net] >>38 そんな僅かな効率の低下でも忌避されるんですね!! わかりました!!
41 名前:デフォルトの名無しさん [2021/08/26(木) 15:25:39.02 ID:BSY6c8/C.net] >>39 こわい。。
42 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:25:45.57 ID:s9ncfwmd.net] 手作業で書く場合は、1つのオブジェクトを削除する場合、それを参照する 全てのポインタに NULL を入れるのは効率が良い。だから、多くのC/C++ プログラマはかつてそうしてきたし、今でもそうすることも多い。 ところが自動でそれをやるには静的解析は難しいので実行段階でも 余計なメモリーを追加で消費して行うことになる。それが効率が悪い。 そして、NULLが入っているかどうか分からないのでその参照を 使う場合には、いつも最初にNULLが入ってないことを確認してから 作業をする必要があり、その判定に 2 クロックくらいかかる。 この2クロックが忌避される。
43 名前:デフォルトの名無しさん [2021/08/26(木) 15:26:04.39 ID:pXAeL9Oq.net] >>7 言ってる事はかねがね同意ですが、プログラムが共同作業の為にRefCell<Rc<List>>とA氏が定義してあるものに 違う人B氏が何も考えずにRc::clone(&a)で循環を入れてしまう事は十分あり得るでしょう。 状況次第ですが循環参照を考慮してないA氏が悪いのか、Rc::clone(&a)でぶち込んだ人が悪いのかは要件次第ですが これを簡単と言わずに(あなたは言っていませんが)難しいと表現するのは違和感がありますよ
44 名前:デフォルトの名無しさん [2021/08/26(木) 15:28:09.24 ID:BSY6c8/C.net] >>42 詳しい解説ありがとうございますm(_ _)m メモさせていただきます。
45 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:28:30.66 ID:uyKM6LSq.net] >>37 嘘を教えたらあかんやろ N人の人が自分を指しているとして まずそのN人をどうやって知る?
46 名前:デフォルトの名無しさん [2021/08/26(木) 15:29:12.92 ID:BSY6c8/C.net] >>45 自力で数えればいいんではないでしょうか?
47 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:30:36.47 ID:s9ncfwmd.net] >>40 まあ、そういうこと。 というのは、参照カウンタも、1つのヒープノードに対して必ず1つ必要になるので、 ノード数が多いときには膨大なメモリーの無駄になるから。 それとノード数が多いときに参照カウンタを 0 クリアしたり、1足したり する作業も馬鹿にならないと考えるプログラマが多い。 なぜかというと、そういう自動化を行わなくても、人が頭で考えて手作業で NULLを入れても十分に安全にプログラムできるプログラマが多かったからだよ、 少なくとも昔のCプログラマには。 手作業でやってもとくに危険を感じないので、効率を落としてまで自動化する 必要が無いと思われている。 手作業でNULLを入れるのは難しくない。 ところが、コンパイラが自動で効率を落とさずにそれをやるのはめちゃくちゃ難しい。 それは人間の脳がそれだけ優秀だということだよ。
48 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:31:47.17 ID:s9ncfwmd.net] >>45 手作業で人間が頭で考えたら、難しく感じないプログラマが多かった、という ことだよ。 難しく感じるプログラマも居る。 数学の才能だと思う。
49 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:32:40.17 ID:GoG5gW1P.net] コピーしたポインタを別スレッドに転送とかしてたら、いつNULL代入すべきかすら分からんしなぁ
50 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:32:44.57 ID:s9ncfwmd.net] >>48 ああ、自動化の効率面の話か。 凄く効率が落ちるわけではないよ。 リンクで辿るだけだから。
51 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:42:17.45 ID:Nkfv2brF.net] >>47 違うだろ ある時点でNヶ所から指されているとして そのNヶ所をどうやって知る?誰がどのようにNヶ所を管理する?
52 名前:デフォルトの名無しさん [2021/08/26(木) 15:43:01.48 ID:BSY6c8/C.net] >>51 僕がです。
53 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:46:08.68 ID:s9ncfwmd.net] >>51 静的解析はコンパイラには難しいが、動的なら簡単。 人間にも、「一般性を持って」は分かる方法は無い。
54 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:47:35.53 ID:s9ncfwmd.net] 言っておくが現実世界では俺は天才だと言われているから、俺が簡単だと 思うことは、大部分のプログラマには難しいと思うかもしれないがな。
55 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 15:48:12.84 ID:fifffju2.net] >>52 データ構造は入出力の変化に伴いどんどん変化していく可能性がありますから人間は覚え追いきれないよね さらに一つのmalloc毎にそれぞれそこをポイントしている利用者の数も利用者数も異なりますよね それらのデータをどこでどうやって管理するつもりですか?
56 名前:デフォルトの名無しさん [2021/08/26(木) 15:54:12.28 ID:BSY6c8/C.net] まず前提が誤りです 変化を追えば覚えられます 思考実験できないんですか?
57 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:04:38.88 ID:xjpSGKrK.net] >>56 利用者リストを覚えておくためにメモリが必要やね それもmallocするか mallocで取ってきたメモリ管理のために更にmallocが必要となってしまったぞ 利用者が増えてきたら利用者リストの領域が足りなくなる またmallocするか 全てにNULLを入れるためだけに大がかりになってきたな この方法は本当に大丈夫なのか?
58 名前:デフォルトの名無しさん [2021/08/26(木) 16:08:02.62 ID:BSY6c8/C.net] >>57 静的に確認すればすむ話です
59 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:17:15.72 ID:5iULk00o.net] データが育っていったら100か所からリンクされるとか普通によくあるわけだが その100か所にNULLを代入しにいくために100か所の場所をリストで持つのか しかもmallocした各データ毎にリストを持つのか 全てにNULL代入はあきらめた方がいいんじゃね?
60 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:20:01.23 ID:4xBLfuks.net] アクセスするとたちまち例外発生するぬるぽにはどんなデータが格納されているのだろうか
61 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:23:55.37 ID:YoD5H0JF.net] int* p1 = malloc(sizeof(int)); int* p2 = malloc(sizeof(int)); int* p3; if (なんかの条件) p3 = p1; else p3 = p2; free(p1); p1 = NULL; // p2はまだまだ使う こういうときp3はどうするのかっていう
62 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:28:43.55 ID:HI0uJlB9.net] すべてのヒープを**ptrで管理すればできなくもない気がする 参照するたびに有効かチェックしないといけないから激しく面倒だけど
63 名前:デフォルトの名無しさん [2021/08/26(木) 16:29:37.04 ID:BSY6c8/C.net] >>61 なるほど 参考になります 回答してくださってありがとうございました。
64 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:32:51.02 ID:+fzqgCTs.net] >>62 その**ptrの格納領域の確保がデータ事に発生 しかも伸長してしまいますね
65 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:33:25.33 ID:W3uKoL9G.net] 何の参考だよ
66 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:36:08.26 ID:YoD5H0JF.net] https://twitter.com/cpp_akira/status/1430779310885859330 最近はC++の発表資料を公開すると「Rustでいいじゃん」というコメントがたくさんつくのか…。Rustへの言及とか一文字も書いてないのに。 普及活動だと思うけど、さすがに嫌がらせチックに見える。 ↓の資料公開した時の話っぽいんだけど、Rustでいいじゃんって言われてるソースが見つからない・・・ https://speakerdeck.com/faithandbrave/opunhua-gajin-muc-plus-plus-falsexian-zhuang-tozhan-wang 言われててもおかしくないとは思うけど、実際のところどうなんすかねえ アロケータ回りがまだ弱いから少なくともゲームは10年後もC++のが強そう (deleted an unsolicited ad)
67 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:38:42.43 ID:n3k5ztC+.net] >>27 まだ利用者がいるのに全てへNULL代入しにいく時点で破綻 つまりまだ自分以外の誰かが利用中かどうかを知らないといけない つまり利用者リストを管理する必要がある
68 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:39:16.76 ID:6RYxqPIE.net] おまえらスレチがすぎるぞ まとめてどっかいってくれ
69 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:43:10.20 ID:xwYftXVU.net] >>66 Rust はメモリ安全性を保証することが論文で示されているので どうしてもC++でないと出来ないこと(=まだRustが対応してないこと)であることを示さないと 「Rustでいいじゃん」となってしまうのは仕方ないかも
70 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 17:32:35.75 ID:guyKB2RO.net] Rustは言語仕様が未確定なのが懸念事項かな 実用上は大して困らないからどうでもいいんだけど 期待してたRust Foundationは何故かディレクター探し始めてるしw
71 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 17:40:08.48 ID:ek8X72OL.net] >>70 2018editionに2019のasync/awaitゼロコストサポートで言語としては完成でしょ?
72 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 17:48:35.66 ID:TtF6fD9w.net] >>70 それを期待するならFoundationよりこっちかな https://ferrous-systems.com/ferrocene/ 2022年末にASIL-B認証が目標
73 名前:デフォルトの名無しさん [2021/08/26(木) 18:01:26.94 ID:BSY6c8/C.net] >>69 どの論文だよ
74 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 22:38:09.77 ID:57cnJJ44.net] >>71 まだOpenなRFCいくつあると思ってるんだ
75 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 23:09:41.27 ID:6XyucKpc.net] そんなこと言い出したら他の言語も未完成 永久にね
76 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 23:45:46.81 ID:3VQCq3O/.net] でもSchemeとか言語仕様も形式意味論も定まってるし
77 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 23:50:11.85 ID:guyKB2RO.net] とりあえず https://doc.rust-lang.org/stable/reference/ のWarningを消してくれるだけでいいんだ 2018版だけでも確定できないのかな
78 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 23:57:00.95 ID:yl47Ujhv.net] 確定できないというよりメンテする人がいないんじゃないかな 言語仕様に詳しいけどコード書くよりドキュメント書きたいっていう奇特な人が要求されるわけで
79 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 00:00:45.70 ID:cm2Md9qJ.net] ferroceneみたいに具体的な目標があって企業が投資してるなら進むだろうけど リファレンスの更新とかあまり需要もないじゃない?
80 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 00:16:19.30 ID:i+fGpSJz.net] 完全な仕様書は間違いなく必要ではあるよな。
81 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 00:25:02.14 ID:LvLZjQiD.net] 完全な仕様書www どんだけ素人なんw
82 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 00:25:46.96 ID:vEj4Ie0t.net] 第三者が処理系を作れるレベルで言語仕様が固まれば普及が進むと思うんだけどね Rust Foundationにはそういう方向性を期待してたけど想像以上に何もしなかった
83 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 00:39:02.98 ID:cm2Md9qJ.net] Foundationはもともと裏方に徹する組織だと言ってたし その通りに動いているのでは 最近だとgccrsのライセンス絡みの知財チェックとかやってたかと
84 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 00:45:32.58 ID:foV8RWB5.net] 言語仕様が固まるってのは新機能の追加をやめるということ?
85 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 00:49:06.81 ID:21t4GoG3.net] 言語仕様とコンパイラのバージョンが一体化しているようではミッションクリティカルな領域で採用されない
86 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 01:13:55.67 ID:vEj4Ie0t.net] >>84 厳密に運用するなら機能を追加するときは言語仕様のバージョンも上げる 固めるのは言語仕様の1つのバージョンってだけで言語の進化をとめるわけじゃないよ
87 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 01:28:41.09 ID:i+fGpSJz.net] >>84 現状では「今そのように動いている処理系」と「処理系の (不十分な) ドキュメント」がある状態で、 それのどこからどこまでが言語仕様として満たすべき要件なのか保証されている動作なのかがわからない。 追加するも何も今の時点でどうなっているのかわからん。 どこかにはあったりもするんだろうけど、開発者向けの議論の中などに分散していて「仕様書」としてまとまってないんだ。
88 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 02:31:48.28 ID:RPPiA5lc.net] 安全性は型システムによるところが大きいから、仕様書が無いと使えないというのは無いと思うがね
89 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 02:39:18.77 ID:8/O2Ek7n.net] コンパイラだってバグがない保証なんてないんだから テストするしかないね
90 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 02:39:45.83 ID:xRe29h0Q.net] ISO 26262のコンパイラ認証とか無理そう
91 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 07:59:32.64 ID:ebhntqkF.net] LLVMの中間表現に依存してる時点で、言語仕様をまともに設定するのは無理。 だから他のコンパイラが作られることもない。
92 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:07:16.05 ID:PnoFi7iU.net] 仕様書、仕様書言っている人はOSやライブラリのAPIとかシステムコールとかはどう考えているんだろうね MSDNだって盲信できるほどの信頼性はないし、OSS系なんてソースコードが仕様書状態だろ もっと言えば処理系だってオプティマイザの仕様などは文書化されていなく、実際に調査しないと判らない事も多いよな
93 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:07:24.55 ID:/EVH9JcP.net] こんな状態じゃc++の置き替えなんて夢のまた夢だな。
94 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:43:05.29 ID:8HMvxqPN.net] 完全な仕様書wがないのが問題だ思うなら使わなければいいだけ クッソ無駄なやりとりでスレ消費すんな
95 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:54:32.00 ID:ZVb7iGYH.net] 少なくともC++はもっとずっと細かな仕様が書いてある。 例で説明する時でも、変な例で説明せずに数学の教科書の様な粒度の細かい例で 説明されているで、数学の教科書の様な雰囲気を持っている。 Rustの場合、ライフタイムの説明をとってみても、ちゃんとした数学的説明になってない。
96 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 08:57:07.99 ID:ZVb7iGYH.net] 時々プログラミングは文系でも出来るという人が居るが、そういう人には、 数学的な説明とは何かがぴんと来ないかもしれないので、良い仕様書も 書けないかもしれない。Rustのbookの著者ももしかしたらそうなのかも。 本人は頑張って書いているつもりでも数学的な論法になってない。
97 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:04:15.77 ID:ZVb7iGYH.net] 高校数学レベルで言えば、ベクトルの和の定義は図で例を使って説明されるが、 3つの矢印で、c = a + b が説明される。 これは最も粒度が細かい説明で、これ以上簡単に説明できない。 ところがRustのライフタイム注釈の説明は、説明に使われている例が不適切で とても長いが本質が説明し切れてない。 本来は、「ライフタイム注釈とは何か」を数式や擬似命令などを使ってせいぜい2ページ以内で 説明できるはずだ。 ところが実際の説明は、変な例を使って長々と説明されている。 数学的な説明になっていないので応用が効かない。 数学的説明とはほとんどの場合「パターン」だ。パターンになっているから応用が効く。 パターンとして説明されてないと応用が効かない。
98 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:06:37.74 ID:pCZxoLJn.net] コンパイラが一つしかない状況は現状メリットでしかない C++のようなレガシー言語の轍を踏まない賢い選択
99 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:11:46.45 ID:ZVb7iGYH.net] 数学的説明にしたいなら、 「仮定」を置く。 「入力」と「出力」を明確にする。 「最も粒度の小さい例を書き、パターン」にする。 集合論や論理学の「かつ」「または」「積集合」「和集合」「背反集合」「区間の積」 などの言葉を使って書く。 ところが、Rustのbookはこのようなことが全く出来てない。
100 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 09:15:12.91 ID:ZVb7iGYH.net] >>98 仕様書が数学的(パターン的、自動機械的)に書いてないので、厳密な 仕組みや仕様が分からず、他の人がコンパイラが作りにく。 だから、「Rustは実験してみないと分からない」。 ところが、CやC++やRuby,Java,C#,Pythonなどは実験しなくても分かる ようになっている。それはなぜかというと、仕様が粒度が細かく説明されて いるから、パターンになっており「パターンの一部への代入」や「当てはめ」 が出来るので頭の中だけで全てプログラミングできてしまうから。