- 1 名前:デフォルトの名無しさん mailto:sage [2021/06/17(木) 00:24:12.56 ID:NvYoNP9C.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/ ※C++との比較は専用スレへ C++ vs Rust https://mevius.5ch.net/test/read.cgi/tech/1619219089/ 前スレ Rust part10 https://mevius.5ch.net/test/read.cgi/tech/1617367084/
- 52 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 15:29:27.47 ID:+4cAknZI.net]
- >>43
先輩ありがとうございます!
- 53 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 15:40:08.22 ID:WbPJLyAM.net]
- そういや、可変長引数を直接書けないからRustはクソって言う人はまだ見た事ないな
あんまり使わないからかな?
- 54 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 16:23:01.35 ID:hH2X9nxJ.net]
- >>42
文字列中にNULが含まれないことを前提とした最適化だから NUL含む場合は使えないという制約はあるね Cの文字列と同じ制約だから実用上あまり困らないんじゃないのかな知らんけど
- 55 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 16:29:47.09 ID:hH2X9nxJ.net]
- >>52
Cで可変長引数使いたくなるのってprintf系関数以外なんかある?
- 56 名前:デフォルトの名無しさん [2021/06/21(月) 16:52:01.19 ID:xiUkcw19.net]
- >>54
ない 標準関数ではprintfとscanfだけ
- 57 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 17:01:59.90 ID:UE5kS0Iw.net]
- >>47
なるほど、こういうことかな: (2)' (ptr, len)でスライス文字列を表現している場合 : int btm = ptr + len; while ( ptr < btm && *ptr >= 'A' && *ptr <= 'Z' ) {ptr++;} >>49 差は少なくはなるが、無くなるわけではない。 ptr < btm という部分が残るから。整数比較命令と 条件jmp命令の 合計2命令はまだ(1)より多い。
- 58 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 17:23:50.71 ID:a6mPBEl9.net]
- >>56
そりゃ命令数に差があるのは当然だけど 現代的なプロセッサの並列発行や分岐予測を考慮して なおパフォーマンス差があるかを見たかっただけなので そちらは実際測定して差を確認できた?
- 59 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 17:32:00.25 ID:xiUkcw19.net]
- 議論するのそこ?
むしろセキュリティ(バッファオーバーランの危険性)とパフォーマンスを秤にかけて rustはセキュリティの方を採用したってだけじゃない? パスカル文字列なんて昔からあったわけだし
- 60 名前:はちみつ餃子 mailto:sage [2021/06/21(月) 17:54:38.56 ID:5bV+3LP7.net]
- >>52
どうしてもやりたければビルダーパターンでまとめてから渡すイディオムが確立してるから そんなに不満にもならないんじゃない?
- 61 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 18:00:00.24 ID:W8eb/Sbg.net]
- >>58
いや安全な方を選んだってのはそのとおりだと思うけど 理論上遅いはずってのを実際測るとそうでもなかったってのはよくある話で そこが気になっただけ
- 62 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 18:49:34.95 ID:xiUkcw19.net]
- >>60
rustが組み込みも視野に入れている以上、現代的なプロセッサは当てにできないと思う 8bitマイコンとかでrustが動くのかどうかはわからないけど
- 63 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 19:12:19.82 ID:Qd3Oxzyr.net]
- >>61
別にRustはあらゆるアーキテクチャでのパフォーマンスを保証するつもりはないと思うけどね 実際測定してるのはTier1環境だけだろうし
- 64 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 21:14:54.92 ID:MXwcp+e6.net]
- winapiクレートを使うことってもうなくね?
Microsoft公式のwindiwsクレートの方がよっぽど使いやすいよ
- 65 名前:デフォルトの名無しさん [2021/06/21(月) 21:47:08.31 ID:L+7FW+LR.net]
- >>38
>(1) ptrが0終端文字列を挿している場合: >while ( *ptr >= 'A' && *ptr <= 'Z' ) ptr++; その場合でも、まず与えられたデータが0終端しているかどうかを確認する必要がありますよね。 データがどこから来るのかは、 ネット上の通信相手か ディスク上のファイルか メモリ上の他言語等APIかになりますが、 いずれも盲目的に信頼せずに処理する必要があります。 そして小さいデータならばどんな処理方法でも誤差になるのでしょうが、 大きなデータの場合は>>28のように元はJSONとかHTMLのように構造をもっており、 その解析結果である各一部分が対象文字列になります。 すると0終端させた方がわずかに速く扱える可能性があるからといって、元の大きなデータから毎回コピーして0終端文字列を作る場合と、 コピーをせずにスライスのまま部分文字列を扱う場合との、比較になるのでははいでしょうか?
- 66 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 22:00:11.19 ID:xiUkcw19.net]
- >>64
>元の大きなデータから毎回コピーして0終端文字列を作る場合 どこからコピーの話が出た?
- 67 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 22:22:17.51 ID:oYpDc35T.net]
- >>65
変更したくない文字列"あいうえおかきくけこ"から部分文字列"かき"を取り出す場合、 スライス式だと元の文字列の[5:7]の範囲という形で表現できるからコピー不要だけど ナル終端式だと"く"が邪魔で"かき\0"にできないからどこかに"かき"のコピーが必要になる って話が>>28に出てる
- 68 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 22:57:58.01 ID:xiUkcw19.net]
- >>66
なるほど、理解した
- 69 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 22:58:56.43 ID:ILFJsIgR.net]
- その比較は部分文字列をコピーするかスライスで表現するかの違いであって
0終端文字列のメリット・デメリットとは少し違うんじゃない? 0終端でも同じようにスライスを(ptr, len)で作ればコピーは不要
- 70 名前:デフォルトの名無しさん mailto:sage [2021/06/21(月) 23:46:42.70 ID:oYpDc35T.net]
- >>68
> 0終端でも同じようにスライスを(ptr, len)で作ればコピーは不要 それをやってしまうとその部分文字列に対して0終端のメリットが効かなくなるわけで コピーしないとメリットを得られないというのがデメリットになってる
- 71 名前:デフォルトの名無しさん [2021/06/22(火) 02:10:06.59 ID:JEO56Dr7.net]
- つまり部分文字列を扱う場合は、コピーが発生する0終端方式が不利になりますね。
具体的にファイルパスからディレクトリ部分を得るとか、URLからホスト名を得るとか、元データを破壊したくない時は0終端方式だとコピーするしかないです。 つまり一貫してRustのように始点&長さ方式の方が、有利かつメモリ安全ではないでしょうか? さらに文字列比較の場合も長さ方式よりも0終端方式が不利です。 これはCのmemcmpとstrcmpの比較に還元されますが、 memcmpは64bit比較やSIMD利用ができるからです。
- 72 名前:デフォルトの名無しさん [2021/06/22(火) 02:44:25.97 ID:fStlaCDg.net]
- &strって3つの意味があると思うんだよね
1: 文字列リテラル 2: Stringの参照 3: 部分文字列 文字列リテラルとStringは終端にNULLを付けるようにして(今まで通りlenやcapは残す)、部分文字列は部分文字列を意味する別の型を作ればいいと思った こうすることでRust側ではlenやcapを使い、C側ではNULL終端を利用できるという状態になる(Stringや&strをRustで使ってもCで使ってもゼロコスト) もしNULL終端ではない部分文字列をCで使いたければStringに変換すれば使えるようになる(これはコストがかかるけどCの文字列も同じ問題を抱えてるので問題なし)
- 73 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 08:19:32.37 ID:7Ks2gqqv.net]
- >>70
それやるには文字列がimmutableでなければならないから、それによって生じるスペースコストとどっちをとるかって話だな。 それにimmutableな文字列って、部分変更に相当する処理をする場合に逆にコピーが必要になるし。 どっちにしても一概に、コピー不要だからこっちが有利、みたいな話にはならんかと。
- 74 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 12:15:08.38 ID:UUxAOJV3.net]
- rustで初心者がハマるポイントを初心者が紹介します
・所有権の概念が難しい ・何をするにしても外部ライブラリが必要(乱数生成など) ・ポインタが難しい
- 75 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 12:16:52.83 ID:hfO2UPRV.net]
- ・検索すると同名のゲームの話ばかり出てくる
- 76 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 12:26:02.44 ID:jOUHjhXv.net]
- ・static変数の扱いが面倒臭い
- 77 名前:デフォルトの名無しさん [2021/06/22(火) 12:52:20.13 ID:P9tLBTwV.net]
- >>64
>その場合でも、まず与えられたデータが0終端しているかどうかを確認する必要がありますよね。 「0終端文字列」 というのは、必ず0終端されている文字列の事なので確認は不要。 それを明確にするために、C言語では、const char *pszText; のように、 psz という接頭辞をつける流儀がある。 psz = pointer to string ending with zero. 「0で終端している文字列へのポインタ」 という意味。これは、単なる const char *ptr; とは意味が異なる。 char c = 'A'; const char *ptr = &c; // 単なる文字へのポインタ。0終端されていない。 char szText[] = "Hello"; // 0終端文字列。0終端されている。 const char *pszText = szText; // 0終端文字列へのポインタ。0終端されている。
- 78 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 13:23:35.92 ID:D73AVe+6.net]
- >>76
ファイルから読んだデータをpszHogeに格納するときにゼロ終端の要件満たしてるか確認する必要あるよねって話だぞ
- 79 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 13:25:24.28 ID:RVuteXyT.net]
- >>74がマジで深刻すぎる
ついでに加藤純一っていうゲーム実況者とかとじゅんっていうRust/Scala使いがいるのも紛らわしい
- 80 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 13:35:53.88 ID:IhZgQU+B.net]
- >>76
>というのは、必ず0終端されている文字列の事なので確認は不要。 という考えで脆弱性を量産してきたC言語の負の歴史を顧みて Rustを始めとした新しい言語は異なる文字列表現を採用してるわけだ
- 81 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 14:06:03.07 ID:P9tLBTwV.net]
- >>77
コンピュータの世界で「確認」とは、データの中を検査するという意味で 使われるが、そういうことは不要。 自分で末尾に 0 を書き込む必要があるだけ。
- 82 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 14:15:33.98 ID:3bNpX0tT.net]
- そこで確認不要とか言ってるからユーザにヌル文字含んだ文字列渡されて死ぬのでは
- 83 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 14:51:42.58 ID:jOUHjhXv.net]
- セキュアプログラムは面倒だからなー
数値のオーバーフローチェックとかみんなやらないでしょ? アップキャストして値に結果を放り込んでチェックした後、 ダウンキャストするとか面倒すぎる
- 84 名前:デフォルトの名無しさん [2021/06/22(火) 15:18:09.96 ID:YfWe7YWP.net]
- >>73
Cより面倒臭そうω
- 85 名前:デフォルトの名無しさん [2021/06/22(火) 15:19:46.85 ID:YfWe7YWP.net]
- >>76
そこまで出鱈目な話初めて聴いたわ
- 86 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 15:22:37.78 ID:P9tLBTwV.net]
- >>81
そういう外部からの入力に対するエラーチェックはするのは当然だが、 0終端文字列でやる場合には、ファイルのバイト数だけ読み込んで、 一番最後に 0 を書き込んでおくとそれ以上まで進むことはない。 途中の 0 に関しては スライス方式でも同じ問題が残る。 途中に 0 が有っても大丈夫な様に作るだけ。
- 87 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 15:24:47.81 ID:P9tLBTwV.net]
- >>84
ちなみに、リアルワールドでは俺は名プログラマだと評価されているぞ。
- 88 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 15:27:25.45 ID:P9tLBTwV.net]
- 良いプログラムを作るための基本ポリシー:
・外部データと内部データは明確に分ける。 ・外部データを内部データに入れる場合は、エラーチェックを徹底的にする。 ・内部データに関しては、原則的には完全に正しいことを前提にしてプログラム して良い。ただし、プログラムのミスのための念のためのチェックはしても良い。
- 89 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 15:47:48.20 ID:cJZ3y9Eg.net]
- >>87
3番目のチェックはアサーション(assert)だと思うけどあれはコードを読む人に背景の条件を明示する意味もあるね 逆にアサーション以外の余計なチェックはコードを読む人を混乱させる可能性がある
- 90 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 16:20:58.03 ID:N/B8oZfx.net]
- ヌル終端はパンチカードが現役だった時代に数バイトケチった名残
互換性のためにサポートしなきゃいけないのは理解できるが 今の時代にヌル終端が優れてるとかそれをデフォルトにしろってのは控えめに言って頭おかしい
- 91 名前:デフォルトの名無しさん [2021/06/22(火) 16:22:09.51 ID:jOUHjhXv.net]
- >>87
外部と内部の定義プリーズ
- 92 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 16:30:14.48 ID:P9tLBTwV.net]
- >>90
外部でーたとしては、他にも有ると思うが、一例としては、 1. 他人が自由に書けるファイルから読み取ったばかりのデータ。 (アプリケーション内部にリソースデータとして内蔵し、安全性が テスト済みであるようなファイルは内部データとみなしても良い場合も有る。) 2. 安全対策を徹底したいライブラリの場合は、ライブラリを使う側が関数に 渡してきたテキストデータや引数の値。 ただし、このようなものまで徹底的にチェックするとなれば遅くなるので、 設計思想によっては、NO-CHECK、または、軽いチェックだけで済ましても良い。 3. OSの場合は、同様なものとして、APIを呼び出した側が渡してきたデータ。 これは、安全性チェックは徹底して行う必要がある。 4. データベースソフトなどの場合も、2や3に準ずる。どこまで安全チェックするかは、 使用目的や用途、設計思想による。
- 93 名前:デフォルトの名無しさん [2021/06/22(火) 16:34:27.28 ID:jOUHjhXv.net]
- ちょっと緩くないか?
- 94 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 16:48:00.98 ID:FRtvqWA7.net]
- 信頼境界線の引き方は諸説あるだろ。
- 95 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 19:06:39.53 ID:R8WO8pxt.net]
- 一般に、アプリの外に置いてあるファイルはチェックした方が良いが、
その中でも、テキストファイルは、信頼置け無い事が多いのでチェックは必要。 アプリの外に置いてあっても、バイナリデータだと人が手書きすることはないため、 設計思想にもよるが、安全チェックはある程度省略しても良いと考える流儀もありえる。
- 96 名前:デフォルトの名無しさん mailto:sage [2021/06/22(火) 19:33:50.85 ID:D73AVe+6.net]
- 結局アプリケーションがどう使われるか次第でしょ
アプリケーション作成時の前提が利用シーンの増加により後から覆されるなんてことは良くあることだから 性能要件がない限り最初から安全側に倒しておくのが合理的
- 97 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 11:02:20.62 ID:o/eJBU4s.net]
- constデフォルトあたりの話ってgoto禁止論みたいになっている気がする
理由を理解していないがとりあえずそうしておけみたいな人を少なからず見かけるような >>94 パーサーがガバガバで細工したセーブデータで乗っ取られるゲームのことか
- 98 名前:デフォルトの名無しさん [2021/06/23(水) 14:27:15.67 ID:LIFxwhU8.net]
- >>95
MS製のリンカ(link.exe)の入力するlibraryファイル(*.lib)には、 ヘッダ部分にシンボルがアルファベット順にソートされたシンボルテーブル が入っている。ソートされていることを前提にバイナリサーチが出来るので シンボルを検索するのが高速になるとされる。バイナリサーチは、ソート されているデータに対してのみ正しく検索できて、もしソートされていなければ 間違った結果になる。 しかし、link.exeが*.libを入力する時、ちゃんとシンボルテーブルのシンボル がソートされたかどうかチェックしているかと言うと、定かではない。 だから、もし、サードパーティー製のツールが*.lib を作成した時、 ソートにミスがあったりすると、link.exeはundefined s
- 99 名前:ymbolエラーを出すか、
リンクには成功するが、実行段階でアプリが起動できなかったり途中でダウン してしまうかも知れない。その様な場合、何が原因かは分からないであろうが、 多分、実際、検査はされてない。 [] - [ここ壊れてます]
- 100 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 14:30:46.54 ID:LIFxwhU8.net]
- >>97
実際は、サードパーティー製ツールも、ちゃんと*.libのヘッダのシンボルテーブルの シンボルはソートしており、その部分にはバグはないので、それがソートされてない *.libは基本的には存在しない。 ただし、*.libをバイナリエディタで開いて手作業で間違って変更したりすると ソートされていないものが出来上がる。 それをlink.exeに入力しても、link.exeは、そのことに関してのエラーは出さない だろう。
- 101 名前:デフォルトの名無しさん [2021/06/23(水) 16:29:36.30 ID:6jEPjWCz.net]
- Rustのスレだよね?
- 102 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 17:44:15.71 ID:rKa/khCP.net]
- 小学生が大人に九九暗唱してみせれば微笑ましいが
大人が大人に九九暗唱してみせるなら不気味で滑稽である
- 103 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 18:25:31.65 ID:mfn5LAEG.net]
- 意図通りに動かないバグにつながるという話と
バッファオーバーフローみたいな脆弱性につながるという話は別だよね
- 104 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 19:58:13.96 ID:smIE1EjE.net]
- 再帰を使って1x1=1から9x9=81までの答えだけを書く場合
どうやって書けますか?
- 105 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 20:12:50.89 ID:1lBkKsRv.net]
- fixコンビネータを使う
- 106 名前:デフォルトの名無しさん mailto:sage [2021/06/23(水) 22:38:48.46 ID:GhG+XcCm.net]
- >>102
題意に沿ってるか分からんけど fn main() { f(1, 1); } fn f(a: u32, b: u32) { //println!("{}x{}={}", a, b, a * b); println!("{}", a * b); match (a, b) { (9, 9) => return, (_, 9) => f(a+1, 1), (_, _) => f(a, b+1), } }
- 107 名前:デフォルトの名無しさん [2021/06/23(水) 23:13:30.14 ID:Cy7wfzk/.net]
- 実践的な話をするとRustは末尾再帰最適化が出来ないからなるべく再帰は使わないほうがいいと思う
- 108 名前:デフォルトの名無しさん mailto:sage [2021/06/24(木) 01:50:53.81 ID:UNoTdpdl.net]
- 宿題かなんかだろう。
Rustで宿題を課すなんて教官は変態にもほどがある。
- 109 名前:デフォルトの名無しさん [2021/06/24(木) 23:17:10.64 ID:zHNnGFYG.net]
- >>104の例だとtail recursionになっていないから
内部でloop化できる仮言語で書いてもこのように分解するしかなくて f(1) fn f(a) { f2(a, 1) f(a+1) if a != 9 } fn f2(a, b) { print `${a}x${b}=${a*b}` f2(a, b + 1) if b != 9 } 結局のところ関数分割→個別ループ化→関数統合で二重ループ化まで自動でしてくれる言語は無いから 再帰は使わずに自分でループ化すればいいよね、って結論 つまりアルゴリズムでは再帰で考えても実装はループにしてコメント残しておくのが正解
- 110 名前:はちみつ餃子 mailto:sage [2021/06/25(金) 00:17:11.72 ID:/YhIejlL.net]
- >>107
プログラミング言語 Scheme の仕様だと >>104 のようなパターンは末尾文脈の定義にあてはまるし 末尾呼出し最適化が適用されることが保証されるから、 現代的な言語処理系で最適化できないとは信じられないんだけど、 実際にRust コンパイラに >>104 を与えたときにループに最適化はしないの? Rust のコンパイラの使い方に不慣れでアセンブリコードの出力のさせかたがよくわからん……。 ほぼそのまま C のコードに書き換えてみたら GCC ではジャンプに置き換えたコードが生成されるみたいだし……。 (ちなみに GCC では末尾呼出しになっていなくても一部の状況では再帰をループに変形できることがある。) Clang だとループを全部 unroll しやがった!
- 111 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 11:49:33.37 ID:UuPR+dCF.net]
- c言語だと再帰が末尾呼び出し最適化されるかどうかがオプティマイズレベルで変わるからややこしい。
リリース版だと動くがデバッグ版だとスタックオーバーフローみたいな事になる。 単純な再帰ならループに書き直してもいいけど、相互再帰みたいなのは末尾呼び出し最適化してくれないと困る。
- 112 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 11:58:36.77 ID:CpYoiDkc.net]
- あの、Rustの勉強のために逆引きサンプルwiki作ろうと思うんですけど
テンプレ殿堂入りを目指して作ってもいいですか? もちろん
- 113 名前:広告は入れませんが、レンタルwikiが提供している広告は表示されるかもしれませんが。。。 []
- [ここ壊れてます]
- 114 名前:はちみつ餃子 mailto:sage [2021/06/25(金) 12:05:43.49 ID:/YhIejlL.net]
- >>110
目指すことは自由じゃないの。 皆がどう判断するかも自由だけど。
- 115 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 12:18:21.65 ID:CpYoiDkc.net]
- 先輩ありがとうございます!
受け入れてもらえるようなコンテンツを作ります!
- 116 名前:デフォルトの名無しさん mailto:sage [2021/06/25(金) 15:26:59.18 ID:CCUOu52e.net]
- 5chに閉じずに本家のコミュニティにも便利と思ってもらえるもの目指した方が良いのでは
- 117 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 00:57:24.13 ID:QiaGJu0I.net]
- >>86
ただし石器時代のな
- 118 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 02:18:19.63 ID:morUmgAo.net]
- >>114
ミンチメーカー、ではなくスパゲティメーカーとして恐れられてるかもな
- 119 名前:デフォルトの名無しさん [2021/06/26(土) 03:08:39.74 ID:ljqTs+jf.net]
- Rustと他の言語との違いについて興味深い観点で盛り上がってるスレ
特に後半 趣味でプログラミングの勉強するとしたら何言語がいい? https://matsuri.5ch.net/test/read.cgi/morningcoffee/1623527901/
- 120 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 12:15:14.01 ID:jgmCFZtl.net]
- 斜め読みしかしてないから見逃してるかも知れないけどさんざん言い尽くされた話ばかりだった気が
そもそもRust自体はC++を置き換えることを目的にはしていない
- 121 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 14:26:52.57 ID:UK7NU6RE.net]
- やたらC++と比較されるのはどっちもbetter Cの側面があるからだろうか
個人的にRustはCとScheme(Lisp)のハーフという印象 SchemeよりMLの方が近いらしいけどMLは使ったことないからよく分からない 手続き型で関数型を疑似表現したり関数型で手続き型を疑似表現する試みがあるけど Rustはその中間を上手く埋めてる感じ
- 122 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 14:33:02.82 ID:S/dGZFG2.net]
- > better Cの側面がある
はぁ? お前がcもc++もrustもニワカなのは分かった あと五年間は、カキコ無前にROMに徹してみてほしい
- 123 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 15:07:09.40 ID:UK7NU6RE.net]
- >>119
急にどうしたんだ better Cの意味が分からなかった感じ?
- 124 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 15:16:37.21 ID:zCIOA2Bt.net]
- 実際にはRustはbetter D
- 125 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 15:47:21.36 ID:vR4ZYNRj.net]
- 急に発狂する奴はどこの掲示板にもいる 気にするな
- 126 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 16:24:43.50 ID:MKHy+X82.net]
- わざわざ自演するようなことかね?
- 127 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 16:34:36.83 ID:jgmCFZtl.net]
- mozillaのc++を安全に使う数多の取り組みに疲れ果てた結果出てきた新言語がrustなのでc++と比較されるのは当然
- 128 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 18:03:00.84 ID:cKS/UcnU.net]
- この板全域に出没して何でもRubyと比較するガイジみたいなもんだろ
ここにはなぜかいないけど
- 129 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 18:06:17.50 ID:uWTCkdSJ.net]
- >>116
Rust布教スレになってんじゃん 不健全
- 130 名前:デフォルトの名無しさん [2021/06/26(土) 19:35:22.90 ID:pNIxzUaQ.net]
- 今から新規のプロジェクトをC++かRustで始めるとなったらRustの一択でしょう
つまりRustはbetter C++
- 131 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 21:22:24.72 ID:yvLLLScj.net]
- まったく何も資産がない新規であればそうかもしれんが
- 132 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 21:36:19.59 ID:js6oaYoM.net]
- >>118
どこらへんがschemeに近い? よく知らんがschemeってカッコが一杯あって、再帰ばっかりしてるイメージなんだが
- 133 名前:デフォルトの名無しさん [2021/06/26(土) 21:43:00.01 ID:pNIxzUaQ.net]
- つまり過去のしがらみのある案件は時間がかかり遅れるが
いずれも徐々にC++はRustへ置き換えられていく
- 134 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 21:48:35.28 ID:IGj3fs8T.net]
- 逆に枯れてる分野でしか実装されんわ
- 135 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 21:51:34.18 ID:uWTCkdSJ.net]
- emacsとあとなんだっけ? SVGのライブラリ?が
オブジェクトファイル *.o 単位で少しずつCからRustに移植してたな
- 136 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 22:01:32.26 ID:WPp8qNv5.net]
- librsvgだね
- 137 名前:デフォルトの名無しさん mailto:sage [2021/06/26(土) 23:01:02.22 ID:UK7NU6RE.net]
- >>129
ifとかmatchのブロックがそのまま値になるところが何となくS式っぽいんだよね ブロックの最後の式が全体の値になるのも(begin ..)に近いし
- 138 名前:デフォルトの名無しさん mailto:sage [2021/06/27(日) 00:09:44.66 ID:hddKqCef.net]
- それは単に式指向という話なのでは
- 139 名前:デフォルトの名無しさん mailto:sage [2021/06/27(日) 00:12:27.99 ID:HvPCU4P8.net]
- MLの方が普通に近いな
パターンマッチとか束縛がletとかHMの型システムだとか
- 140 名前:デフォルトの名無しさん mailto:sage [2021/06/27(日) 01:36:30.56 ID:AjjhDlM0.net]
- 一番近いのは Ocaml。なぜなら、かつてRustはOcamlで組まれていたから。
そして途中でコンパイラをRust自身に直したと聞いた。
- 141 名前:はちみつ餃子 mailto:sage [2021/06/27(日) 03:28:07.65 ID:+5rTVQj/.net]
- Rust の Scheme っぽいところを探すとしたらマクロだろ。
伝統的な Lisp 系言語だと実行時の環境とマクロ展開時の環境を分けないが、 Scheme は分ける方針をとってる。 (実際には分けない実装をしている処理系もあるし、次の仕様の更新でどうなるか不透明だけど。)
- 142 名前:デフォルトの名無しさん mailto:sage [2021/06/27(日) 12:22:30.08 ID:HfXxTqRR.net]
- 何に近いかでここまで盛り上がれるのだね
何も産まないのに
- 143 名前:デフォルトの名無しさん mailto:sage [2021/06/27(日) 12:24:39.60 ID:lZYiAKce.net]
- Parkinson's Law of Triviality
- 144 名前:デフォルトの名無しさん mailto:sage [2021/06/27(日) 13:55:37.78 ID:00z9rPIn.net]
- >>139
比較から何かを見出せる人もいるから何も産まないということはないよ
- 145 名前:デフォルトの名無しさん mailto:sage [2021/06/27(日) 14:24:31.82 ID:me9wSnu9.net]
- そんなセンスのある人がここにいると思うのww?
センスないねw
- 146 名前:デフォルトの名無しさん mailto:sage [2021/06/28(月) 20:31:57.40 ID:cQA8O+iD.net]
- ちょっと見ないうちに色々変わる+自分の理解が浅いせいで追いつけない
- 147 名前:デフォルトの名無しさん mailto:sega [2021/06/29(火) 16:25:09.28 ID:W3FYE8ZM.net]
- RustのIDEでおすすめを教えて
- 148 名前:デフォルトの名無しさん mailto:sage [2021/06/29(火) 19:29:01.37 ID:EbM9PL2b.net]
- VSCode+rust-analyzerが定番
- 149 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 01:32:52.11 ID:kSD4a98e.net]
- bindgenって複雑なヘッダーだと全然駄目なんだなあ
殆どそれ目的でRustやってたのに
- 150 名前:デフォルトの名無しさん mailto:sage [2021/06/30(水) 09:59:01.57 ID:2LaR0NZ5.net]
- >>146
実際に使ってみて初めて分かる問題点だね。
- 151 名前:デフォルトの名無しさん [2021/06/30(水) 22:36:50.05 ID:Nj/xCjQN.net]
- >>146
CXXはどうですか?
- 152 名前:デフォルトの名無しさん mailto:sage [2021/07/03(土) 10:43:55.27 ID:6NDcSyYc.net]
- rust始めました!
ってゲームの方を始めてたネタをやろうと思ったけど 想像以上にクソゲー過ぎてダメだった やっぱり言語の方がいい
|

|