Mozilla発のRust言語のスレ
公式
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 part9
https://mevius.5ch.net/test/read.cgi/tech/1598112455/
探検
Rust part10
■ このスレッドは過去ログ倉庫に格納されています
2021/04/02(金) 21:38:04.11ID:L7IeSfpL
489デフォルトの名無しさん
2021/05/07(金) 17:16:13.01ID:8gopO5Ce >>488
rustでLinuxのドライバー書く話?
メモリ不足時にどうハンドリングされるべきかは使い方によって違うので一律パニックするのは良くない
例えば例に挙げてるOOM Killerだってカーネルがパニックしたら実行されないわけで
rustでLinuxのドライバー書く話?
メモリ不足時にどうハンドリングされるべきかは使い方によって違うので一律パニックするのは良くない
例えば例に挙げてるOOM Killerだってカーネルがパニックしたら実行されないわけで
490デフォルトの名無しさん
2021/05/07(金) 17:22:12.18ID:r6L15P9a >>488
何かあった時止まればいいシステムばかりじゃないだろ
ペースメーカーとか原子炉とか
細かいことは知らんけど
昔、組み込み屋のおっさんが最初から1Mぐらい確保して
何かあったらそれを解放してどうにかするみたいなこと言ってた
知らんけど
何かあった時止まればいいシステムばかりじゃないだろ
ペースメーカーとか原子炉とか
細かいことは知らんけど
昔、組み込み屋のおっさんが最初から1Mぐらい確保して
何かあったらそれを解放してどうにかするみたいなこと言ってた
知らんけど
491はちみつ餃子 ◆8X2XSCHEME
2021/05/07(金) 18:25:34.58ID:xLSEaA6V >>488
システムは単独で動いているわけではない。
カーネルがパニックすることがあって良いという前提で設計して、パニックしうる前提で運用できるならそれでも構わんのだが、
Linux のカーネルでパニックを許すなら今 Linux を基礎にしているあらゆるシステムの運用体制を見直さざるを得ない。
カーネルパニックが絶対に駄目というわけじゃないんだ。
(もちろん発生しないに越したことは無いが。)
Linux では起こさないという前提に皆が従っているので変えられないという話なんだよ。
システムは単独で動いているわけではない。
カーネルがパニックすることがあって良いという前提で設計して、パニックしうる前提で運用できるならそれでも構わんのだが、
Linux のカーネルでパニックを許すなら今 Linux を基礎にしているあらゆるシステムの運用体制を見直さざるを得ない。
カーネルパニックが絶対に駄目というわけじゃないんだ。
(もちろん発生しないに越したことは無いが。)
Linux では起こさないという前提に皆が従っているので変えられないという話なんだよ。
492デフォルトの名無しさん
2021/05/07(金) 18:53:57.67ID:XbWp/RIC 割り込みが飛んでくる環境で例外なんか扱おうとしたら普通に死ぬだろ
493デフォルトの名無しさん
2021/05/07(金) 19:12:04.63ID:RYgnWswQ494デフォルトの名無しさん
2021/05/07(金) 19:35:24.51ID:FlZ9PpDj 差し当たりRustの言語を広く浅く学習したいのですが、「実践Rustプログラミング入門」の言語部分(100ページ程度)が分量が少なめで気になっています
この本で大きく抜けている文法や機能ってありますか?
この本で大きく抜けている文法や機能ってありますか?
495デフォルトの名無しさん
2021/05/07(金) 20:06:32.24ID:xz5IWUMT >>494
The Bookと比べれば一目瞭然
The Bookと比べれば一目瞭然
496デフォルトの名無しさん
2021/05/07(金) 20:11:06.98ID:8H8V34/d497デフォルトの名無しさん
2021/05/07(金) 20:22:58.56ID:fmyiQrUP >>496
最近は仮想化&分散で寛容になっているの?
最近は仮想化&分散で寛容になっているの?
498デフォルトの名無しさん
2021/05/07(金) 21:23:40.41ID:EDSX1EuR499デフォルトの名無しさん
2021/05/07(金) 21:36:25.19ID:7aFGtcIv >>497
むしろchaos engineeringで積極的に落とす
むしろchaos engineeringで積極的に落とす
500デフォルトの名無しさん
2021/05/07(金) 21:52:45.82ID:Z7WMK8Ny ペースメーカーとか原子炉とか、ノンストップシステムでは常に複数動いている
Kubernetes などでは、ネットワーク分断に備えて、
正常な状態を多数決で決めるから、3, 5, 7 みたいな奇数を動かす
2対2とか偶数だと、どちらが正常か判断できないから
Kubernetes などでは、ネットワーク分断に備えて、
正常な状態を多数決で決めるから、3, 5, 7 みたいな奇数を動かす
2対2とか偶数だと、どちらが正常か判断できないから
501500
2021/05/07(金) 22:00:09.91ID:Z7WMK8Ny Netflix などは常に、システムを攻撃して落としたりして、テストしてる。
サイボウズのkintone は、毎日システムを破棄して、作り直しているとか
Kubernetes を使っているのかな?
サイボウズのkintone は、毎日システムを破棄して、作り直しているとか
Kubernetes を使っているのかな?
502デフォルトの名無しさん
2021/05/08(土) 00:03:29.89ID:4agfhhA1 非常時の処理はカーネルの中心部が決めることで
枝葉のモジュールに決定権はないという話なんじゃないの?
枝葉のモジュールに決定権はないという話なんじゃないの?
503デフォルトの名無しさん
2021/05/08(土) 00:07:56.54ID:OofXJFgO レイヤーがめちゃくちゃな話しとるな。
OSみたいなハードウェアに直触るものとkubernetesみたいな分散管理のソフトじゃ
全然話が違う。
実際kubernetesはGC付きのgolangが実装だろ。
OSみたいなハードウェアに直触るものとkubernetesみたいな分散管理のソフトじゃ
全然話が違う。
実際kubernetesはGC付きのgolangが実装だろ。
504500
2021/05/08(土) 01:02:28.51ID:P6P/nG6A ノンストップシステムでは常に複数動く。
デュアルシステムとか
東証・富士通製のarrowhead は、3重だったかな?
それでも、ラックか何かの接続部分が落ちて、システムダウンした
ネットワークが集中している部分の故障が、最も怖い
デュアルシステムとか
東証・富士通製のarrowhead は、3重だったかな?
それでも、ラックか何かの接続部分が落ちて、システムダウンした
ネットワークが集中している部分の故障が、最も怖い
505デフォルトの名無しさん
2021/05/08(土) 08:40:46.17ID:e+sagIsH >>492
なんでじゃ
割り込みルーチンに入るときの退避と出るときの復旧をきちんとやっていれば
割り込みルーチン以外の処理は割り込みルーチンが呼び出されることに対して透過的に動作できる
一部のハードなリアルタイムOSみたいに(多重割り込み前提で)割り込みルーチンから
通常コンテキストに直接「ジャンプ」してタスクをたたき起こすみたいなケースでもなければ割り込みの存在は
通常コンテキストで何をやろうと一切影響は無い
(もちろん割り込み禁止、みたいな直接割り込みに影響する命令を実行したら話は別だがそれは普通特権命令でOS以外は実行できな
い
カーネルでの例外が問題なのは、
例外機構を持たないCならスタックポインタの調整で済むところを
デストラクタがある高級な言語だと例外が通過する際に自動変数として構築されていたオブジェクトを
例外が通過する関数全てについて解放してやらねばならない
(それでいて一方、自動変数として構築される可能性はあっても
例外発生時に構築されていないオブジェクトに対しては何もしてはいけない
という点
これは例外を飛ばすだけでその経路全部が同一のコンパイラで書かれなければならないことを意味する
途中に手で書いたアセンブラのルーチンなどあろうものならスタックをぶち壊してハードウェアの例外でいきなり
落ちるということになってそんなことがOS内で起きたら計算機上の資源の安全が担保されない。
OSとしては失格である
なんでじゃ
割り込みルーチンに入るときの退避と出るときの復旧をきちんとやっていれば
割り込みルーチン以外の処理は割り込みルーチンが呼び出されることに対して透過的に動作できる
一部のハードなリアルタイムOSみたいに(多重割り込み前提で)割り込みルーチンから
通常コンテキストに直接「ジャンプ」してタスクをたたき起こすみたいなケースでもなければ割り込みの存在は
通常コンテキストで何をやろうと一切影響は無い
(もちろん割り込み禁止、みたいな直接割り込みに影響する命令を実行したら話は別だがそれは普通特権命令でOS以外は実行できな
い
カーネルでの例外が問題なのは、
例外機構を持たないCならスタックポインタの調整で済むところを
デストラクタがある高級な言語だと例外が通過する際に自動変数として構築されていたオブジェクトを
例外が通過する関数全てについて解放してやらねばならない
(それでいて一方、自動変数として構築される可能性はあっても
例外発生時に構築されていないオブジェクトに対しては何もしてはいけない
という点
これは例外を飛ばすだけでその経路全部が同一のコンパイラで書かれなければならないことを意味する
途中に手で書いたアセンブラのルーチンなどあろうものならスタックをぶち壊してハードウェアの例外でいきなり
落ちるということになってそんなことがOS内で起きたら計算機上の資源の安全が担保されない。
OSとしては失格である
506デフォルトの名無しさん
2021/05/08(土) 08:53:39.11ID:e+sagIsH 、と思ったが
よく考えたら「手で書いたアセンブラのルーチン」があったらコンパイラはそれを知らない関数としてスタックポインタの調整以外のことを
しなかったら良いのかorz、
ここは「例外通過時にC++や異なるベンダーのRustコンパイラみたいな例外を捕捉する関数をコンパイルいたRustコンパイラが預かり知らない
巻き戻し処理が必要なルーチン」があったら、ということに訂正
、
よく考えたら「手で書いたアセンブラのルーチン」があったらコンパイラはそれを知らない関数としてスタックポインタの調整以外のことを
しなかったら良いのかorz、
ここは「例外通過時にC++や異なるベンダーのRustコンパイラみたいな例外を捕捉する関数をコンパイルいたRustコンパイラが預かり知らない
巻き戻し処理が必要なルーチン」があったら、ということに訂正
、
507デフォルトの名無しさん
2021/05/08(土) 09:44:38.32ID:9PfSgf27 なんだこいつ
IQ64だな
IQ64だな
508デフォルトの名無しさん
2021/05/08(土) 10:15:07.28ID:e+sagIsH IQは関係無いやろうがギギギギギ、
509デフォルトの名無しさん
2021/05/08(土) 11:11:59.29ID:52U5aUmg JAVAみたいな言語があるからnewしたまま放ったらかしでメモリ管理もろくに出来ない馬鹿で溢れかえって居るんだよな
510デフォルトの名無しさん
2021/05/08(土) 11:36:05.31ID:jLEsHVNz ついさっき知ったけど、new() はT だけじゃなく Result<T> を返していいんだな
511デフォルトの名無しさん
2021/05/08(土) 12:01:48.48ID:9PfSgf27 newはシンタックスじゃなくてただの慣例だからね
慣例ではResultを返すのはお作法に反するはず
慣例ではResultを返すのはお作法に反するはず
512デフォルトの名無しさん
2021/05/08(土) 12:03:38.57ID:OofXJFgO 別にjavaがない頃からそういうバカはいたけどね
513デフォルトの名無しさん
2021/05/08(土) 12:09:19.46ID:rOsHiSsL メモリ管理もろくに出来ない馬鹿
・Linuxカーネルにカーネルスタックメモリ内の情報を読み取られる脆弱性
・「WebKit」にゼロデイ脆弱性 〜「macOS Big Sur 11.3.1」や「iOS/iPadOS 14.5.1」などが公開
・BIND9に脆弱性、アップデートや回避策を
・Linuxカーネルにカーネルスタックメモリ内の情報を読み取られる脆弱性
・「WebKit」にゼロデイ脆弱性 〜「macOS Big Sur 11.3.1」や「iOS/iPadOS 14.5.1」などが公開
・BIND9に脆弱性、アップデートや回避策を
514デフォルトの名無しさん
2021/05/08(土) 12:14:25.93ID:lGQPC/Vw515デフォルトの名無しさん
2021/05/08(土) 13:11:23.63ID:RJ95z4qm516デフォルトの名無しさん
2021/05/08(土) 13:37:14.67ID:jLEsHVNz >>511
ただの慣例じゃなくて、clippy先生の指導対象らしい
https://rust-lang.github.io/rust-clippy/master/#new_ret_no_self
Checks for new not returning a type that contains Self.
ただの慣例じゃなくて、clippy先生の指導対象らしい
https://rust-lang.github.io/rust-clippy/master/#new_ret_no_self
Checks for new not returning a type that contains Self.
517デフォルトの名無しさん
2021/05/08(土) 14:30:50.83ID:yMDwHl+j 手動でスタックポインタの調整ってバグや脆弱性の温床じゃね?
518デフォルトの名無しさん
2021/05/08(土) 17:15:39.08ID:3vrEhaHR 医療機器や原発の制御システムとかが不意にリセットしないとか思っている時点で
組み込みとか高信頼性システムとかを全く知らないんだなって思う
ああいうのは最悪暴走したらリセットして最低限の機能は提供出来るように
作るのが基本だからね。そうしないと想定外の事態がおきた時に詰む
組み込みとか高信頼性システムとかを全く知らないんだなって思う
ああいうのは最悪暴走したらリセットして最低限の機能は提供出来るように
作るのが基本だからね。そうしないと想定外の事態がおきた時に詰む
519デフォルトの名無しさん
2021/05/08(土) 17:18:46.34ID:jLEsHVNz そんなコーナーケースの為に俺たちの使い心地が悪くなるようなら耐えられないな
520はちみつ餃子 ◆8X2XSCHEME
2021/05/08(土) 17:23:48.71ID://zoyCL6 暴走した場合にでもうてる手札を用意しておくってのと、
暴走しないように細部まで検証しておくってのは両立する話
暴走しないように細部まで検証しておくってのは両立する話
521デフォルトの名無しさん
2021/05/08(土) 17:27:07.74ID:QshNNe4V いうほどコーナーケースってほどでもないだろ。
割と考慮されて当然のケースだわ。
まあlinux単体がその品質を担保できてるとも思わんけど。
割と考慮されて当然のケースだわ。
まあlinux単体がその品質を担保できてるとも思わんけど。
522デフォルトの名無しさん
2021/05/08(土) 17:33:15.67ID:3vrEhaHR 原子力関係だけでなく航空機や宇宙機もだが制御不能になるのが一番ヤバイんで
バグ出しは常識的な範囲で行って、あとはリカバリ系に注力した方がシステムの信頼性は向上する
歴史的に見ても事故るシステムの多くはこの辺をガバっている事が多いし
バグ出しは常識的な範囲で行って、あとはリカバリ系に注力した方がシステムの信頼性は向上する
歴史的に見ても事故るシステムの多くはこの辺をガバっている事が多いし
523デフォルトの名無しさん
2021/05/08(土) 17:57:46.72ID:e+sagIsH 別に
ハイテク旅客機が落ちるのは自動制御と手動操縦のモード切替仕様を
パイロットが熟知しておらず緊急時に操縦桿を奪い合う格闘になったから
であってソフトは仕様通りだった
『ハイテク飛行機はなぜ落ちるか』(ブルーバックス)のインシデントの数々を見たらワカル
原子炉の制御系はそもそも暴走させないように金かけて形式検証する
人間が本気になったらどんだけバグをなくすために金と手間を掛けられるかというと
スペースシャトルのSSMEの制御装置のソフトがどんだけ徹底したデバッグが行われたかを見たらワカル
ハイテク旅客機が落ちるのは自動制御と手動操縦のモード切替仕様を
パイロットが熟知しておらず緊急時に操縦桿を奪い合う格闘になったから
であってソフトは仕様通りだった
『ハイテク飛行機はなぜ落ちるか』(ブルーバックス)のインシデントの数々を見たらワカル
原子炉の制御系はそもそも暴走させないように金かけて形式検証する
人間が本気になったらどんだけバグをなくすために金と手間を掛けられるかというと
スペースシャトルのSSMEの制御装置のソフトがどんだけ徹底したデバッグが行われたかを見たらワカル
524デフォルトの名無しさん
2021/05/08(土) 18:17:53.56ID:57+jEKOs >>523
人間が使う物であればUIも当然システムに含まれる
判りにくいUIは良いシステムとは言えない
ソユーズや神舟はADA使ったりしていないけど
スペースシャトルより死人は少ない。米式が唯一の正解とは限らない
むしろスペースシャトルはシステム設計に失敗した例だろ
人間が使う物であればUIも当然システムに含まれる
判りにくいUIは良いシステムとは言えない
ソユーズや神舟はADA使ったりしていないけど
スペースシャトルより死人は少ない。米式が唯一の正解とは限らない
むしろスペースシャトルはシステム設計に失敗した例だろ
525デフォルトの名無しさん
2021/05/08(土) 18:22:37.13ID:e+sagIsH UIの仕様バグと>>518が言っている暴走する系のバグは話がちげう
526デフォルトの名無しさん
2021/05/08(土) 18:36:29.80ID:57+jEKOs 組み込み機器でも多くのケースで不測の事態に備えてウォッチドックタイマを使うよね
トリガを何にするかやリセット時に何をするかは設計手腕が問われるところだけど
トリガを何にするかやリセット時に何をするかは設計手腕が問われるところだけど
527デフォルトの名無しさん
2021/05/08(土) 19:38:20.73ID:RJ95z4qm >>516
fn new() -> Result<Self, T> は警告出ないよ
fn new() -> Result<Self, T> は警告出ないよ
528デフォルトの名無しさん
2021/05/08(土) 19:42:36.17ID:PnHrKWCk newでResult返すのはいいけどfromは駄目だろ
というかFrom trait実装しろ
というかFrom trait実装しろ
529デフォルトの名無しさん
2021/05/08(土) 19:46:07.47ID:RJ95z4qm >>528
そもそも impl From<T> Result<Foo, E> はcoherenceの関係でエラーになるよね
Intoはできるけど
FromStr なり TryFrom を使うべきというのはそう
そもそも impl From<T> Result<Foo, E> はcoherenceの関係でエラーになるよね
Intoはできるけど
FromStr なり TryFrom を使うべきというのはそう
530デフォルトの名無しさん
2021/05/08(土) 20:23:33.19ID:jLEsHVNz >>527
そりゃ Result はそこに書いてある a type that contains Self だからね
そりゃ Result はそこに書いてある a type that contains Self だからね
531デフォルトの名無しさん
2021/05/08(土) 21:10:37.46ID:vIQ3GRO1 cのコードをrustに変換してくれるライブラリってありませんか?
532デフォルトの名無しさん
2021/05/08(土) 22:23:50.74ID:8Oybw0Jl >>531
c2rust
c2rust
533デフォルトの名無しさん
2021/05/09(日) 12:16:13.70ID:RMo+m9mc その場合誰がRustコンパイラと戦うんじゃ……
534デフォルトの名無しさん
2021/05/09(日) 13:34:11.17ID:DdW1Qm5g 1.52来てたのね
535デフォルトの名無しさん
2021/05/09(日) 23:13:05.64ID:T2j6cCMq 例外処理って何が有難いの?Cでプログラム書いてて例外がなくて困ったことないんだけど
もしかしてただのシンタックスシュガー?
もしかしてただのシンタックスシュガー?
536デフォルトの名無しさん
2021/05/09(日) 23:31:00.87ID:LUIc58fP 戻り値の設定に近いものを一箇所にまとめられる。
537デフォルトの名無しさん
2021/05/10(月) 00:03:43.87ID:sciUqTyU どのレベルの話?
初心者の質問だとすると、関数の失敗を成功と区別するため。
戻り値で区別するんでなくて仕組みで。
初心者の質問だとすると、関数の失敗を成功と区別するため。
戻り値で区別するんでなくて仕組みで。
538デフォルトの名無しさん
2021/05/10(月) 00:10:05.03ID:EWDopcLj 例外の存在意義が分からない
戻り値で判別する方が可読性も高いし何も不足を感じない
戻り値で判別する方が可読性も高いし何も不足を感じない
539デフォルトの名無しさん
2021/05/10(月) 00:21:25.87ID:giJ6lOgz >>538
スレチ
スレチ
540デフォルトの名無しさん
2021/05/10(月) 07:17:37.24ID:aMiH/GVN fileへのwriteとか毎行エラーチェック入るのしんどい
541デフォルトの名無しさん
2021/05/10(月) 10:07:49.01ID:ro06Xyvc >>538
開いた後、必ず閉じる処理が必要な場合があるが、それをxとすると、
関数のある場所でエラーを発見した時、呼び出し元へ返りたくても、
xを閉じてからでなくてはならない。xが複数有ったり、今後もxの
量が増えていくような場合、エラーが起きる場所全てでxを正確に全て
閉じてからreturnするのは難しい。なので、昔から、xを閉じる処理は
関数の最後の方に書いておいて、その直前にラベル lab_ex:; のような
ものを書いておいて、エラーが起きたときにはlab_exにgoto文
で飛ばすようなことが行われることが多かった。
でも、goto文は好まれ無い事があって、
try, catch 構文を使うと、goto文を使わなくてもそれが出来るようになる
ことが例外処理の一つのメリット。
開いた後、必ず閉じる処理が必要な場合があるが、それをxとすると、
関数のある場所でエラーを発見した時、呼び出し元へ返りたくても、
xを閉じてからでなくてはならない。xが複数有ったり、今後もxの
量が増えていくような場合、エラーが起きる場所全てでxを正確に全て
閉じてからreturnするのは難しい。なので、昔から、xを閉じる処理は
関数の最後の方に書いておいて、その直前にラベル lab_ex:; のような
ものを書いておいて、エラーが起きたときにはlab_exにgoto文
で飛ばすようなことが行われることが多かった。
でも、goto文は好まれ無い事があって、
try, catch 構文を使うと、goto文を使わなくてもそれが出来るようになる
ことが例外処理の一つのメリット。
542デフォルトの名無しさん
2021/05/10(月) 10:12:49.59ID:ro06Xyvc >>541
BOOL func()
{
BOOL rc = TRUE;
open_some(x);
if ( !func2() ) {
printf( "エラーだよ\n" );
rc = FALSE;
goto lab_ex;
}
・・・
lab_ex:;
close_some(x)
return rc;
}
↑のようなものが、例外処理を使えばgoto文を使わなくても書けるようになる。
ただし、goto文が何でそんなに嫌われるかは謎と言えば謎ぞの一つではあり、
lab_ex:; が見た目的に「浮く」からではないか、という説がある。
しかし、論理構造的にはgoto分がそんなに分かりにくいわけではない。
BOOL func()
{
BOOL rc = TRUE;
open_some(x);
if ( !func2() ) {
printf( "エラーだよ\n" );
rc = FALSE;
goto lab_ex;
}
・・・
lab_ex:;
close_some(x)
return rc;
}
↑のようなものが、例外処理を使えばgoto文を使わなくても書けるようになる。
ただし、goto文が何でそんなに嫌われるかは謎と言えば謎ぞの一つではあり、
lab_ex:; が見た目的に「浮く」からではないか、という説がある。
しかし、論理構造的にはgoto分がそんなに分かりにくいわけではない。
543デフォルトの名無しさん
2021/05/10(月) 10:13:54.77ID:Pi5UB1M6 そういやCで bail: ラベルが多用されてたなーっていうのを
anyhowクレートの bail! マクロで思い出した
anyhowクレートの bail! マクロで思い出した
544デフォルトの名無しさん
2021/05/10(月) 10:16:15.81ID:pIvV80n0 >>541,542
クソスレチ
クソスレチ
545デフォルトの名無しさん
2021/05/10(月) 10:23:18.20ID:ro06Xyvc >>542
例外処理を使った場合、goto文が要らない:
BOOL func()
{
BOOL rc = TRUE;
open_some(x);
try {
func2() ; // 例外発生の可能性有り
func3() ; // 例外発生の可能性有り
}
catch(...) {
printf( "エラーだよ\n" );
rc = FALSE;
}
close_some(x)
return rc;
}
例外処理を使った場合、goto文が要らない:
BOOL func()
{
BOOL rc = TRUE;
open_some(x);
try {
func2() ; // 例外発生の可能性有り
func3() ; // 例外発生の可能性有り
}
catch(...) {
printf( "エラーだよ\n" );
rc = FALSE;
}
close_some(x)
return rc;
}
546デフォルトの名無しさん
2021/05/10(月) 10:23:53.36ID:ro06Xyvc >>545
ただし、この場合、x をクラスのオブジェクトで、x がデストラクトされる
時に自動的に close_some()を呼び出すようになっていれば、そもそも
goto文は不要なので、例外処理でやらなくても最初からgoto文が現れない。
しかし、すべてがクラスオブジェクトになっているわけではない。
典型的な例は、
BOOL last_flags = g_flags;
g_flags = 一時的なフラグ設定;
・・・
if ( xxx ) {
// エラー発生:
rc = FALSE;
goto lab_ex;
}
lab_ex:;
g_flags = last_flags;
return rc;
のようなもの。
ただし、この場合、x をクラスのオブジェクトで、x がデストラクトされる
時に自動的に close_some()を呼び出すようになっていれば、そもそも
goto文は不要なので、例外処理でやらなくても最初からgoto文が現れない。
しかし、すべてがクラスオブジェクトになっているわけではない。
典型的な例は、
BOOL last_flags = g_flags;
g_flags = 一時的なフラグ設定;
・・・
if ( xxx ) {
// エラー発生:
rc = FALSE;
goto lab_ex;
}
lab_ex:;
g_flags = last_flags;
return rc;
のようなもの。
547デフォルトの名無しさん
2021/05/10(月) 10:40:58.67ID:u82ImyiI 後藤さんいい加減にしてくださいよ…
548デフォルトの名無しさん
2021/05/10(月) 13:07:54.71ID:H09R880S Linuxや*BSDなどのカーネルはgoto文が誰に遠慮することもなく堂々と使われてますよ
そして可読性は何も損なわれていない
言語屋さんだけじゃないの?構造化でgotoがどうたらとかそれに代わる言語機構が
必要だとか言ってるのは
そして新たに言語を学ぶ人が無批判にそれらを盲信することが代々続いてる
ようにしか見えない
そして可読性は何も損なわれていない
言語屋さんだけじゃないの?構造化でgotoがどうたらとかそれに代わる言語機構が
必要だとか言ってるのは
そして新たに言語を学ぶ人が無批判にそれらを盲信することが代々続いてる
ようにしか見えない
549デフォルトの名無しさん
2021/05/10(月) 13:38:27.10ID:FH4+0Y9S 多くの言語はハードウェアとしてCPU例外や、I/Oに対する入出力の(ハードウェア的)例外と、多くは
復帰可能なエラー分岐処理にて、プログラミング言語で「包括的に捕捉して後処理」するためにある。
例外の反対者はResult/Option/(Either)のようなものがあるのに、なぜ言語に例外を取り入れて、信頼性を
低下させるような隠された制御フローを導入するのかと主張します。
しかし例えばファイルへの出力で"fwrite"ではOSの上層では実際に書き込まれず、"fclose"で書き込まれたり
あるいは"fflush"でメモリー上とディスクが同期されるなどは、同期的な、従来の戻り値を確認しただけでは
正確な判断ができない。(これは言語のライブリーがBufferを使用しているとは別の話、たとえばディスク
容量が足りなくなった場合など、意図するプログラムは失敗する可能性があります。)
またResultなどが使用できるの場合は、ハードウェアやIOに依存しない場合にできるだけです。他にも、不正な
ゼロ除算などの発生は、カーネルでも、組み込みでも、CPU例外に対しては特定の例外の種類によりあらかじめ
決められたアドレスに強制的にジャンプします。C言語自身はCPUの挙動を定義していませんので、この制御の
フローの移動はCプログラミング言語の機能ではなくCPUメーカーの実装です。
つまり、標準のC自体だけでは、統一的にエラー処理を記述するということ自体が出来ていませんし、実行制御
フロー記述し完全掌握してコントロールするという事自体があやふやです。
(ゼロ除算でジャンプしなくてHALTするようなCPUがあるかもしれませんが知りません)
復帰可能なエラー分岐処理にて、プログラミング言語で「包括的に捕捉して後処理」するためにある。
例外の反対者はResult/Option/(Either)のようなものがあるのに、なぜ言語に例外を取り入れて、信頼性を
低下させるような隠された制御フローを導入するのかと主張します。
しかし例えばファイルへの出力で"fwrite"ではOSの上層では実際に書き込まれず、"fclose"で書き込まれたり
あるいは"fflush"でメモリー上とディスクが同期されるなどは、同期的な、従来の戻り値を確認しただけでは
正確な判断ができない。(これは言語のライブリーがBufferを使用しているとは別の話、たとえばディスク
容量が足りなくなった場合など、意図するプログラムは失敗する可能性があります。)
またResultなどが使用できるの場合は、ハードウェアやIOに依存しない場合にできるだけです。他にも、不正な
ゼロ除算などの発生は、カーネルでも、組み込みでも、CPU例外に対しては特定の例外の種類によりあらかじめ
決められたアドレスに強制的にジャンプします。C言語自身はCPUの挙動を定義していませんので、この制御の
フローの移動はCプログラミング言語の機能ではなくCPUメーカーの実装です。
つまり、標準のC自体だけでは、統一的にエラー処理を記述するということ自体が出来ていませんし、実行制御
フロー記述し完全掌握してコントロールするという事自体があやふやです。
(ゼロ除算でジャンプしなくてHALTするようなCPUがあるかもしれませんが知りません)
550デフォルトの名無しさん
2021/05/10(月) 13:43:11.18ID:FH4+0Y9S 多くの例外がある言語(RustやGoのpanicも含む)では、上記の例ではファイル出力とは無関係な処理でも
即座に後処理へ移動します。ですが、ここに1つの問題があり、多くは捕捉した後にほぼ「自動的に」
ディストラクタに記述された処理をスレッド毎に存在するスタックを遡って巻き戻しを行います。
(例外の反対者はこれを隠された制御フローというが、決して信頼性が低下するわけではないです、
カーネルの例外ハンドラを例に挙げれば、ただ挙動が合わない事と、多くの例外がある言語でのCPU例外の
捕捉はリカバリが不可能に近く、挙動が保証できない事でディストラクタ実行させて意味があるのかという
矛盾もあります)
それ以外の例外処理は概念的にはスレッドローカルグローバル変数とifとgoto/returnの組み合わせにしか
ならないので信頼性が低下したりはしません。また、C言語や昔の言語でgotoが嫌われていたのは、ラベルが
存在しないgotoだったりループ中のgotoだったり、プログラムのモジュール化を壊す制御であったためなども
あります。try-catch-finallyとは無関係ですが、同様に可読性が悪いように見えてしまうため、冤罪にされます。
そもそもアセンブラであればJMP命令にしかならない事をいつまでもグチグチ言うのは悪い癖です
即座に後処理へ移動します。ですが、ここに1つの問題があり、多くは捕捉した後にほぼ「自動的に」
ディストラクタに記述された処理をスレッド毎に存在するスタックを遡って巻き戻しを行います。
(例外の反対者はこれを隠された制御フローというが、決して信頼性が低下するわけではないです、
カーネルの例外ハンドラを例に挙げれば、ただ挙動が合わない事と、多くの例外がある言語でのCPU例外の
捕捉はリカバリが不可能に近く、挙動が保証できない事でディストラクタ実行させて意味があるのかという
矛盾もあります)
それ以外の例外処理は概念的にはスレッドローカルグローバル変数とifとgoto/returnの組み合わせにしか
ならないので信頼性が低下したりはしません。また、C言語や昔の言語でgotoが嫌われていたのは、ラベルが
存在しないgotoだったりループ中のgotoだったり、プログラムのモジュール化を壊す制御であったためなども
あります。try-catch-finallyとは無関係ですが、同様に可読性が悪いように見えてしまうため、冤罪にされます。
そもそもアセンブラであればJMP命令にしかならない事をいつまでもグチグチ言うのは悪い癖です
551デフォルトの名無しさん
2021/05/10(月) 15:15:38.71ID:ro06Xyvc >>550
後半、BASIC言語を振り返ってみると、ラベルの無いgoto文はむしろラベルありより綺麗に書けていた。
gosubはラベル方式の方が良かったが。
Cのgotoはラベルが必須なのでラベルが浮いてしまって嫌われているという説がある位。
後半、BASIC言語を振り返ってみると、ラベルの無いgoto文はむしろラベルありより綺麗に書けていた。
gosubはラベル方式の方が良かったが。
Cのgotoはラベルが必須なのでラベルが浮いてしまって嫌われているという説がある位。
552デフォルトの名無しさん
2021/05/10(月) 15:18:53.59ID:ro06Xyvc 例外処理の問題点は、
try {
f1();
・・・
f2();
・・・
f3();
・・・
f4();
・・・
}
とtryブロックの中に沢山の関数呼び出しが有った場合、コード上ではどこでも例外が
起きる可能性を捨てきれないため逆に危険な可能性を排除しにくいことがある。
例えば、fputc()やfwrite()などで例外が起きることが分かっているならそれはそれで
良いが、全く関係のないf1, f2, f3, f4でもどれかは例外が起きる可能性があるなら
非常にプログラミングしにくい。
try {
f1();
・・・
f2();
・・・
f3();
・・・
f4();
・・・
}
とtryブロックの中に沢山の関数呼び出しが有った場合、コード上ではどこでも例外が
起きる可能性を捨てきれないため逆に危険な可能性を排除しにくいことがある。
例えば、fputc()やfwrite()などで例外が起きることが分かっているならそれはそれで
良いが、全く関係のないf1, f2, f3, f4でもどれかは例外が起きる可能性があるなら
非常にプログラミングしにくい。
553デフォルトの名無しさん
2021/05/10(月) 15:21:55.24ID:ro06Xyvc >>551
例えば、BASICでは以下の様な感じになるので、ラベルが無い事でむしろすっきり
見易かった。gosub文はまた別でいまの関数の様な感じで名前が付いている方が
分かり易かった。これは経験を積まないと理解しにくいかも知れない。
100 if xxx = yyy goto 120
110 ・・・
120 ・・・
例えば、BASICでは以下の様な感じになるので、ラベルが無い事でむしろすっきり
見易かった。gosub文はまた別でいまの関数の様な感じで名前が付いている方が
分かり易かった。これは経験を積まないと理解しにくいかも知れない。
100 if xxx = yyy goto 120
110 ・・・
120 ・・・
554デフォルトの名無しさん
2021/05/10(月) 18:35:05.49ID:mFjZyrFq555デフォルトの名無しさん
2021/05/10(月) 18:45:12.97ID:QB4+qLHE Rustは学習コスト高いって言われてるけど
Scala辺りと比べても難しいですか?
Scala辺りと比べても難しいですか?
556デフォルトの名無しさん
2021/05/10(月) 19:40:11.34ID:RQLzh3xR >>555
別に特別難しいわけではないと思う
いろんな言語からパクってきてる要素が多くて、これまで一つの言語しか使ったことない人は学ぶべきことが多いってだけで
ScalaとC++くらい経験あれば余裕だろう
別に特別難しいわけではないと思う
いろんな言語からパクってきてる要素が多くて、これまで一つの言語しか使ったことない人は学ぶべきことが多いってだけで
ScalaとC++くらい経験あれば余裕だろう
557デフォルトの名無しさん
2021/05/10(月) 21:15:30.50ID:aMiH/GVN コンパイラの文脈解析がこんだけ普及したのだから
safe gotoが存在するべきだ
safe gotoが存在するべきだ
558デフォルトの名無しさん
2021/05/10(月) 21:21:46.54ID:10iSv1/R 言語自体よりも、情報技術の基礎が要求されるんじゃないの
559デフォルトの名無しさん
2021/05/10(月) 21:38:27.66ID:+CGjcQmG560デフォルトの名無しさん
2021/05/10(月) 23:10:53.18ID:Ai0jiWQm561デフォルトの名無しさん
2021/05/10(月) 23:22:34.42ID:rt96Jr4B playground、いつのまにか以前書いたコードが残るようになっててなんかうざったいんだけど、
初期のhello worldの状態に戻すのってどうやるの?(クッキー削除とかはなしで
初期のhello worldの状態に戻すのってどうやるの?(クッキー削除とかはなしで
562デフォルトの名無しさん
2021/05/10(月) 23:29:40.57ID:4UvCiOpM んな面倒なことするくらいならrustupインストールすりゃええやん
563デフォルトの名無しさん
2021/05/11(火) 00:01:56.34ID:bFiGc/cl >>549
ファイルへの書き込みは返り値promise等でもらっておいて他の作業を進めて
どうしても書き込み完了していないと作業を先へ進めてはいけないところでようやくawait等することで
例外処理も遅延(手続き的な後ろ化と多段時の上位化)ができますよね
あとOSカーネル内の話は
例外と割り込みをごっちゃにしているように見えます
いずれにせよカーネル内ではtry例外使わずとも多段にエラー返り値を返していけばいいだけでしょう
エラー割り込み時もメモリ不足もシステムコールならエラー値返すわけですし
ファイルへの書き込みは返り値promise等でもらっておいて他の作業を進めて
どうしても書き込み完了していないと作業を先へ進めてはいけないところでようやくawait等することで
例外処理も遅延(手続き的な後ろ化と多段時の上位化)ができますよね
あとOSカーネル内の話は
例外と割り込みをごっちゃにしているように見えます
いずれにせよカーネル内ではtry例外使わずとも多段にエラー返り値を返していけばいいだけでしょう
エラー割り込み時もメモリ不足もシステムコールならエラー値返すわけですし
564はちみつ餃子 ◆8X2XSCHEME
2021/05/11(火) 02:56:09.45ID:sf6ddr3r >>555
Rust はそれほど難しいというわけでもないと思う。
C に ML 風の型システムを付けたって程度。
普通のプログラマにとって目新しいと言えるのはライフタイムの概念くらい。
でもそのひとつが馴染み無さ過ぎるというか、
他の言語では意識せずに済まさせようとしてきたところを
あえて露骨に管理しようとしてるところがしんどいとは感じるかもね。
Rust はそれほど難しいというわけでもないと思う。
C に ML 風の型システムを付けたって程度。
普通のプログラマにとって目新しいと言えるのはライフタイムの概念くらい。
でもそのひとつが馴染み無さ過ぎるというか、
他の言語では意識せずに済まさせようとしてきたところを
あえて露骨に管理しようとしてるところがしんどいとは感じるかもね。
565デフォルトの名無しさん
2021/05/11(火) 03:24:21.67ID:BXZYJdJz >>564
Rustのライフタイムは、鶏と卵の関係の様な部分で言語の動作が分からない。
どっちがどっちに影響を与えているのかの部分が。
自動判定の仕組みも一部だけ説明されていて一般法則が書いておらず、その場しのぎ的な言語仕様なのかもしれない。
Rustのライフタイムは、鶏と卵の関係の様な部分で言語の動作が分からない。
どっちがどっちに影響を与えているのかの部分が。
自動判定の仕組みも一部だけ説明されていて一般法則が書いておらず、その場しのぎ的な言語仕様なのかもしれない。
566デフォルトの名無しさん
2021/05/11(火) 04:47:35.34ID:+XHXxVLE non lexical lifetimeでググれば詳細な仕様出てくるだろ
567デフォルトの名無しさん
2021/05/11(火) 05:08:47.84ID:BXZYJdJz >>566
出てこないと思うが。
出てこないと思うが。
568デフォルトの名無しさん
2021/05/11(火) 08:24:36.99ID:hJ8vQWaq >>561
通りすがりですが、保存せずにただ試すだけなら
1.シークレットモードで新規タブ
2.playgroundのサイトを開く(ブックマーク登録からとか)
3.コード入力かコピペ作業
でどうでしょうか?
通りすがりですが、保存せずにただ試すだけなら
1.シークレットモードで新規タブ
2.playgroundのサイトを開く(ブックマーク登録からとか)
3.コード入力かコピペ作業
でどうでしょうか?
569デフォルトの名無しさん
2021/05/11(火) 10:55:34.68ID:nxCZKmfr >>567
nll rfcで検索したら出てくるよ
nll rfcで検索したら出てくるよ
570デフォルトの名無しさん
2021/05/11(火) 12:37:05.27ID:BXZYJdJz >>569
そこには例が書かれてるだけで、数学みたいな意味でのちゃんとした厳密仕様は書いてないと思うんだよ。
Rustのライフタイムは数学規則のように機械的にパターンで処理できるような一般化された規則にはなってないという意味において。
そこには例が書かれてるだけで、数学みたいな意味でのちゃんとした厳密仕様は書いてないと思うんだよ。
Rustのライフタイムは数学規則のように機械的にパターンで処理できるような一般化された規則にはなってないという意味において。
571デフォルトの名無しさん
2021/05/11(火) 12:42:48.49ID:yczyG8TY 厳密な仕様があるのは理想だけど、規格化された言語ですら数学的に厳密な仕様なんて存在しないしな
最終的にはCoqのソースコードで示される、とかはあるかもしれないが
最終的にはCoqのソースコードで示される、とかはあるかもしれないが
572デフォルトの名無しさん
2021/05/11(火) 12:47:18.80ID:BXZYJdJz573デフォルトの名無しさん
2021/05/11(火) 12:55:41.33ID:r1e7nJBc the abstract syntax tree でのライフタイムの解析から
the control-flow graph でのライフタイムの解析にしたって言ってるから
かなりマシン語に近いとこで判定してるってことだわな。
ここにいる奴に聞くだけ無駄w
the control-flow graph でのライフタイムの解析にしたって言ってるから
かなりマシン語に近いとこで判定してるってことだわな。
ここにいる奴に聞くだけ無駄w
574デフォルトの名無しさん
2021/05/11(火) 18:36:37.89ID:efUOVNNI575デフォルトの名無しさん
2021/05/11(火) 18:56:14.78ID:jWdOrz94 issue #25860って未だに解決されてないんだよね?
行きあたりばったりでライフタイム仕様決めてきた結果w
行きあたりばったりでライフタイム仕様決めてきた結果w
576デフォルトの名無しさん
2021/05/11(火) 19:03:56.93ID:wl2jzTgT Rustと原子力発電は人類には早すぎたんや…
577デフォルトの名無しさん
2021/05/11(火) 19:52:59.74ID:8+nUEbRM Rust嫌う人ってなんでみんな #25860 の話するのって言われてんぞ
578デフォルトの名無しさん
2021/05/11(火) 22:03:42.47ID:1AWmjfgF >>576
太陽光発電は、ある意味原子力発電と言えるのではないだろうか。
太陽光発電は、ある意味原子力発電と言えるのではないだろうか。
579デフォルトの名無しさん
2021/05/12(水) 08:51:30.06ID:1N4enQMj580デフォルトの名無しさん
2021/05/12(水) 10:38:41.98ID:qFi3vx5o 1.56.0からか
581デフォルトの名無しさん
2021/05/12(水) 10:40:17.60ID:1N4enQMj 2021 Edition ざっと読んでみたけど、次の2点以外は些末な変更だな
for e in [1, 2, 3] {}
がエラーにならなくなる
(IntoIterator for arrays)
クロージャーが構造体をフィールド単位でキャプチャーするようになる
(Disjoint capture in closures)
for e in [1, 2, 3] {}
がエラーにならなくなる
(IntoIterator for arrays)
クロージャーが構造体をフィールド単位でキャプチャーするようになる
(Disjoint capture in closures)
582デフォルトの名無しさん
2021/05/12(水) 21:45:20.66ID:rLfxFtSp 2018で勉強してますが仕様変わりますか?
583デフォルトの名無しさん
2021/05/12(水) 22:08:40.92ID:fyx4mRuh https://www.google.com/amp/s/japan.zdnet.com/amp/article/35170513/
「Windows用Rust」のバージョン0.9がリリース
何か誤解を与えそうな記事タイトルだ
「Windows用Rust」のバージョン0.9がリリース
何か誤解を与えそうな記事タイトルだ
584デフォルトの名無しさん
2021/05/13(木) 00:09:46.25ID:JmJXN960 リポジトリ名的にwindows-rsのが適語か?
585デフォルトの名無しさん
2021/05/13(木) 00:34:31.53ID:hcgdol/O >>582
マイナーチェンジだし2018も継続して使えるし特に問題ないよ
マイナーチェンジだし2018も継続して使えるし特に問題ないよ
586デフォルトの名無しさん
2021/05/13(木) 00:46:54.51ID:oO6nJ4P1 何年か前なら喜んでたんだけどな、どうしよ何の興味も沸かない
Docker触り始めた辺りからWindows用は趣味でも書かなくなってしまった…
Docker触り始めた辺りからWindows用は趣味でも書かなくなってしまった…
587デフォルトの名無しさん
2021/05/13(木) 07:59:13.00ID:OSZsGS3x >>583 多分windowsクレートの説明文のRust for Windowsの直訳だとは思うけどこれは誤解するわ
588デフォルトの名無しさん
2021/05/13(木) 11:06:57.34ID:mHvpW2NY Rust for Windowsという名前がミスリーディング
(A) Rust (crate) for Windows (development)をRust for Windowsに略したら誰でも誤解する
狙ってるのかもしれないが
Windows API bindgen for Rustあたりが適当
(A) Rust (crate) for Windows (development)をRust for Windowsに略したら誰でも誤解する
狙ってるのかもしれないが
Windows API bindgen for Rustあたりが適当
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 空自機レーダー照射、音声データ公開 中国 ★3 [蚤の市★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★] [蚤の市★]
- 高市早苗首相、消費税減税に後ろ向き 足かせはレジシステム? 「責任ある積極財政」期待高いが [蚤の市★]
- 【YouTuber】バイク事故で入院のゆたぼん、振込で「お見舞金」募る [muffin★]
- ゼレンスキー氏、大統領選挙の実施表明 トランプ氏の圧力受け [蚤の市★]
- 低所得層のマクドナルド離れが深刻に 広がる「ファストフード格差」の真相 米国 [少考さん★]
- 中国がここまで過敏になるのは日本に前科があるから。盧溝橋、満州事変。ジャップの先制攻撃は挙げればキリがないけど [472617201]
- ぶっちゃけ天のうって昭和天のうのせいで全然ありがたみないよな
- 犬って顔くっつけて寝たがるよな
- 『猟友会がクマ駆除を嫌がるなら潰すべき。職務を放棄するハンターから免許や銃を没収して罰金を取ろう』の声、ネットで上がる [932029429]
- イオン、1.7kgの極太恵方巻を6458円で発売へ… 岡田さんの大きいナリ… [402859164]
- 【悲報】JA「全然米が売れなくて倉庫を圧迫してる。助けて!」米卸売り業者「安売りしたら赤字になる…助けて!」 [802034645]
