スレタイ以外の言語もok
前スレ
次世代言語22 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1629590343/
探検
次世代言語23 Go Nim Rust Swift Kotlin TypeScript
■ このスレッドは過去ログ倉庫に格納されています
2021/11/28(日) 16:59:19.16ID:gZqbEyz/
398デフォルトの名無しさん
2022/02/28(月) 23:29:23.70ID:7SSxP2tw >>392
それはRustが最高速を出すために
ジェネリクスを具体的な型に対してコンパイル時に静的にモノモーフィングするからであって利点の一つ
もちろん稀なケースでは動的にディスパッチしたほうが有利なこともあるのでRustは静的と動的のどちらも選べる
それはRustが最高速を出すために
ジェネリクスを具体的な型に対してコンパイル時に静的にモノモーフィングするからであって利点の一つ
もちろん稀なケースでは動的にディスパッチしたほうが有利なこともあるのでRustは静的と動的のどちらも選べる
399デフォルトの名無しさん
2022/02/28(月) 23:58:18.16ID:pJo2hpV4400デフォルトの名無しさん
2022/03/01(火) 00:00:29.40ID:MT73K7Vw >>399
はい、嘘乙w
はい、嘘乙w
401デフォルトの名無しさん
2022/03/01(火) 00:02:10.33ID:MT73K7Vw402デフォルトの名無しさん
2022/03/01(火) 00:35:18.37ID:I7tVqKwp403デフォルトの名無しさん
2022/03/01(火) 06:36:40.86ID:kkFVnbRG ポインタ繋ぎ変えるのはRustでは面倒です←まあわかる
ポインタ繋ぎ変えるのはバッドプラクティスなのでアリーナ使って富豪みたいなメモリの使い方しましょう← ?????w??!???????????????????w
ポインタ繋ぎ変えるのはバッドプラクティスなのでアリーナ使って富豪みたいなメモリの使い方しましょう← ?????w??!???????????????????w
404デフォルトの名無しさん
2022/03/01(火) 18:23:47.64ID:I7tVqKwp >>403
いや何でもかんでもArena使えってことではないよ
Arenaは処理の間、メモリの解放が起こらずに解放する時はまとめて解放するようなデータ構造で使うものだよ
rustのソース読んでたらAST作る部分で使ってた
ASTはまさにそのような部品
rustのソースは学びが多すぎる
いや何でもかんでもArena使えってことではないよ
Arenaは処理の間、メモリの解放が起こらずに解放する時はまとめて解放するようなデータ構造で使うものだよ
rustのソース読んでたらAST作る部分で使ってた
ASTはまさにそのような部品
rustのソースは学びが多すぎる
405デフォルトの名無しさん
2022/03/01(火) 18:27:16.34ID:wlQMHsd9 arenaって富豪的なの?
最近のmalloc実装はarena使ってるからそれも富豪的ってこと?
最近のmalloc実装はarena使ってるからそれも富豪的ってこと?
406デフォルトの名無しさん
2022/03/01(火) 18:36:51.05ID:I7tVqKwp407デフォルトの名無しさん
2022/03/01(火) 19:11:45.23ID:wlQMHsd9 >>406
なんでslab allocatorが関係してるの?
なんでslab allocatorが関係してるの?
408デフォルトの名無しさん
2022/03/01(火) 19:31:58.30ID:kkFVnbRG >>404
ASTみたいな構造+途中で解放する必要があるって時の解がRustにないので、オレオレ実装をプロジェクトごとに入れるか、アリーナを何度も作っては捨ててを繰り返しながら世代型GCもどきを作るかするしかなくない?
これは事実上なんでもアリーナでやるってことになると思うけど
ASTみたいな構造+途中で解放する必要があるって時の解がRustにないので、オレオレ実装をプロジェクトごとに入れるか、アリーナを何度も作っては捨ててを繰り返しながら世代型GCもどきを作るかするしかなくない?
これは事実上なんでもアリーナでやるってことになると思うけど
409デフォルトの名無しさん
2022/03/01(火) 20:13:49.20ID:lFABJG9J 強力な静的型付けと言うのは普通のプログラム言語は当たり前でスクリプト崩れがそうでないだけだと思うけどなあ…
410デフォルトの名無しさん
2022/03/01(火) 20:26:25.79ID:wYBPD4DC >>408
そういうのはまさにRefCellを使うしかない
arenaはあくまで処理の間は絶対に解放されないデータ構造をまとめて確保するために使う
例えばASTだったりネットワークグラフだったりね
こういうメモリの使い方のセンスってGC言語が当たり前になったせいで完全に失われた技術って感じがする
そういうのはまさにRefCellを使うしかない
arenaはあくまで処理の間は絶対に解放されないデータ構造をまとめて確保するために使う
例えばASTだったりネットワークグラフだったりね
こういうメモリの使い方のセンスってGC言語が当たり前になったせいで完全に失われた技術って感じがする
411デフォルトの名無しさん
2022/03/01(火) 20:34:17.98ID:KSXXo2gm >>409
静的型付き言語の中でも代数的データ型や型制約のような型の表現力の違いというのはあると思うよ
静的型付き言語の中でも代数的データ型や型制約のような型の表現力の違いというのはあると思うよ
412デフォルトの名無しさん
2022/03/01(火) 20:36:04.73ID:wYBPD4DC >>408
ちなみにarenaみたいな仕組みを実はV8は実装している
HandleScopeという仕組み
これはHandleScopeが生きている間はメモリが解放されないが
HandleScopeが死ぬタイミングで全てのローカル変数のメモリが解放される
ちなみにarenaみたいな仕組みを実はV8は実装している
HandleScopeという仕組み
これはHandleScopeが生きている間はメモリが解放されないが
HandleScopeが死ぬタイミングで全てのローカル変数のメモリが解放される
413デフォルトの名無しさん
2022/03/01(火) 20:42:46.97ID:wlQMHsd9414デフォルトの名無しさん
2022/03/01(火) 20:53:08.57ID:VJyX+NRp ObjCのautoreleaseみたいなのが最初からあると楽でたすかる
415デフォルトの名無しさん
2022/03/01(火) 22:06:55.93ID:kkFVnbRG >>410
なるほど……
なるほど……
416デフォルトの名無しさん
2022/03/01(火) 22:31:05.05ID:kkFVnbRG いやRefCellはしんどいって
やっぱgcpointer復活して欲しい
やっぱgcpointer復活して欲しい
417デフォルトの名無しさん
2022/03/01(火) 23:43:07.40ID:cUOzOJ3p RefCellなんてたまにしか使わないものだし使うときも困るようなものじゃないぜ
おそらくRustのアンチが不利っぽく見えるところを取り上げようとしてるんだろうけとさ
おそらくRustのアンチが不利っぽく見えるところを取り上げようとしてるんだろうけとさ
418デフォルトの名無しさん
2022/03/01(火) 23:52:21.58ID:X64WHIwe そりゃテキトーなスクリプトで済むようなコードばっかなら使わんだろうね
419デフォルトの名無しさん
2022/03/01(火) 23:55:04.65ID:pLY9i2hK 分野にも依るんだろうけどWeb関係やってるとRefCellの出現は超レア
ライブラリの方のソースも全て見たけど
RustのHTTPデファクトスタンダードのhyperで1ヶ所だけ出現
その上のレイヤーのライブラリ群ではゼロ、HTTPS扱うhyper-tlsでもゼロ
ライブラリの方のソースも全て見たけど
RustのHTTPデファクトスタンダードのhyperで1ヶ所だけ出現
その上のレイヤーのライブラリ群ではゼロ、HTTPS扱うhyper-tlsでもゼロ
420デフォルトの名無しさん
2022/03/02(水) 00:44:16.33ID:2MKUvw25 Webだとメモリ上に状態を永続的に保つ必要はないからrust向きだよね
所有権を渡していくことで自然と安全なプログラムが書ける
永続情報はデータベースかmemcacheみたいなkvstoreに入れるし
所有権を渡していくことで自然と安全なプログラムが書ける
永続情報はデータベースかmemcacheみたいなkvstoreに入れるし
421デフォルトの名無しさん
2022/03/02(水) 01:01:39.91ID:uPKvDIET422デフォルトの名無しさん
2022/03/02(水) 01:27:42.89ID:vZCB5GJW423デフォルトの名無しさん
2022/03/02(水) 02:27:42.01ID:/7glPJ4X 循環参照が必要な時にやれることが「プログラマが注意して管理しましょう」しかないのキツくない?
424デフォルトの名無しさん
2022/03/02(水) 03:42:27.38ID:S8+3WyDZ >>423
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できる
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
だから非現実的な机上の空論で悩む必要はない
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できる
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
だから非現実的な机上の空論で悩む必要はない
425デフォルトの名無しさん
2022/03/02(水) 03:44:23.51ID:re9dUtRi グラフとか木構造になるの?
426デフォルトの名無しさん
2022/03/02(水) 03:47:03.10ID:/7glPJ4X 世界が狭い人に非現実って言われちゃった
427デフォルトの名無しさん
2022/03/02(水) 03:52:48.36ID:/7glPJ4X > なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
これが真ならベルマンフォードとか使うケースはどうなるんだ
まあ無理筋に頑張って木と同一視するのかもしらんが
これが真ならベルマンフォードとか使うケースはどうなるんだ
まあ無理筋に頑張って木と同一視するのかもしらんが
428デフォルトの名無しさん
2022/03/02(水) 03:58:19.90ID:S8+3WyDZ429デフォルトの名無しさん
2022/03/02(水) 04:07:57.82ID:S8+3WyDZ430デフォルトの名無しさん
2022/03/02(水) 04:21:43.92ID:3w84ACsj よくわかっていないけど
鉄道の路線図とか簡単にループするけど
どうするの?
鉄道の路線図とか簡単にループするけど
どうするの?
431デフォルトの名無しさん
2022/03/02(水) 04:23:18.48ID:re9dUtRi >>428
質問してるのはこっちなんだがwwww
質問してるのはこっちなんだがwwww
432デフォルトの名無しさん
2022/03/02(水) 04:38:01.52ID:S8+3WyDZ >>430
プログラミングでそういうのを扱うときに
駅の個数だけ駅ノードオブジェクトをメモリ確保して路線毎に隣接駅をポインタ(参照)で指し合う、なんてことはしない
それだと何かするたびにポインタを何度も辿りまくって遅いし
そのポインタで指し合う構造をデータベースに格納するのも大変
現実にはどう扱われているかというと
データの配列として持ってそのインデックス等で他を指す
つまりポインタ(参照)は出てこない
配列とインデックスの方が扱いやすいし、メモリアクセスも速いし、ファイルやデータベースに格納するのも容易
>>431
現実に必要となることが無いか、代替手段があるか、となり、
残る超レアケースがあるなら出してごらん
プログラミングでそういうのを扱うときに
駅の個数だけ駅ノードオブジェクトをメモリ確保して路線毎に隣接駅をポインタ(参照)で指し合う、なんてことはしない
それだと何かするたびにポインタを何度も辿りまくって遅いし
そのポインタで指し合う構造をデータベースに格納するのも大変
現実にはどう扱われているかというと
データの配列として持ってそのインデックス等で他を指す
つまりポインタ(参照)は出てこない
配列とインデックスの方が扱いやすいし、メモリアクセスも速いし、ファイルやデータベースに格納するのも容易
>>431
現実に必要となることが無いか、代替手段があるか、となり、
残る超レアケースがあるなら出してごらん
433デフォルトの名無しさん
2022/03/02(水) 04:43:14.42ID:re9dUtRi434デフォルトの名無しさん
2022/03/02(水) 04:55:17.69ID:S8+3WyDZ >>433
現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造ならば
何らかの視点で見ると木構造になっている
もちろんその一番簡素なパターンである配列構造を含めてね
今のところ誰も反例を出せていない
もしあるとしても超レアケースなのだろう
現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造ならば
何らかの視点で見ると木構造になっている
もちろんその一番簡素なパターンである配列構造を含めてね
今のところ誰も反例を出せていない
もしあるとしても超レアケースなのだろう
435デフォルトの名無しさん
2022/03/02(水) 04:57:49.96ID:re9dUtRi >>434
グラフとか木構造になるの?
グラフとか木構造になるの?
436デフォルトの名無しさん
2022/03/02(水) 05:01:58.37ID:S8+3WyDZ437デフォルトの名無しさん
2022/03/02(水) 05:06:59.01ID:re9dUtRi438デフォルトの名無しさん
2022/03/02(水) 05:18:20.52ID:S8+3WyDZ439デフォルトの名無しさん
2022/03/02(水) 05:23:23.57ID:re9dUtRi440デフォルトの名無しさん
2022/03/02(水) 05:32:08.74ID:2MKUvw25 言ってることは分かるよ
俺はrust書き始めてポインタを使わないプログラミングをするようになった
C/C++に毒れてたことに気がついた
例えば木構造も配列とインデックスで同じことをやるように書き直した
昔のAhoやUllmanのアルゴリズムの本はポインタを前提にしてないから
配列とインデックスを使ってアルゴリズムを書いてる
その本を引っ張り出してきて読み直したりした
まさか現代において70年代に書かれた本を参考にするとは思わなかった
俺はrust書き始めてポインタを使わないプログラミングをするようになった
C/C++に毒れてたことに気がついた
例えば木構造も配列とインデックスで同じことをやるように書き直した
昔のAhoやUllmanのアルゴリズムの本はポインタを前提にしてないから
配列とインデックスを使ってアルゴリズムを書いてる
その本を引っ張り出してきて読み直したりした
まさか現代において70年代に書かれた本を参考にするとは思わなかった
441デフォルトの名無しさん
2022/03/02(水) 05:45:14.10ID:re9dUtRi >>438は「分からない」ようだから話を進めると、グラフ構造は木構造にはならない
なぜなら、木構造はグラフ構造の一種だからw
グラフ構造を単純に実装すると、親ノードが子ノードを参照する形になり、簡単に循環参照を発生する
そういうこともあり、古来通常の実装はノードから直接参照するのではなく、エッジというものを用意し
各コンテナに保存した上で参照先をコンテナのキーにすることで表現する
つまり循環参照は簡単に発生し、それを回避する努力を惜しまない必要がある
>>423の言う通り、まさに
> 循環参照が必要な時にやれることが「プログラマが注意して管理しましょう」
であることが明確に分かる
これをろくに議論もできない頭で否定するものではないw
なぜなら、木構造はグラフ構造の一種だからw
グラフ構造を単純に実装すると、親ノードが子ノードを参照する形になり、簡単に循環参照を発生する
そういうこともあり、古来通常の実装はノードから直接参照するのではなく、エッジというものを用意し
各コンテナに保存した上で参照先をコンテナのキーにすることで表現する
つまり循環参照は簡単に発生し、それを回避する努力を惜しまない必要がある
>>423の言う通り、まさに
> 循環参照が必要な時にやれることが「プログラマが注意して管理しましょう」
であることが明確に分かる
これをろくに議論もできない頭で否定するものではないw
442デフォルトの名無しさん
2022/03/02(水) 05:48:19.98ID:ZvwBufG6 配列とインデックスを使うとして、ある要素のインデックスを取った後にその要素が削除されるとそのインデックスが想定していない要素を指すことになるじゃん。そういうのはみんなどうやって防いでいるの?
あと、双方向リンクドリストって普通に実装すると循環参照になるけどこれも配列とインデックスでやるの?
あと、双方向リンクドリストって普通に実装すると循環参照になるけどこれも配列とインデックスでやるの?
443デフォルトの名無しさん
2022/03/02(水) 05:52:14.90ID:re9dUtRi 原理的には整合が取れない状態にならないように操作がatomicになるように実装する
もちろん実装方法なので、構造を変えたり、方法は具体的にはいろいろあるよ
もちろん実装方法なので、構造を変えたり、方法は具体的にはいろいろあるよ
444デフォルトの名無しさん
2022/03/02(水) 06:14:19.31ID:S8+3WyDZ >>441
そこまでアホとは思わなかったw
一般的なグラフが木構造にならないのは当たり前だろ
まさかそんなことを言いたいがためにこちらの質問に回答できなかったのかw
呆れた
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できて残りはレアケース
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
さらに既に例で示したようにベルマンフォード法などのグラフにおけるアルゴリズムを扱う場合も現実のプログラミングでは配列として扱われている
だからそんな非現実的な机上の空論で悩む必要はない
>>442
そういうレアケースのために
Rustでは双方向リンクドリストも含めて標準ライブラリに用意されている
その上で注意書きとしてほとんどのケースではリンクドリストを使うよりも配列やリングバッファ(RustではVecDeque)を使った方が有利と明記している
これは言語に関係なく成り立つ話
そこまでアホとは思わなかったw
一般的なグラフが木構造にならないのは当たり前だろ
まさかそんなことを言いたいがためにこちらの質問に回答できなかったのかw
呆れた
現実に色んな分野でプログラミングするとわかるが循環参照なんてほとんどの分野で出てこないか回避できて残りはレアケース
なぜなら現実の様々なシステムからアプリまで全てにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているからである
さらに既に例で示したようにベルマンフォード法などのグラフにおけるアルゴリズムを扱う場合も現実のプログラミングでは配列として扱われている
だからそんな非現実的な机上の空論で悩む必要はない
>>442
そういうレアケースのために
Rustでは双方向リンクドリストも含めて標準ライブラリに用意されている
その上で注意書きとしてほとんどのケースではリンクドリストを使うよりも配列やリングバッファ(RustではVecDeque)を使った方が有利と明記している
これは言語に関係なく成り立つ話
445デフォルトの名無しさん
2022/03/02(水) 06:20:20.10ID:re9dUtRi >>444
そんな単純なことが返事できなかったのはお前だろwwww
そんな頭で「非現実的な机上の空論」とか言ってる場合じゃない
循環参照問題はレアケースではなく明確で常に回避を必要とし、各分野で日々回避方法が研鑽されている
Rustも例外ではない
そんな単純なことが返事できなかったのはお前だろwwww
そんな頭で「非現実的な机上の空論」とか言ってる場合じゃない
循環参照問題はレアケースではなく明確で常に回避を必要とし、各分野で日々回避方法が研鑽されている
Rustも例外ではない
446デフォルトの名無しさん
2022/03/02(水) 06:39:13.56ID:S8+3WyDZ >>445
そんな当たり前のことをわざわざ尋ねてくるほど君が低レベルとはその時は想定していなかった
結局のところ君は具体的な反例を出せずに非現実的な机上の空論を続けるだけなのかね
現実の様々なシステムからアプリまで様々なものにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているものがほとんどであり循環参照で悩む必要はない
一般的なグラフ上の各種アルゴリズムについても配列上のデータとして扱われるのが通常
ポインタで指し合うデータ構造をとってもポインタを何度もたどるのはメモリアクセスで不利でキャッシュ的にも不利であり、もちろん永続化として格納する時も同じく
そんな当たり前のことをわざわざ尋ねてくるほど君が低レベルとはその時は想定していなかった
結局のところ君は具体的な反例を出せずに非現実的な机上の空論を続けるだけなのかね
現実の様々なシステムからアプリまで様々なものにおいて出てくるデータ構造は何らかの視点で見ると木構造になっているものがほとんどであり循環参照で悩む必要はない
一般的なグラフ上の各種アルゴリズムについても配列上のデータとして扱われるのが通常
ポインタで指し合うデータ構造をとってもポインタを何度もたどるのはメモリアクセスで不利でキャッシュ的にも不利であり、もちろん永続化として格納する時も同じく
447デフォルトの名無しさん
2022/03/02(水) 06:42:03.58ID:re9dUtRi 俺が言ってるのは循環参照問題は重大な問題であるということw
反論出来てないのはお前w
Rustの標準ライブラリはunsafeのオンパレードだなw
反論出来てないのはお前w
Rustの標準ライブラリはunsafeのオンパレードだなw
448デフォルトの名無しさん
2022/03/02(水) 07:11:01.35ID:jfLsV1Py >>447
その最後の行「Rustの標準ライブラリはunsafeのオンパレードだなw」によって
あなたがプログラミングについて無知だと判明しました
言語関係なく一般的にその「unsafeな操作」無しではプログラミングは成立しません
そのため各プログラミング言語はその「unsafeな操作」を様々な方法で閉じ込めようとしたり
あるいはC/C++のように全開放して全てをプログラマーの自己責任としたりしています
いずれにしても各言語の内部では「unsafeな操作」が当然ながら頻出となります
一方でRustでは従来にない以下の方針を取ることにしました
・GCを言語としては採用しない
・それにも関わらずプログラム全体のメモリ安全性をコンパイラが保証できるようにする
・必ず残る必須な「unsafeな操作」は型やモジュールの外に影響が出ないよう内部に閉じ込める
・その型やモジュールが外に提供するインタフェースは(unsafe宣言されているものを除いて)安全に提供する
つまりプログラミングをする上で避けることができない「unsafeな操作」を
C/C++のように(結果的に)プログラム全体に散りばめてしまうのではなく
ライブラリなどの内部に完全に閉じ込めて外に影響が出ない安全なインタフェースのみ提供することにしたのです
Rustはこの方針によってプログラミングに不可欠な必須の「unsafeな操作」なだけでなく
実行効率の良さのための「unsafeな操作」も型やモジュールの内部に閉じこめることが可能となりました
そして安全なだけでなく速さも両立することに成功しました
その最後の行「Rustの標準ライブラリはunsafeのオンパレードだなw」によって
あなたがプログラミングについて無知だと判明しました
言語関係なく一般的にその「unsafeな操作」無しではプログラミングは成立しません
そのため各プログラミング言語はその「unsafeな操作」を様々な方法で閉じ込めようとしたり
あるいはC/C++のように全開放して全てをプログラマーの自己責任としたりしています
いずれにしても各言語の内部では「unsafeな操作」が当然ながら頻出となります
一方でRustでは従来にない以下の方針を取ることにしました
・GCを言語としては採用しない
・それにも関わらずプログラム全体のメモリ安全性をコンパイラが保証できるようにする
・必ず残る必須な「unsafeな操作」は型やモジュールの外に影響が出ないよう内部に閉じ込める
・その型やモジュールが外に提供するインタフェースは(unsafe宣言されているものを除いて)安全に提供する
つまりプログラミングをする上で避けることができない「unsafeな操作」を
C/C++のように(結果的に)プログラム全体に散りばめてしまうのではなく
ライブラリなどの内部に完全に閉じ込めて外に影響が出ない安全なインタフェースのみ提供することにしたのです
Rustはこの方針によってプログラミングに不可欠な必須の「unsafeな操作」なだけでなく
実行効率の良さのための「unsafeな操作」も型やモジュールの内部に閉じこめることが可能となりました
そして安全なだけでなく速さも両立することに成功しました
449デフォルトの名無しさん
2022/03/02(水) 07:19:39.02ID:re9dUtRi いやいや、普通unsafeなコードというのは外部とのやり取りの薄皮一枚だけで収まるはずなんだがw
Rustだと都合により内側でも使います!
みたいな使い方で、標準ライブラリの中ではやりたい放題されてるように見えるってことw
ベアメタルとかになると標準ライブラリも使えないわけで、薄皮一枚だけunsafeにしても足りず泣く泣くunsafeを使う羽目になり、、、
安全とは一体・・・になりそうってことなんだわw
Rustだと都合により内側でも使います!
みたいな使い方で、標準ライブラリの中ではやりたい放題されてるように見えるってことw
ベアメタルとかになると標準ライブラリも使えないわけで、薄皮一枚だけunsafeにしても足りず泣く泣くunsafeを使う羽目になり、、、
安全とは一体・・・になりそうってことなんだわw
450デフォルトの名無しさん
2022/03/02(水) 07:27:54.59ID:jfLsV1Py >>449
そんなに無知を曝け出さないほうがいいと思いますよ
「unsafeな操作」とは何か、そしてその避けられない操作に対してRustがどのように
並行並列環境に至るまでメモリ安全性の保証を実現させたのか勉強するのをお勧めします
そんなに無知を曝け出さないほうがいいと思いますよ
「unsafeな操作」とは何か、そしてその避けられない操作に対してRustがどのように
並行並列環境に至るまでメモリ安全性の保証を実現させたのか勉強するのをお勧めします
451デフォルトの名無しさん
2022/03/02(水) 07:30:04.06ID:re9dUtRi 所有権と速度の問題を回避するためにunsafeに走ってませんか????w
452デフォルトの名無しさん
2022/03/02(水) 09:17:36.83ID:uPKvDIET >>449
ベアメタルでliballocは使えるからデータ構造を再実装しないといけないケースはあまりないのでは?
ベアメタルでliballocは使えるからデータ構造を再実装しないといけないケースはあまりないのでは?
453デフォルトの名無しさん
2022/03/02(水) 09:26:05.15ID:bQ8fspy2 >>440
温故知新ですな
温故知新ですな
454デフォルトの名無しさん
2022/03/02(水) 09:36:25.73ID:bQ8fspy2455デフォルトの名無しさん
2022/03/02(水) 10:24:25.41ID:/7glPJ4X >>432
結局データの配列として持つことになるのはわかるけど、それって指す先が存在するか分からないから実質ポインタとやってること同じだし、途中で要素削除があるとインデックスの整合性保つのに一苦労するじゃん
まあ君にとっては「レアケース」であり「現実に必要となることが存在しない」のかもしれんが、実際に存在するとだけは言っておくわ
あと、配列とインデックスの方がメモリアクセスも速いってのはわからんかった。配列とインデックスの方がポインタより速いってなんでだろ
結局データの配列として持つことになるのはわかるけど、それって指す先が存在するか分からないから実質ポインタとやってること同じだし、途中で要素削除があるとインデックスの整合性保つのに一苦労するじゃん
まあ君にとっては「レアケース」であり「現実に必要となることが存在しない」のかもしれんが、実際に存在するとだけは言っておくわ
あと、配列とインデックスの方がメモリアクセスも速いってのはわからんかった。配列とインデックスの方がポインタより速いってなんでだろ
456デフォルトの名無しさん
2022/03/02(水) 10:28:21.60ID:/7glPJ4X まあベルマンフォードする前に配列とインデックスの形式に変換するくらいのことは出来るけど、結局その前段階のミュータブルなグラフを配列とインデックスで管理するのはキツい
アリーナでオレオレ世代型GCモドキを作った方がまだマシ
アリーナでオレオレ世代型GCモドキを作った方がまだマシ
457デフォルトの名無しさん
2022/03/02(水) 10:32:20.03ID:/7glPJ4X あとは配列とインデックスの代わりにHashMapとkeyにするとかかな?
458デフォルトの名無しさん
2022/03/02(水) 10:38:44.95ID:ywlh+FF4 配列とインデックスってすげーunsafeなコードだよな
unsafeブロックの外側でunsafeな処理をしている分余計性質が悪い
unsafeブロックの外側でunsafeな処理をしている分余計性質が悪い
459デフォルトの名無しさん
2022/03/02(水) 11:04:57.08ID:uPKvDIET460デフォルトの名無しさん
2022/03/02(水) 11:42:21.29ID:bQ8fspy2461デフォルトの名無しさん
2022/03/02(水) 12:43:54.27ID:jfLsV1Py グラフなどのノード構成において
他のノードを指す方法として「idを用いる」のと「ポインタを用いる」のは完全に同型
というのがプログラミングでの常識です
同型というのは通常の管理からダングリングの発生やその防止も含めて同型です
配列に格納してそのインデックス方式も「idを用いる」方式の一種ですから
これも当然「ポインタを用いる」のと完全に同型です
どちらか片方の管理方法がキツイと言ってる人は完全に間違っています
これはGCを考慮した場合についても完全に同型です
誰もそのポインタを指さなくなったことと誰もそのidを指さなくなったことが対応します
したがって配列とインデックスで管理することで管理がキツくなることはありません
そしてGCをする場合も全く同型なので同じ方式同じアルゴリズムで互いに行うことができます
他のノードを指す方法として「idを用いる」のと「ポインタを用いる」のは完全に同型
というのがプログラミングでの常識です
同型というのは通常の管理からダングリングの発生やその防止も含めて同型です
配列に格納してそのインデックス方式も「idを用いる」方式の一種ですから
これも当然「ポインタを用いる」のと完全に同型です
どちらか片方の管理方法がキツイと言ってる人は完全に間違っています
これはGCを考慮した場合についても完全に同型です
誰もそのポインタを指さなくなったことと誰もそのidを指さなくなったことが対応します
したがって配列とインデックスで管理することで管理がキツくなることはありません
そしてGCをする場合も全く同型なので同じ方式同じアルゴリズムで互いに行うことができます
462デフォルトの名無しさん
2022/03/02(水) 12:50:37.42ID:6P1w2PJ+ 常識かあ
463デフォルトの名無しさん
2022/03/02(水) 13:01:35.27ID:re9dUtRi464デフォルトの名無しさん
2022/03/02(水) 13:02:55.52ID:re9dUtRi あと主旨は>>451だぞ
465デフォルトの名無しさん
2022/03/02(水) 13:23:30.55ID:S8+3WyDZ >>461
それは全て正しいが
現実にはそこに付け加えるべき重要な事項がある
GCのコードを書くとわかるが使われたidの一覧が必ず必要となる
ポインタ方式ならば使われたポインタの一覧が必ず必要となる
インデックス方式ならば使われたインデックスの一覧が必要となる
すると『使われたポインタの一覧を管理するコスト』よりも
『使われたインデックスの一覧を管理するコスト(=最大インデックスまで)』がはるかにコストが低い
つまりGCをする場合でもインデックス方式が有利となる
もちろんそれ以外のアルゴリズムなどは同型なので同じという点には同意
それは全て正しいが
現実にはそこに付け加えるべき重要な事項がある
GCのコードを書くとわかるが使われたidの一覧が必ず必要となる
ポインタ方式ならば使われたポインタの一覧が必ず必要となる
インデックス方式ならば使われたインデックスの一覧が必要となる
すると『使われたポインタの一覧を管理するコスト』よりも
『使われたインデックスの一覧を管理するコスト(=最大インデックスまで)』がはるかにコストが低い
つまりGCをする場合でもインデックス方式が有利となる
もちろんそれ以外のアルゴリズムなどは同型なので同じという点には同意
466デフォルトの名無しさん
2022/03/02(水) 13:37:04.28ID:YHOWtvAG467デフォルトの名無しさん
2022/03/02(水) 13:59:21.59ID:jfLsV1Py468デフォルトの名無しさん
2022/03/02(水) 14:08:49.30ID:AHCbeeLg だんだん話がオレオレGCになってきたな
結局GCは必要なんだよ
必ずしも標準に入ってる必要はないが、優秀はGCライブラリが存在しないのはかなり痛い
結局GCは必要なんだよ
必ずしも標準に入ってる必要はないが、優秀はGCライブラリが存在しないのはかなり痛い
469デフォルトの名無しさん
2022/03/02(水) 14:23:16.86ID:jfLsV1Py >>468
いいえ、GCは必ずしも必要あるわけではありません
GCが必要になるのは少なくとも以下の2点を満たす必要があります
・継続して動作させる必要がある
・使われていないメモリが有意に存在している
例えばGC言語であっても前者の継続動作が必要なければGCさせないモードで動かすケースもあります
一方で後者はGC言語であれば常に使われていないメモリが溜まっていきます
しかし非GC言語ではたいていの場合はメモリ開放をすることができるためGCは不要です
どうしても循環強参照を起こしたいというかなり特殊な状況でなければGCが必要になることはないでしょう
いいえ、GCは必ずしも必要あるわけではありません
GCが必要になるのは少なくとも以下の2点を満たす必要があります
・継続して動作させる必要がある
・使われていないメモリが有意に存在している
例えばGC言語であっても前者の継続動作が必要なければGCさせないモードで動かすケースもあります
一方で後者はGC言語であれば常に使われていないメモリが溜まっていきます
しかし非GC言語ではたいていの場合はメモリ開放をすることができるためGCは不要です
どうしても循環強参照を起こしたいというかなり特殊な状況でなければGCが必要になることはないでしょう
470デフォルトの名無しさん
2022/03/02(水) 14:32:11.16ID:AHCbeeLg あ、循環参照はかなり特殊な条件派のひとだったか
じゃあ話すことはないや
じゃあ話すことはないや
471デフォルトの名無しさん
2022/03/02(水) 14:34:46.39ID:2MKUvw25 >>468
C++に謝れ
C++に謝れ
472デフォルトの名無しさん
2022/03/02(水) 14:44:37.86ID:QVLaCsUw C++用のGCライブラリは実在してるだろ
473デフォルトの名無しさん
2022/03/02(水) 14:56:29.68ID:jfLsV1Py >>470
循環強参照を起こしたいかなり特殊な状況であっても
プログラムを継続して動作させる必要がなければGCは不要です
これは広義にはプログラム自体は継続してもその構造が長期継続しなければ成り立ちます
例えばRustならばtyped_arenaなどを用いればその構造の利用を終える際に一気に全体を消去可能です
また別の視点からはデータが単調増加ならば不要部分が発生しないのでこれもGCは不要です
これら全ての条件を相反するような条件が全て揃った時のみGCが必要となるでしょう
もしそのような具体的なケースが頻繁に多数有るならば教えていただけると勉強になりますのでよろしくお願いします
循環強参照を起こしたいかなり特殊な状況であっても
プログラムを継続して動作させる必要がなければGCは不要です
これは広義にはプログラム自体は継続してもその構造が長期継続しなければ成り立ちます
例えばRustならばtyped_arenaなどを用いればその構造の利用を終える際に一気に全体を消去可能です
また別の視点からはデータが単調増加ならば不要部分が発生しないのでこれもGCは不要です
これら全ての条件を相反するような条件が全て揃った時のみGCが必要となるでしょう
もしそのような具体的なケースが頻繁に多数有るならば教えていただけると勉強になりますのでよろしくお願いします
474デフォルトの名無しさん
2022/03/02(水) 15:05:14.83ID:AHCbeeLg なんで特殊な条件派を説得しにかからず初手会話放棄するかというと、仕事で使っていておいそれとネットに晒せないからですね
なので秘密を打ち明けなくても前提に同意してくれている人とのみ話す訳ですよ
なので秘密を打ち明けなくても前提に同意してくれている人とのみ話す訳ですよ
475デフォルトの名無しさん
2022/03/02(水) 15:13:30.85ID:S8+3WyDZ476デフォルトの名無しさん
2022/03/02(水) 15:16:36.71ID:AHCbeeLg >>475
一般的な話をすると増えたり減ったりする双方向グラフを更新し続けて持ち続けるという要件になるな
それ以上の説明を求められると何に使うのかという話をすることになり、俺の仕事の説明をすることになる
一般的な話をすると増えたり減ったりする双方向グラフを更新し続けて持ち続けるという要件になるな
それ以上の説明を求められると何に使うのかという話をすることになり、俺の仕事の説明をすることになる
477デフォルトの名無しさん
2022/03/02(水) 15:18:35.45ID:AHCbeeLg 「一般的な用途」というのがどういう定義なのかしらんが、「Rustで簡単に出来る範囲を一般的と呼ぶ」と恣意的に定義するのであれば俺もその派に入れてくれて良いよ
478デフォルトの名無しさん
2022/03/02(水) 15:32:26.52ID:jfLsV1Py >>476
それならばその双方向グラフの安全な型を作るのがベストソリューションです
ちなみになぜそのような一般的なライブラリがないかというと各々で求められる条件が異なるからです
あなたの場合は求められる条件が確定しているのですからそれを満たす双方向グラフの安全な型を実装できます
例えばノードが削除される場合もその際の条件やその後の処理が独自に確定しているはずです
したがってそれを元に双方向グラフの安全な型を実装して安全なインタフェースのみ提供すればいいのです
そうすればRustのコンパイラに対してもプログラム全体が安全に通るでしょう
そして循環参照についてもその双方向グラフの安全な型が責任を持って取り扱えばよいのです
汎用的なGCは不要でその状況に特化したものを用意すればいいだけなので容易に実現できると思います
それならばその双方向グラフの安全な型を作るのがベストソリューションです
ちなみになぜそのような一般的なライブラリがないかというと各々で求められる条件が異なるからです
あなたの場合は求められる条件が確定しているのですからそれを満たす双方向グラフの安全な型を実装できます
例えばノードが削除される場合もその際の条件やその後の処理が独自に確定しているはずです
したがってそれを元に双方向グラフの安全な型を実装して安全なインタフェースのみ提供すればいいのです
そうすればRustのコンパイラに対してもプログラム全体が安全に通るでしょう
そして循環参照についてもその双方向グラフの安全な型が責任を持って取り扱えばよいのです
汎用的なGCは不要でその状況に特化したものを用意すればいいだけなので容易に実現できると思います
479デフォルトの名無しさん
2022/03/02(水) 15:45:33.96ID:AHCbeeLg480デフォルトの名無しさん
2022/03/02(水) 15:46:04.46ID:re9dUtRi $ cat hoge.sh
cat >hoge.rs <<EOF
// unsafeって宣言に出てこないし安全に決まってるよ!
fn read_address_4byte(address: usize) -> i32 {
unsafe {
*(address as *const i32)
}
}
// 流石Rust安全だな!
fn main() {
read_address_4byte(0);
}
EOF
rustc hoge.rs && ./hoge
$ bash hoge.sh
hoge.sh: 13 行: 124161 Segmentation fault (コアダンプ) ./hoge
$
cat >hoge.rs <<EOF
// unsafeって宣言に出てこないし安全に決まってるよ!
fn read_address_4byte(address: usize) -> i32 {
unsafe {
*(address as *const i32)
}
}
// 流石Rust安全だな!
fn main() {
read_address_4byte(0);
}
EOF
rustc hoge.rs && ./hoge
$ bash hoge.sh
hoge.sh: 13 行: 124161 Segmentation fault (コアダンプ) ./hoge
$
481デフォルトの名無しさん
2022/03/02(水) 15:58:09.24ID:jfLsV1Py482デフォルトの名無しさん
2022/03/02(水) 15:59:49.43ID:AHCbeeLg >>481
あー。まあそれはそうね外側でもunsafeなのは頂けないたしかに
あー。まあそれはそうね外側でもunsafeなのは頂けないたしかに
483デフォルトの名無しさん
2022/03/02(水) 16:02:47.42ID:re9dUtRi あれぇ・・・コンパイル通ってないと実行できないんだけどなぁwwww
エラーも何も出てこないんだけどなぁwwww
安全とは???
Rustが安全!?
何をご冗談をw
エラーも何も出てこないんだけどなぁwwww
安全とは???
Rustが安全!?
何をご冗談をw
484デフォルトの名無しさん
2022/03/02(水) 17:00:29.10ID:YHOWtvAG 教官「GC無しで手動メモリ管理してきた言語だ、面構えが違う」
C/C++/Rust「( ゚ω゚ )」
C/C++/Rust「( ゚ω゚ )」
485デフォルトの名無しさん
2022/03/02(水) 17:26:12.32ID:2MKUvw25 おじさん来た?
スレの質が一気に下がるな
スレの質が一気に下がるな
486デフォルトの名無しさん
2022/03/02(水) 17:53:39.61ID:jfLsV1Py >>482
そう
外側ではunsafeを使わない
その上で今回のケースはその独自仕様の双方向グラフの「安全な」型を作れば、Rustではプログラム全体の安全性が保証されます
そして「安全な」型を作るには
・型が外へ提供する「安全な」インターフェイス群を用いる限り、それらをどのように用いても、型の内部に矛盾や危険な状態を生じさせないこと
・たとえ型の内部でunsafeな操作が存在していても、型の外へは影響せずに内部に封じ込められていること
このような形で新たな型を実装することで全体を安全に解決できるところが他の言語にはないRustの特徴でしょう
そう
外側ではunsafeを使わない
その上で今回のケースはその独自仕様の双方向グラフの「安全な」型を作れば、Rustではプログラム全体の安全性が保証されます
そして「安全な」型を作るには
・型が外へ提供する「安全な」インターフェイス群を用いる限り、それらをどのように用いても、型の内部に矛盾や危険な状態を生じさせないこと
・たとえ型の内部でunsafeな操作が存在していても、型の外へは影響せずに内部に封じ込められていること
このような形で新たな型を実装することで全体を安全に解決できるところが他の言語にはないRustの特徴でしょう
487デフォルトの名無しさん
2022/03/02(水) 18:05:00.35ID:/7glPJ4X まあGCライブラリさえあれば双方向グラフも簡単に作れるんですけどね
Javaくらいの出来のGCライブラリがついたら最強
Javaくらいの出来のGCライブラリがついたら最強
488デフォルトの名無しさん
2022/03/02(水) 18:30:26.52ID:nWwg4aea Rustには静的型付けがあるすげー ← スクリプトから来た人
Rustは強力な型推論がある ← スクリプトかC++から来た人
こういう主張をする人は世間知らず
つまり雑魚
Rustは強力な型推論がある ← スクリプトかC++から来た人
こういう主張をする人は世間知らず
つまり雑魚
489デフォルトの名無しさん
2022/03/02(水) 18:40:10.58ID:uPKvDIET 関数型言語以外の型推論は大体が変数の型や戻り値型の推論で、HM型推論採用してる言語ってあまりない気がする
もしそうならば非関数型言語にしてはRustは型推論が強力と言っても良いのでは
もしそうならば非関数型言語にしてはRustは型推論が強力と言っても良いのでは
490デフォルトの名無しさん
2022/03/02(水) 18:42:57.57ID:re9dUtRi お猿さんは『「安全な」型を作れば、Rustではプログラム全体の安全性が保証されます』などと宣っているが、それは言語で保証しているのではなく、プログラマが手で保証しているに過ぎないw
つまりunsafeなブロックを少しでも含むものはC/C++と変わらないわけで、それを使っている部分も、どこでどう使うものなのか分からない限りC/C++と変わらないということw
さらに悪質なのは、Rustの外のライブラリなどunsafeな何かを呼び出しているわけでもないのに、自前で破壊的なコードを内包できる仕組みw
こうなると、もう外面だけでは分からないわけで、Rustの安全神話は完全に崩壊するw
またこのような状況に拍車をかけているのが自前で破壊的なコードを内包する動機になりやすい所有権の概念w
安全性の根幹をなす部分であるにも関わらず、双方向参照への例外なく簡単に適用可能な安全かつ高速な対応方法が存在していないw
これはプログラマに対してunsafeへの誘惑を助長する形で、逆に安全神話の崩壊を招いているw
まあRustは数ある実装言語の1つとして今後も使っていくとは思うけど、何でもRustに肩入れするお猿さんとはちゃんと線を引いていきたいw
つまりunsafeなブロックを少しでも含むものはC/C++と変わらないわけで、それを使っている部分も、どこでどう使うものなのか分からない限りC/C++と変わらないということw
さらに悪質なのは、Rustの外のライブラリなどunsafeな何かを呼び出しているわけでもないのに、自前で破壊的なコードを内包できる仕組みw
こうなると、もう外面だけでは分からないわけで、Rustの安全神話は完全に崩壊するw
またこのような状況に拍車をかけているのが自前で破壊的なコードを内包する動機になりやすい所有権の概念w
安全性の根幹をなす部分であるにも関わらず、双方向参照への例外なく簡単に適用可能な安全かつ高速な対応方法が存在していないw
これはプログラマに対してunsafeへの誘惑を助長する形で、逆に安全神話の崩壊を招いているw
まあRustは数ある実装言語の1つとして今後も使っていくとは思うけど、何でもRustに肩入れするお猿さんとはちゃんと線を引いていきたいw
491デフォルトの名無しさん
2022/03/02(水) 18:47:26.04ID:uPKvDIET https://www.thecodedmessage.com/posts/unsafe/
> “If you have to use unsafe to write good Rust, then Rust isn’t a safe language after all! It’s a cute effort, but it’s failing at its purpose! Might as well use C++ like a Real Programmer!”
このブログでstrawmanとして挙げられてる主張そのまんまじゃん
まずは議論のベースラインとしてこの記事読もうぜ
> “If you have to use unsafe to write good Rust, then Rust isn’t a safe language after all! It’s a cute effort, but it’s failing at its purpose! Might as well use C++ like a Real Programmer!”
このブログでstrawmanとして挙げられてる主張そのまんまじゃん
まずは議論のベースラインとしてこの記事読もうぜ
492デフォルトの名無しさん
2022/03/02(水) 18:57:48.03ID:jfLsV1Py >>490
全然違いますよ
CやC++ではunsafeなコードがプログラム全体に散らばってしまうため複雑になればなるほど人間にはどうしようもなくなります
一方でRustではunsafeなコードを各ライブラリや各型の中に封じ込めて外へはその影響を及ぼさないことを保証するだけでいいのです
あとはプログラム全体がどんなに大きく複雑になろうともコンパイラが安全性を保証してくれます
全然違いますよ
CやC++ではunsafeなコードがプログラム全体に散らばってしまうため複雑になればなるほど人間にはどうしようもなくなります
一方でRustではunsafeなコードを各ライブラリや各型の中に封じ込めて外へはその影響を及ぼさないことを保証するだけでいいのです
あとはプログラム全体がどんなに大きく複雑になろうともコンパイラが安全性を保証してくれます
493デフォルトの名無しさん
2022/03/02(水) 19:01:56.37ID:nWwg4aea Rustの推論はプログラム追記で破綻する
後方で馬鹿が型を間違えて追記した場合予想した結果と異なる結果になる
しかもエラーが出ない
仕様が悪い
後方で馬鹿が型を間違えて追記した場合予想した結果と異なる結果になる
しかもエラーが出ない
仕様が悪い
494デフォルトの名無しさん
2022/03/02(水) 19:05:48.62ID:S8+3WyDZ >>493
Rustは孤児ルールがあるからそんなことは無理だぜ
Rustは孤児ルールがあるからそんなことは無理だぜ
495デフォルトの名無しさん
2022/03/02(水) 19:16:11.77ID:re9dUtRi >>492
それが実際に違ってなくて同じという主張だろw 日本語読めないのかよw
それが実際に違ってなくて同じという主張だろw 日本語読めないのかよw
496デフォルトの名無しさん
2022/03/02(水) 19:31:49.02ID:2WElNNHW 会社でいたら距離置きたいな…
497デフォルトの名無しさん
2022/03/02(水) 19:39:09.37ID:re9dUtRi >>491
クソ長い英文読まされた上に被ってる部分が全くなかった悲しみ
クソ長い英文読まされた上に被ってる部分が全くなかった悲しみ
498デフォルトの名無しさん
2022/03/02(水) 20:09:18.80ID:0VCZHlOm■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【外交】元台湾総統・馬英九氏、高市首相発言に「台湾を危険にさらす」台湾海峡の問題は「両岸の中国人が自ら話し合うべき」★2 [1ゲットロボ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★8 [ぐれ★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 ⬅︎これ [279254606]
- 麻生太郎、腹をくくる「日本国民が高市を総理に選んだ。であるならば最期まで支えるのが私たちの役目」 [329329848]
- 【悲報】自民党のヒゲ、外務省局長と中国高官の写真にブチギレwwwwwwwwwwwwww [834922174]
