- 1 名前:デフォルトの名無しさん mailto:sage [2021/04/02(金) 21:38:04.11 ID:L7IeSfpL.net]
- 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/
- 488 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 13:45:35.27 ID:eN8Lkrsa.net]
- 何を議論してるのか全然分からん
- 489 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 14:02:25.02 ID:SIz+0gIF.net]
- 1レス目で即NG
相手してるやつも同じカテゴリなので即NG
- 490 名前:はちみつ餃子 mailto:sage [2021/05/07(金) 14:03:01.68 ID:xLSEaA6V.net]
- 議論なんかするつもりがないんだろう。
- 491 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 14:40:46.39 ID:r6L15P9a.net]
- >>479
>というか、int32_t という型名を考えた人が馬鹿すぎるので、長くて困るという話 >だと思ったんだ。 誰がどこでそんな話をしたのか ログ辿っても全然分からない件 ついでに言えば グローバル名前空間の中に標準ライブラリがブチ込む型名として _tサフィックス以外あり得んので 何も馬鹿なことなんか無い つーか本当に誰もそんな話してないな これ突っ込んだら どんなガイジレスを返すのか興味津々 >>480 論点不明のドッジボールだからな 今はどこでも似たようなやり取りが見られて 5ch終わってる感がハンパない 俺は句点付きが特に頭おかしいと思うけど レスバ相手はEQがヤバイ感じだが 句点付きはIQがヤバイ
- 492 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 14:57:30.94 ID:DUMB7Vls.net]
- メジャーなGUIアプリで使われているrust製GUIライブラリってなにがありますか?
GUI使いたいんですが長いものにまかれたいので
- 493 名前:はちみつ餃子 mailto:sage [2021/05/07(金) 15:02:55.52 ID:xLSEaA6V.net]
- >>484
プラットフォーム (OS) によって違うんじゃない? その中ではある程度に淘汰されてると思うけど、 あらゆる環境で万能な決定版は無いと思う。
- 494 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 15:53:14.60 ID:B2UdQUpV.net]
- >>483
>句点付きはIQがヤバイ 実際にIQ150越えてるので、ノーマル一般人が理解できないだけではないか。
- 495 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 16:08:00.06 ID:r6L15P9a.net]
- >>486
証拠うpしてくれ ID付き画像とかなら最高だ IQ150超えでもこんなガイジレスするのか マジで興味あるわ
- 496 名前:デフォルトの名無しさん [2021/05/07(金) 17:04:02.49 ID:+x2jPaur.net]
- メモリ不足でカーネルパニックが起きることの問題がわからない
普通のパソコン用途に使われてたらユーザーランドのソフトがOOM Killerに殺されようがOS丸ごとクラッシュしようが作業内容が失われるのは変わらん サーバー用途でも一部のプロセスが殺されて中途半端の状態で動き続けるよりいっその事OSまるごとクラッシュしたほうがいいと思う
- 497 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 17:16:13.01 ID:8gopO5Ce.net]
- >>488
rustでLinuxのドライバー書く話? メモリ不足時にどうハンドリングされるべきかは使い方によって違うので一律パニックするのは良くない 例えば例に挙げてるOOM Killerだってカーネルがパニックしたら実行されないわけで
- 498 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 17:22:12.18 ID:r6L15P9a.net]
- >>488
何かあった時止まればいいシステムばかりじゃないだろ ペースメーカーとか原子炉とか 細かいことは知らんけど 昔、組み込み屋のおっさんが最初から1Mぐらい確保して 何かあったらそれを解放してどうにかするみたいなこと言ってた 知らんけど
- 499 名前:はちみつ餃子 mailto:sage [2021/05/07(金) 18:25:34.58 ID:xLSEaA6V.net]
- >>488
システムは単独で動いているわけではない。 カーネルがパニックすることがあって良いという前提で設計して、パニックしうる前提で運用できるならそれでも構わんのだが、 Linux のカーネルでパニックを許すなら今 Linux を基礎にしているあらゆるシステムの運用体制を見直さざるを得ない。 カーネルパニックが絶対に駄目というわけじゃないんだ。 (もちろん発生しないに越したことは無いが。) Linux では起こさないという前提に皆が従っているので変えられないという話なんだよ。
- 500 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 18:53:57.67 ID:XbWp/RIC.net]
- 割り込みが飛んでくる環境で例外なんか扱おうとしたら普通に死ぬだろ
- 501 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 19:12:04.63 ID:RYgnWswQ.net]
- >>488
失われる作業内容の範囲があるだろ。 クライアントOSのWindowsですらBSODで切れる奴が多かったんだから、サーバーOSでそんな考えが許されるはずがない。
- 502 名前:デフォルトの名無しさん [2021/05/07(金) 19:35:24.51 ID:FlZ9PpDj.net]
- 差し当たりRustの言語を広く浅く学習したいのですが、「実践Rustプログラミング入門」の言語部分(100ページ程度)が分量が少なめで気になっています
この本で大きく抜けている文法や機能ってありますか?
- 503 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 20:06:32.24 ID:xz5IWUMT.net]
- >>494
The Bookと比べれば一目瞭然
- 504 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 20:11:06.98 ID:8H8V34/d.net]
- >>493
サーバーOSのほうがクライアントOSよりクラッシュには寛容だぞ サーバー側の開発したことないのかな?
- 505 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 20:22:58.56 ID:fmyiQrUP.net]
- >>496
最近は仮想化&分散で寛容になっているの?
- 506 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 21:23:40.41 ID:EDSX1EuR.net]
- >>494
最近の本だからasyncまであるし、そんなに大きな抜けはないかな 広く浅くならまぁいいんじゃないかと もし細かい部分が気になったらthe bookで補完すればいい
- 507 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 21:36:25.19 ID:7aFGtcIv.net]
- >>497
むしろchaos engineeringで積極的に落とす
- 508 名前:デフォルトの名無しさん mailto:sage [2021/05/07(金) 21:52:45.82 ID:Z7WMK8Ny.net]
- ペースメーカーとか原子炉とか、ノンストップシステムでは常に複数動いている
Kubernetes などでは、ネットワーク分断に備えて、 正常な状態を多数決で決めるから、3, 5, 7 みたいな奇数を動かす 2対2とか偶数だと、どちらが正常か判断できないから
- 509 名前:500 mailto:sage [2021/05/07(金) 22:00:09.91 ID:Z7WMK8Ny.net]
- Netflix などは常に、システムを攻撃して落としたりして、テストしてる。
サイボウズのkintone は、毎日システムを破棄して、作り直しているとか Kubernetes を使っているのかな?
- 510 名前:デフォルトの名無しさん [2021/05/08(土) 00:03:29.89 ID:4agfhhA1.net]
- 非常時の処理はカーネルの中心部が決めることで
枝葉のモジュールに決定権はないという話なんじゃないの?
- 511 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 00:07:56.54 ID:OofXJFgO.net]
- レイヤーがめちゃくちゃな話しとるな。
OSみたいなハードウェアに直触るものとkubernetesみたいな分散管理のソフトじゃ 全然話が違う。 実際kubernetesはGC付きのgolangが実装だろ。
- 512 名前:500 mailto:sage [2021/05/08(土) 01:02:28.51 ID:P6P/nG6A.net]
- ノンストップシステムでは常に複数動く。
デュアルシステムとか 東証・富士通製のarrowhead は、3重だったかな? それでも、ラックか何かの接続部分が落ちて、システムダウンした ネットワークが集中している部分の故障が、最も怖い
- 513 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 08:40:46.17 ID:e+sagIsH.net]
- >>492
なんでじゃ 割り込みルーチンに入るときの退避と出るときの復旧をきちんとやっていれば 割り込みルーチン以外の処理は割り込みルーチンが呼び出されることに対して透過的に動作できる 一部のハードなリアルタイムOSみたいに(多重割り込み前提で)割り込みルーチンから 通常コンテキストに直接「ジャンプ」してタスクをたたき起こすみたいなケースでもなければ割り込みの存在は 通常コンテキストで何をやろうと一切影響は無い (もちろん割り込み禁止、みたいな直接割り込みに影響する命令を実行したら話は別だがそれは普通特権命令でOS以外は実行できな い カーネルでの例外が問題なのは、 例外機構を持たないCならスタックポインタの調整で済むところを デストラクタがある高級な言語だと例外が通過する際に自動変数として構築されていたオブジェクトを 例外が通過する関数全てについて解放してやらねばならない (それでいて一方、自動変数として構築される可能性はあっても 例外発生時に構築されていないオブジェクトに対しては何もしてはいけない という点 これは例外を飛ばすだけでその経路全部が同一のコンパイラで書かれなければならないことを意味する 途中に手で書いたアセンブラのルーチンなどあろうものならスタックをぶち壊してハードウェアの例外でいきなり 落ちるということになってそんなことがOS内で起きたら計算機上の資源の安全が担保されない。 OSとしては失格である
- 514 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 08:53:39.11 ID:e+sagIsH.net]
- 、と思ったが
よく考えたら「手で書いたアセンブラのルーチン」があったらコンパイラはそれを知らない関数としてスタックポインタの調整以外のことを しなかったら良いのかorz、 ここは「例外通過時にC++や異なるベンダーのRustコンパイラみたいな例外を捕捉する関数をコンパイルいたRustコンパイラが預かり知らない 巻き戻し処理が必要なルーチン」があったら、ということに訂正 、
- 515 名前:デフォルトの名無しさん [2021/05/08(土) 09:44:38.32 ID:9PfSgf27.net]
- なんだこいつ
IQ64だな
- 516 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 10:15:07.28 ID:e+sagIsH.net]
- IQは関係無いやろうがギギギギギ、
- 517 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:11:59.29 ID:52U5aUmg.net]
- JAVAみたいな言語があるからnewしたまま放ったらかしでメモリ管理もろくに出来ない馬鹿で溢れかえって居るんだよな
- 518 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 11:36:05.31 ID:jLEsHVNz.net]
- ついさっき知ったけど、new() はT だけじゃなく Result<T> を返していいんだな
- 519 名前:デフォルトの名無しさん [2021/05/08(土) 12:01:48.48 ID:9PfSgf27.net]
- newはシンタックスじゃなくてただの慣例だからね
慣例ではResultを返すのはお作法に反するはず
- 520 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 12:03:38.57 ID:OofXJFgO.net]
- 別にjavaがない頃からそういうバカはいたけどね
- 521 名前:デフォルトの名無しさん [2021/05/08(土) 12:09:19.46 ID:rOsHiSsL.net]
- メモリ管理もろくに出来ない馬鹿
・Linuxカーネルにカーネルスタックメモリ内の情報を読み取られる脆弱性 ・「WebKit」にゼロデイ脆弱性 〜「macOS Big Sur 11.3.1」や「iOS/iPadOS 14.5.1」などが公開 ・BIND9に脆弱性、アップデートや回避策を
- 522 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 12:14:25.93 ID:lGQPC/Vw.net]
- >>509
因果関係が逆で、 頭が悪くてその程度ももともと出来ない人は昔はCやC++でプログラムできなかった がVBやJavaやC#やJSやPythonやRubyではできた。
- 523 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 13:11:23.63 ID:RJ95z4qm.net]
- >>511
newとかfromでResult返すのたまに見かけるけど どうするのがおすすめなの? try_newとかtry_fromにするのが良いのかな
- 524 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 13:37:14.67 ID:jLEsHVNz.net]
- >>511
ただの慣例じゃなくて、clippy先生の指導対象らしい https://rust-lang.github.io/rust-clippy/master/#new_ret_no_self Checks for new not returning a type that contains Self.
- 525 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 14:30:50.83 ID:yMDwHl+j.net]
- 手動でスタックポインタの調整ってバグや脆弱性の温床
- 526 名前:じゃね? []
- [ここ壊れてます]
- 527 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 17:15:39.08 ID:3vrEhaHR.net]
- 医療機器や原発の制御システムとかが不意にリセットしないとか思っている時点で
組み込みとか高信頼性システムとかを全く知らないんだなって思う ああいうのは最悪暴走したらリセットして最低限の機能は提供出来るように 作るのが基本だからね。そうしないと想定外の事態がおきた時に詰む
- 528 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 17:18:46.34 ID:jLEsHVNz.net]
- そんなコーナーケースの為に俺たちの使い心地が悪くなるようなら耐えられないな
- 529 名前:はちみつ餃子 mailto:sage [2021/05/08(土) 17:23:48.71 ID://zoyCL6.net]
- 暴走した場合にでもうてる手札を用意しておくってのと、
暴走しないように細部まで検証しておくってのは両立する話
- 530 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 17:27:07.74 ID:QshNNe4V.net]
- いうほどコーナーケースってほどでもないだろ。
割と考慮されて当然のケースだわ。 まあlinux単体がその品質を担保できてるとも思わんけど。
- 531 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 17:33:15.67 ID:3vrEhaHR.net]
- 原子力関係だけでなく航空機や宇宙機もだが制御不能になるのが一番ヤバイんで
バグ出しは常識的な範囲で行って、あとはリカバリ系に注力した方がシステムの信頼性は向上する 歴史的に見ても事故るシステムの多くはこの辺をガバっている事が多いし
- 532 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 17:57:46.72 ID:e+sagIsH.net]
- 別に
ハイテク旅客機が落ちるのは自動制御と手動操縦のモード切替仕様を パイロットが熟知しておらず緊急時に操縦桿を奪い合う格闘になったから であってソフトは仕様通りだった 『ハイテク飛行機はなぜ落ちるか』(ブルーバックス)のインシデントの数々を見たらワカル 原子炉の制御系はそもそも暴走させないように金かけて形式検証する 人間が本気になったらどんだけバグをなくすために金と手間を掛けられるかというと スペースシャトルのSSMEの制御装置のソフトがどんだけ徹底したデバッグが行われたかを見たらワカル
- 533 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 18:17:53.56 ID:57+jEKOs.net]
- >>523
人間が使う物であればUIも当然システムに含まれる 判りにくいUIは良いシステムとは言えない ソユーズや神舟はADA使ったりしていないけど スペースシャトルより死人は少ない。米式が唯一の正解とは限らない むしろスペースシャトルはシステム設計に失敗した例だろ
- 534 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 18:22:37.13 ID:e+sagIsH.net]
- UIの仕様バグと>>518が言っている暴走する系のバグは話がちげう
- 535 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 18:36:29.80 ID:57+jEKOs.net]
- 組み込み機器でも多くのケースで不測の事態に備えてウォッチドックタイマを使うよね
トリガを何にするかやリセット時に何をするかは設計手腕が問われるところだけど
- 536 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 19:38:20.73 ID:RJ95z4qm.net]
- >>516
fn new() -> Result<Self, T> は警告出ないよ
- 537 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 19:42:36.17 ID:PnHrKWCk.net]
- newでResult返すのはいいけどfromは駄目だろ
というかFrom trait実装しろ
- 538 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 19:46:07.47 ID:RJ95z4qm.net]
- >>528
そもそも impl From<T> Result<Foo, E> はcoherenceの関係でエラーになるよね Intoはできるけど FromStr なり TryFrom を使うべきというのはそう
- 539 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 20:23:33.19 ID:jLEsHVNz.net]
- >>527
そりゃ Result はそこに書いてある a type that contains Self だからね
- 540 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 21:10:37.46 ID:vIQ3GRO1.net]
- cのコードをrustに変換してくれるライブラリってありませんか?
- 541 名前:デフォルトの名無しさん mailto:sage [2021/05/08(土) 22:23:50.74 ID:8Oybw0Jl.net]
- >>531
c2rust
- 542 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 12:16:13.70 ID:RMo+m9mc.net]
- その場合誰がRustコンパイラと戦うんじゃ……
- 543 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 13:34:11.17 ID:DdW1Qm5g.net]
- 1.52来てたのね
- 544 名前:デフォルトの名無しさん [2021/05/09(日) 23:13:05.64 ID:T2j6cCMq.net]
- 例外処理って何が有難いの?Cでプログラム書いてて例外がなくて困ったことないんだけど
もしかしてただのシンタックスシュガー?
- 545 名前:デフォルトの名無しさん mailto:sage [2021/05/09(日) 23:31:00.87 ID:LUIc58fP.net]
- 戻り値の設定に近いものを一箇所にまとめられる。
- 546 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 00:03:43.87 ID:sciUqTyU.net]
- どのレベルの話?
初心者の質問だとすると、関数の失敗を成功と区別するため。 戻り値で区別するんでなくて仕組みで。
- 547 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 00:10:05.03 ID:EWDopcLj.net]
- 例外の存在意義が分からない
戻り値で判別する方が可読性も高いし何も不足を感じない
- 548 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 00:21:25.87 ID:giJ6lOgz.net]
- >>538
スレチ
- 549 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 07:17:37.24 ID:aMiH/GVN.net]
- fileへのwriteとか毎行エラーチェック入るのしんどい
- 550 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 10:07:49.01 ID:ro06Xyvc.net]
- >>538
開いた後、必ず閉じる処理が必要な場合があるが、それをxとすると、 関数のある場所でエラーを発見した時、呼び出し元へ返りたくても、 xを閉じてからでなくてはならない。xが複数有ったり、今後もxの 量が増えていくような場合、エラーが起きる場所全てでxを正確に全て 閉じてからreturnするのは難しい。なので、昔から、xを閉じる処理は 関数の最後の方に書いておいて、その直前にラベル lab_ex:; のような ものを書いておいて、エラーが起きたときにはlab_exにgoto文 で飛ばすようなことが行われることが多かった。 でも、goto文は好まれ無い事があって、 try, catch 構文を使うと、goto文を使わなくてもそれが出来るようになる ことが例外処理の一つのメリット。
- 551 名前:デフォルトの名無しさん [2021/05/10(月) 10:12:49.59 ID:ro06Xyvc.net]
- >>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分がそんなに分かりにくいわけではない。
- 552 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 10:13:54.77 ID:Pi5UB1M6.net]
- そういやCで bail: ラベルが多用されてたなーっていうのを
anyhowクレートの bail! マクロで思い出した
- 553 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 10:16:15.81 ID:pIvV80n0.net]
- >>541,542
クソスレチ
- 554 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 10:23:18.20 ID:ro06Xyvc.net]
- >>542
例外処理を使った場合、goto文が要らない: BOOL func() { BOOL rc = TRUE; open_some(x); try { func2() ; // 例外発生の可能性有り func3() ; // 例外発生の可能性有り } catch(...) { printf( "エラーだよ\n" ); rc = FALSE; } close_some(x) return rc; }
- 555 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 10:23:53.36 ID:ro06Xyvc.net]
- >>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; のようなもの。
- 556 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 10:40:58.67 ID:u82ImyiI.net]
- 後藤さんいい加減にしてくださいよ…
- 557 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 13:07:54.71 ID:H09R880S.net]
- Linuxや*BSDなどのカーネルはgoto文が誰に遠慮することもなく堂々と使われてますよ
そして可読性は何も損なわれていない 言語屋さんだけじゃないの?構造化でgotoがどうたらとかそれに代わる言語機構が 必要だとか言ってるのは そして新たに言語を学ぶ人が無批判にそれらを盲信することが代々続いてる ようにしか見えない
- 558 名前:デフォルトの名無しさん [2021/05/10(月) 13:38:27.10 ID:FH4+0Y9S.net]
- 多くの言語はハードウェアとしてCPU例外や、I/Oに対する入出力の(ハードウェア的)例外と、多くは
復帰可能なエラー分岐処理にて、プログラミング言語で「包括的に捕捉して後処理」するためにある。 例外の反対者はResult/Option/(Either)のようなものがあるのに、なぜ言語に例外を取り入れて、信頼性を 低下させるような隠された制御フローを導入するのかと主張します。 しかし例えばファイルへの出力で"fwrite"ではOSの上層では実際に書き込まれず、"fclose"で書き込まれたり あるいは"fflush"でメモリー上とディスクが同期されるなどは、同期的な、従来の戻り値を確認しただけでは 正確な判断ができない。(これは言語のライブリーがBufferを使用しているとは別の話、たとえばディスク 容量が足りなくなった場合など、意図するプログラムは失敗する可能性があります。) またResultなどが使用できるの場合は、ハードウェアやIOに依存しない場合にできるだけです。他にも、不正な ゼロ除算などの発生は、カーネルでも、組み込みでも、CPU例外に対しては特定の例外の種類によりあらかじめ 決められたアドレスに強制的にジャンプします。C言語自身はCPUの挙動を定義していませんので、この制御の フローの移動はCプログラミング言語の機能ではなくCPUメーカーの実装です。 つまり、標準のC自体だけでは、統一的にエラー処理を記述するということ自体が出来ていませんし、実行制御 フロー記述し完全掌握してコントロールするという事自体があやふやです。 (ゼロ除算でジャンプしなくてHALTするようなCPUがあるかもしれませんが知りません)
- 559 名前:デフォルトの名無しさん [2021/05/10(月) 13:43:11.18 ID:FH4+0Y9S.net]
- 多くの例外がある言語(RustやGoのpanicも含む)では、上記の例ではファイル出力とは無関係な処理でも
即座に後処理へ移動します。ですが、ここに1つの問題があり、多くは捕捉した後にほぼ「自動的に」 ディストラクタに記述された処理をスレッド毎に存在するスタックを遡って巻き戻しを行います。 (例外の反対者はこれを隠された制御フローというが、決して信頼性が低下するわけではないです、 カーネルの例外ハンドラを例に挙げれば、ただ挙動が合わない事と、多くの例外がある言語でのCPU例外の 捕捉はリカバリが不可能に近く、挙動が保証できない事でディストラクタ実行させて意味があるのかという 矛盾もあります) それ以外の例外処理は概念的にはスレッドローカルグローバル変数とifとgoto/returnの組み合わせにしか ならないので信頼性が低下したりはしません
- 560 名前:Bまた、C言語や昔の言語でgotoが嫌われていたのは、ラベルが
存在しないgotoだったりループ中のgotoだったり、プログラムのモジュール化を壊す制御であったためなども あります。try-catch-finallyとは無関係ですが、同様に可読性が悪いように見えてしまうため、冤罪にされます。 そもそもアセンブラであればJMP命令にしかならない事をいつまでもグチグチ言うのは悪い癖です [] - [ここ壊れてます]
- 561 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 15:15:38.71 ID:ro06Xyvc.net]
- >>550
後半、BASIC言語を振り返ってみると、ラベルの無いgoto文はむしろラベルありより綺麗に書けていた。 gosubはラベル方式の方が良かったが。 Cのgotoはラベルが必須なのでラベルが浮いてしまって嫌われているという説がある位。
- 562 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 15:18:53.59 ID:ro06Xyvc.net]
- 例外処理の問題点は、
try { f1(); ・・・ f2(); ・・・ f3(); ・・・ f4(); ・・・ } とtryブロックの中に沢山の関数呼び出しが有った場合、コード上ではどこでも例外が 起きる可能性を捨てきれないため逆に危険な可能性を排除しにくいことがある。 例えば、fputc()やfwrite()などで例外が起きることが分かっているならそれはそれで 良いが、全く関係のないf1, f2, f3, f4でもどれかは例外が起きる可能性があるなら 非常にプログラミングしにくい。
- 563 名前:デフォルトの名無しさん mailto:さげ [2021/05/10(月) 15:21:55.24 ID:ro06Xyvc.net]
- >>551
例えば、BASICでは以下の様な感じになるので、ラベルが無い事でむしろすっきり 見易かった。gosub文はまた別でいまの関数の様な感じで名前が付いている方が 分かり易かった。これは経験を積まないと理解しにくいかも知れない。 100 if xxx = yyy goto 120 110 ・・・ 120 ・・・
- 564 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 18:35:05.49 ID:mFjZyrFq.net]
- >>548
構造化の無い暗黒時代に戻りたくないわ。 制御構文と構造化設計を破壊するぐらいならgoto使わないほうがマシ。破壊しない程度だったら許容できるかね。
- 565 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 18:45:12.97 ID:QB4+qLHE.net]
- Rustは学習コスト高いって言われてるけど
Scala辺りと比べても難しいですか?
- 566 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 19:40:11.34 ID:RQLzh3xR.net]
- >>555
別に特別難しいわけではないと思う いろんな言語からパクってきてる要素が多くて、これまで一つの言語しか使ったことない人は学ぶべきことが多いってだけで ScalaとC++くらい経験あれば余裕だろう
- 567 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:15:30.50 ID:aMiH/GVN.net]
- コンパイラの文脈解析がこんだけ普及したのだから
safe gotoが存在するべきだ
- 568 名前:デフォルトの名無しさん [2021/05/10(月) 21:21:46.54 ID:10iSv1/R.net]
- 言語自体よりも、情報技術の基礎が要求されるんじゃないの
- 569 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 21:38:27.66 ID:+CGjcQmG.net]
- >>555
やってみるのが一番早いよ https://ideone.com/ こーいうところを使うとPC側にコンパイラとか用意せずに試せる
- 570 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 23:10:53.18 ID:Ai0jiWQm.net]
- >>559
>>1にもあるけどhttps://play.rust-lang.orgのほうがいろいろ充実してる てかideoneは1.33.0とかなのか、結構古いね
- 571 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 23:22:34.42 ID:rt96Jr4B.net]
- playground、いつのまにか以前書いたコードが残るようになっててなんかうざったいんだけど、
初期のhello worldの状態に戻すのってどうやるの?(クッキー削除とかはなしで
- 572 名前:デフォルトの名無しさん mailto:sage [2021/05/10(月) 23:29:40.57 ID:4UvCiOpM.net]
- んな面倒なことするくらいならrustupインストールすりゃええやん
- 573 名前:デフォルトの名無しさん [2021/05/11(火) 00:01:56.34 ID:bFiGc/cl.net]
- >>549
ファイルへの書き込みは返り値promise等でもらっておいて他の作業を進めて どうしても書き込み完了していないと作業を先へ進めてはいけないところでようやくawait等することで 例外処理も遅延(手続き的な後ろ化と多段時の上位化)ができますよね あとOSカーネル内の話は 例外と割り込みをごっちゃにしているように見えます いずれにせよカーネル内ではtry例外使わずとも多段にエラー返り値を返していけばいいだけでしょう エラー割り込み時もメモリ不足もシステムコールならエラー値返すわけですし
- 574 名前:はちみつ餃子 mailto:sage [2021/05/11(火) 02:56:09.45 ID:sf6ddr3r.net]
- >>555
Rust はそれほど難しいというわけでもないと思う。 C に ML 風の型システムを付けたって程度。 普通のプログラマにとって目新しいと言えるのはライフタイムの概念くらい。 でもそのひとつが馴染み無さ過ぎるというか、 他の言語では意識せずに済まさせようとしてきたところを あえて露骨に管理しようとしてるところがしんどいとは感じるかもね。
- 575 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 03:24:21.67 ID:BXZYJdJz.net]
- >>564
Rustのライフタイムは、鶏と卵の関係の様な部分で言語の動作が分からない。 どっちがどっちに影響を与えているのかの部分が。 自動判定の仕組みも一部だけ説明されていて一般法則が書いておらず、その場しのぎ的な言語仕様なのかもしれない。
- 576 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 04:47:35.34 ID:+XHXxVLE.net]
- non lexical lifetimeでググれば詳細な仕様出てくるだろ
- 577 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 05:08:47.84 ID:BXZYJdJz.net]
- >>566
出てこないと思うが。
- 578 名前:デフォルトの名無しさん [2021/05/11(火) 08:24:36.99 ID:hJ8vQWaq.net]
- >>561
通りすがりですが、保存せずにただ試すだけなら 1.シークレットモードで新規タブ 2.playgroundのサイトを開く(ブックマーク登録からとか) 3.コード入力かコピペ作業 でどうでしょうか?
- 579 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 10:55:34.68 ID:nxCZKmfr.net]
- >>567
nll rfcで検索したら出てくるよ
- 580 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 12:37:05.27 ID:BXZYJdJz.net]
- >>569
そこには例が書かれてるだけで、数学みたいな意味でのちゃんとした厳密仕様は書いてないと思うんだよ。 Rustのライフタイムは数学規則のように機械的にパターンで処理できるような一般化された規則にはなってないという意味において。
- 581 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 12:42:48.49 ID:yczyG8TY.net]
- 厳密な仕様があるのは理想だけど、規格化された言語ですら数学的に厳密な仕様なんて存在しないしな
最終的にはCoqのソースコードで示される、とかはあるかもしれないが
- 582 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 12:47:18.80 ID:BXZYJdJz.net]
- >>571
CやC++は数学的なパターンで処理できるようになってる。 そこにヒューリスティックなものは入ってない。
- 583 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 12:55:41.33 ID:r1e7nJBc.net]
- the abstract syntax tree でのライフタイムの解析から
the control-flow graph でのライフタイムの解析にしたって言ってるから かなりマシン語に近いとこで判定してるってことだわな。 ここにいる奴に聞くだけ無駄w
- 584 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 18:36:37.89 ID:efUOVNNI.net]
- >>571
純lispくらいかね。 あるいはBrainfuckとか。
- 585 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 18:56:14.78 ID:jWdOrz94.net]
- issue #25860って未だに解決されてないんだよね?
行きあたりばったりでライフタイム仕様決めてきた結果w
- 586 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 19:03:56.93 ID:wl2jzTgT.net]
- Rustと原子力発電は人類には早すぎたんや…
- 587 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 19:52:59.74 ID:8+nUEbRM.net]
- Rust嫌う人ってなんでみんな #25860 の話するのって言われてんぞ
- 588 名前:デフォルトの名無しさん mailto:sage [2021/05/11(火) 22:03:42.47 ID:1AWmjfgF.net]
- >>576
太陽光発電は、ある意味原子力発電と言えるのではないだろうか。
|

|