Rust part10

■ このスレッドは過去ログ倉庫に格納されています
2021/04/02(金) 21:38:04.11ID:L7IeSfpL
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/
2021/05/07(金) 17:16:13.01ID:8gopO5Ce
>>488
rustでLinuxのドライバー書く話?
メモリ不足時にどうハンドリングされるべきかは使い方によって違うので一律パニックするのは良くない
例えば例に挙げてるOOM Killerだってカーネルがパニックしたら実行されないわけで
2021/05/07(金) 17:22:12.18ID:r6L15P9a
>>488
何かあった時止まればいいシステムばかりじゃないだろ
ペースメーカーとか原子炉とか
細かいことは知らんけど
昔、組み込み屋のおっさんが最初から1Mぐらい確保して
何かあったらそれを解放してどうにかするみたいなこと言ってた
知らんけど
2021/05/07(金) 18:25:34.58ID:xLSEaA6V
>>488
システムは単独で動いているわけではない。
カーネルがパニックすることがあって良いという前提で設計して、パニックしうる前提で運用できるならそれでも構わんのだが、
Linux のカーネルでパニックを許すなら今 Linux を基礎にしているあらゆるシステムの運用体制を見直さざるを得ない。

カーネルパニックが絶対に駄目というわけじゃないんだ。
(もちろん発生しないに越したことは無いが。)
Linux では起こさないという前提に皆が従っているので変えられないという話なんだよ。
2021/05/07(金) 18:53:57.67ID:XbWp/RIC
割り込みが飛んでくる環境で例外なんか扱おうとしたら普通に死ぬだろ
2021/05/07(金) 19:12:04.63ID:RYgnWswQ
>>488
失われる作業内容の範囲があるだろ。
クライアントOSのWindowsですらBSODで切れる奴が多かったんだから、サーバーOSでそんな考えが許されるはずがない。
494デフォルトの名無しさん
垢版 |
2021/05/07(金) 19:35:24.51ID:FlZ9PpDj
差し当たりRustの言語を広く浅く学習したいのですが、「実践Rustプログラミング入門」の言語部分(100ページ程度)が分量が少なめで気になっています
この本で大きく抜けている文法や機能ってありますか?
2021/05/07(金) 20:06:32.24ID:xz5IWUMT
>>494
The Bookと比べれば一目瞭然
2021/05/07(金) 20:11:06.98ID:8H8V34/d
>>493
サーバーOSのほうがクライアントOSよりクラッシュには寛容だぞ
サーバー側の開発したことないのかな?
2021/05/07(金) 20:22:58.56ID:fmyiQrUP
>>496
最近は仮想化&分散で寛容になっているの?
2021/05/07(金) 21:23:40.41ID:EDSX1EuR
>>494
最近の本だからasyncまであるし、そんなに大きな抜けはないかな
広く浅くならまぁいいんじゃないかと
もし細かい部分が気になったらthe bookで補完すればいい
2021/05/07(金) 21:36:25.19ID:7aFGtcIv
>>497
むしろchaos engineeringで積極的に落とす
2021/05/07(金) 21:52:45.82ID:Z7WMK8Ny
ペースメーカーとか原子炉とか、ノンストップシステムでは常に複数動いている

Kubernetes などでは、ネットワーク分断に備えて、
正常な状態を多数決で決めるから、3, 5, 7 みたいな奇数を動かす

2対2とか偶数だと、どちらが正常か判断できないから
501500
垢版 |
2021/05/07(金) 22:00:09.91ID:Z7WMK8Ny
Netflix などは常に、システムを攻撃して落としたりして、テストしてる。
サイボウズのkintone は、毎日システムを破棄して、作り直しているとか

Kubernetes を使っているのかな?
502デフォルトの名無しさん
垢版 |
2021/05/08(土) 00:03:29.89ID:4agfhhA1
非常時の処理はカーネルの中心部が決めることで
枝葉のモジュールに決定権はないという話なんじゃないの?
2021/05/08(土) 00:07:56.54ID:OofXJFgO
レイヤーがめちゃくちゃな話しとるな。
OSみたいなハードウェアに直触るものとkubernetesみたいな分散管理のソフトじゃ
全然話が違う。
実際kubernetesはGC付きのgolangが実装だろ。
504500
垢版 |
2021/05/08(土) 01:02:28.51ID:P6P/nG6A
ノンストップシステムでは常に複数動く。
デュアルシステムとか

東証・富士通製のarrowhead は、3重だったかな?
それでも、ラックか何かの接続部分が落ちて、システムダウンした

ネットワークが集中している部分の故障が、最も怖い
2021/05/08(土) 08:40:46.17ID:e+sagIsH
>>492
なんでじゃ
割り込みルーチンに入るときの退避と出るときの復旧をきちんとやっていれば
割り込みルーチン以外の処理は割り込みルーチンが呼び出されることに対して透過的に動作できる
一部のハードなリアルタイムOSみたいに(多重割り込み前提で)割り込みルーチンから
通常コンテキストに直接「ジャンプ」してタスクをたたき起こすみたいなケースでもなければ割り込みの存在は
通常コンテキストで何をやろうと一切影響は無い
(もちろん割り込み禁止、みたいな直接割り込みに影響する命令を実行したら話は別だがそれは普通特権命令でOS以外は実行できな
 い

カーネルでの例外が問題なのは、
例外機構を持たないCならスタックポインタの調整で済むところを
デストラクタがある高級な言語だと例外が通過する際に自動変数として構築されていたオブジェクトを
例外が通過する関数全てについて解放してやらねばならない
(それでいて一方、自動変数として構築される可能性はあっても
 例外発生時に構築されていないオブジェクトに対しては何もしてはいけない
という点
これは例外を飛ばすだけでその経路全部が同一のコンパイラで書かれなければならないことを意味する
途中に手で書いたアセンブラのルーチンなどあろうものならスタックをぶち壊してハードウェアの例外でいきなり
落ちるということになってそんなことがOS内で起きたら計算機上の資源の安全が担保されない。
OSとしては失格である
2021/05/08(土) 08:53:39.11ID:e+sagIsH
、と思ったが
よく考えたら「手で書いたアセンブラのルーチン」があったらコンパイラはそれを知らない関数としてスタックポインタの調整以外のことを
しなかったら良いのかorz、
ここは「例外通過時にC++や異なるベンダーのRustコンパイラみたいな例外を捕捉する関数をコンパイルいたRustコンパイラが預かり知らない
巻き戻し処理が必要なルーチン」があったら、ということに訂正
507デフォルトの名無しさん
垢版 |
2021/05/08(土) 09:44:38.32ID:9PfSgf27
なんだこいつ
IQ64だな
2021/05/08(土) 10:15:07.28ID:e+sagIsH
IQは関係無いやろうがギギギギギ、
2021/05/08(土) 11:11:59.29ID:52U5aUmg
JAVAみたいな言語があるからnewしたまま放ったらかしでメモリ管理もろくに出来ない馬鹿で溢れかえって居るんだよな
2021/05/08(土) 11:36:05.31ID:jLEsHVNz
ついさっき知ったけど、new() はT だけじゃなく Result<T> を返していいんだな
511デフォルトの名無しさん
垢版 |
2021/05/08(土) 12:01:48.48ID:9PfSgf27
newはシンタックスじゃなくてただの慣例だからね
慣例ではResultを返すのはお作法に反するはず
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に脆弱性、アップデートや回避策を
2021/05/08(土) 12:14:25.93ID:lGQPC/Vw
>>509
因果関係が逆で、
頭が悪くてその程度ももともと出来ない人は昔はCやC++でプログラムできなかった
がVBやJavaやC#やJSやPythonやRubyではできた。
2021/05/08(土) 13:11:23.63ID:RJ95z4qm
>>511
newとかfromでResult返すのたまに見かけるけど
どうするのがおすすめなの?
try_newとかtry_fromにするのが良いのかな
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.
2021/05/08(土) 14:30:50.83ID:yMDwHl+j
手動でスタックポインタの調整ってバグや脆弱性の温床じゃね?
2021/05/08(土) 17:15:39.08ID:3vrEhaHR
医療機器や原発の制御システムとかが不意にリセットしないとか思っている時点で
組み込みとか高信頼性システムとかを全く知らないんだなって思う
ああいうのは最悪暴走したらリセットして最低限の機能は提供出来るように
作るのが基本だからね。そうしないと想定外の事態がおきた時に詰む
2021/05/08(土) 17:18:46.34ID:jLEsHVNz
そんなコーナーケースの為に俺たちの使い心地が悪くなるようなら耐えられないな
2021/05/08(土) 17:23:48.71ID://zoyCL6
暴走した場合にでもうてる手札を用意しておくってのと、
暴走しないように細部まで検証しておくってのは両立する話
2021/05/08(土) 17:27:07.74ID:QshNNe4V
いうほどコーナーケースってほどでもないだろ。
割と考慮されて当然のケースだわ。
まあlinux単体がその品質を担保できてるとも思わんけど。
2021/05/08(土) 17:33:15.67ID:3vrEhaHR
原子力関係だけでなく航空機や宇宙機もだが制御不能になるのが一番ヤバイんで
バグ出しは常識的な範囲で行って、あとはリカバリ系に注力した方がシステムの信頼性は向上する
歴史的に見ても事故るシステムの多くはこの辺をガバっている事が多いし
2021/05/08(土) 17:57:46.72ID:e+sagIsH
別に
ハイテク旅客機が落ちるのは自動制御と手動操縦のモード切替仕様を
パイロットが熟知しておらず緊急時に操縦桿を奪い合う格闘になったから
であってソフトは仕様通りだった
『ハイテク飛行機はなぜ落ちるか』(ブルーバックス)のインシデントの数々を見たらワカル

原子炉の制御系はそもそも暴走させないように金かけて形式検証する

人間が本気になったらどんだけバグをなくすために金と手間を掛けられるかというと
スペースシャトルのSSMEの制御装置のソフトがどんだけ徹底したデバッグが行われたかを見たらワカル
2021/05/08(土) 18:17:53.56ID:57+jEKOs
>>523
人間が使う物であればUIも当然システムに含まれる
判りにくいUIは良いシステムとは言えない

ソユーズや神舟はADA使ったりしていないけど
スペースシャトルより死人は少ない。米式が唯一の正解とは限らない
むしろスペースシャトルはシステム設計に失敗した例だろ
2021/05/08(土) 18:22:37.13ID:e+sagIsH
UIの仕様バグと>>518が言っている暴走する系のバグは話がちげう
2021/05/08(土) 18:36:29.80ID:57+jEKOs
組み込み機器でも多くのケースで不測の事態に備えてウォッチドックタイマを使うよね
トリガを何にするかやリセット時に何をするかは設計手腕が問われるところだけど
2021/05/08(土) 19:38:20.73ID:RJ95z4qm
>>516
fn new() -> Result<Self, T> は警告出ないよ
2021/05/08(土) 19:42:36.17ID:PnHrKWCk
newでResult返すのはいいけどfromは駄目だろ
というかFrom trait実装しろ
2021/05/08(土) 19:46:07.47ID:RJ95z4qm
>>528
そもそも impl From<T> Result<Foo, E> はcoherenceの関係でエラーになるよね
Intoはできるけど

FromStr なり TryFrom を使うべきというのはそう
2021/05/08(土) 20:23:33.19ID:jLEsHVNz
>>527
そりゃ Result はそこに書いてある a type that contains Self だからね
2021/05/08(土) 21:10:37.46ID:vIQ3GRO1
cのコードをrustに変換してくれるライブラリってありませんか?
2021/05/08(土) 22:23:50.74ID:8Oybw0Jl
>>531
c2rust
2021/05/09(日) 12:16:13.70ID:RMo+m9mc
その場合誰がRustコンパイラと戦うんじゃ……
2021/05/09(日) 13:34:11.17ID:DdW1Qm5g
1.52来てたのね
535デフォルトの名無しさん
垢版 |
2021/05/09(日) 23:13:05.64ID:T2j6cCMq
例外処理って何が有難いの?Cでプログラム書いてて例外がなくて困ったことないんだけど
もしかしてただのシンタックスシュガー?
2021/05/09(日) 23:31:00.87ID:LUIc58fP
戻り値の設定に近いものを一箇所にまとめられる。
2021/05/10(月) 00:03:43.87ID:sciUqTyU
どのレベルの話?
初心者の質問だとすると、関数の失敗を成功と区別するため。
戻り値で区別するんでなくて仕組みで。
2021/05/10(月) 00:10:05.03ID:EWDopcLj
例外の存在意義が分からない
戻り値で判別する方が可読性も高いし何も不足を感じない
2021/05/10(月) 00:21:25.87ID:giJ6lOgz
>>538
スレチ
2021/05/10(月) 07:17:37.24ID:aMiH/GVN
fileへのwriteとか毎行エラーチェック入るのしんどい
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文を使わなくてもそれが出来るようになる
ことが例外処理の一つのメリット。
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分がそんなに分かりにくいわけではない。
2021/05/10(月) 10:13:54.77ID:Pi5UB1M6
そういやCで bail: ラベルが多用されてたなーっていうのを
anyhowクレートの bail! マクロで思い出した
2021/05/10(月) 10:16:15.81ID:pIvV80n0
>>541,542
クソスレチ
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;
}
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;
のようなもの。
2021/05/10(月) 10:40:58.67ID:u82ImyiI
後藤さんいい加減にしてくださいよ…
2021/05/10(月) 13:07:54.71ID:H09R880S
Linuxや*BSDなどのカーネルは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があるかもしれませんが知りません)
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命令にしかならない事をいつまでもグチグチ言うのは悪い癖です
2021/05/10(月) 15:15:38.71ID:ro06Xyvc
>>550
後半、BASIC言語を振り返ってみると、ラベルの無いgoto文はむしろラベルありより綺麗に書けていた。
gosubはラベル方式の方が良かったが。
Cのgotoはラベルが必須なのでラベルが浮いてしまって嫌われているという説がある位。
2021/05/10(月) 15:18:53.59ID:ro06Xyvc
例外処理の問題点は、
try {
 f1();
 ・・・
 f2();
 ・・・
 f3();
 ・・・
 f4();
 ・・・
}
とtryブロックの中に沢山の関数呼び出しが有った場合、コード上ではどこでも例外が
起きる可能性を捨てきれないため逆に危険な可能性を排除しにくいことがある。
例えば、fputc()やfwrite()などで例外が起きることが分かっているならそれはそれで
良いが、全く関係のないf1, f2, f3, f4でもどれかは例外が起きる可能性があるなら
非常にプログラミングしにくい。
2021/05/10(月) 15:21:55.24ID:ro06Xyvc
>>551
例えば、BASICでは以下の様な感じになるので、ラベルが無い事でむしろすっきり
見易かった。gosub文はまた別でいまの関数の様な感じで名前が付いている方が
分かり易かった。これは経験を積まないと理解しにくいかも知れない。
100 if xxx = yyy goto 120
110 ・・・
120 ・・・
2021/05/10(月) 18:35:05.49ID:mFjZyrFq
>>548
構造化の無い暗黒時代に戻りたくないわ。

制御構文と構造化設計を破壊するぐらいならgoto使わないほうがマシ。破壊しない程度だったら許容できるかね。
2021/05/10(月) 18:45:12.97ID:QB4+qLHE
Rustは学習コスト高いって言われてるけど
Scala辺りと比べても難しいですか?
2021/05/10(月) 19:40:11.34ID:RQLzh3xR
>>555
別に特別難しいわけではないと思う
いろんな言語からパクってきてる要素が多くて、これまで一つの言語しか使ったことない人は学ぶべきことが多いってだけで
ScalaとC++くらい経験あれば余裕だろう
2021/05/10(月) 21:15:30.50ID:aMiH/GVN
コンパイラの文脈解析がこんだけ普及したのだから
safe gotoが存在するべきだ
558デフォルトの名無しさん
垢版 |
2021/05/10(月) 21:21:46.54ID:10iSv1/R
言語自体よりも、情報技術の基礎が要求されるんじゃないの
2021/05/10(月) 21:38:27.66ID:+CGjcQmG
>>555
やってみるのが一番早いよ
https://ideone.com/
こーいうところを使うとPC側にコンパイラとか用意せずに試せる
2021/05/10(月) 23:10:53.18ID:Ai0jiWQm
>>559
>>1にもあるけどhttps://play.rust-lang.orgのほうがいろいろ充実してる
てかideoneは1.33.0とかなのか、結構古いね
2021/05/10(月) 23:22:34.42ID:rt96Jr4B
playground、いつのまにか以前書いたコードが残るようになっててなんかうざったいんだけど、
初期のhello worldの状態に戻すのってどうやるの?(クッキー削除とかはなしで
2021/05/10(月) 23:29:40.57ID:4UvCiOpM
んな面倒なことするくらいならrustupインストールすりゃええやん
563デフォルトの名無しさん
垢版 |
2021/05/11(火) 00:01:56.34ID:bFiGc/cl
>>549
ファイルへの書き込みは返り値promise等でもらっておいて他の作業を進めて
どうしても書き込み完了していないと作業を先へ進めてはいけないところでようやくawait等することで
例外処理も遅延(手続き的な後ろ化と多段時の上位化)ができますよね

あとOSカーネル内の話は
例外と割り込みをごっちゃにしているように見えます
いずれにせよカーネル内ではtry例外使わずとも多段にエラー返り値を返していけばいいだけでしょう
エラー割り込み時もメモリ不足もシステムコールならエラー値返すわけですし
2021/05/11(火) 02:56:09.45ID:sf6ddr3r
>>555
Rust はそれほど難しいというわけでもないと思う。
C に ML 風の型システムを付けたって程度。

普通のプログラマにとって目新しいと言えるのはライフタイムの概念くらい。
でもそのひとつが馴染み無さ過ぎるというか、
他の言語では意識せずに済まさせようとしてきたところを
あえて露骨に管理しようとしてるところがしんどいとは感じるかもね。
2021/05/11(火) 03:24:21.67ID:BXZYJdJz
>>564
Rustのライフタイムは、鶏と卵の関係の様な部分で言語の動作が分からない。
どっちがどっちに影響を与えているのかの部分が。
自動判定の仕組みも一部だけ説明されていて一般法則が書いておらず、その場しのぎ的な言語仕様なのかもしれない。
2021/05/11(火) 04:47:35.34ID:+XHXxVLE
non lexical lifetimeでググれば詳細な仕様出てくるだろ
2021/05/11(火) 05:08:47.84ID:BXZYJdJz
>>566
出てこないと思うが。
568デフォルトの名無しさん
垢版 |
2021/05/11(火) 08:24:36.99ID:hJ8vQWaq
>>561

通りすがりですが、保存せずにただ試すだけなら

1.シークレットモードで新規タブ
2.playgroundのサイトを開く(ブックマーク登録からとか)
3.コード入力かコピペ作業

でどうでしょうか?
2021/05/11(火) 10:55:34.68ID:nxCZKmfr
>>567
nll rfcで検索したら出てくるよ
2021/05/11(火) 12:37:05.27ID:BXZYJdJz
>>569
そこには例が書かれてるだけで、数学みたいな意味でのちゃんとした厳密仕様は書いてないと思うんだよ。
Rustのライフタイムは数学規則のように機械的にパターンで処理できるような一般化された規則にはなってないという意味において。
2021/05/11(火) 12:42:48.49ID:yczyG8TY
厳密な仕様があるのは理想だけど、規格化された言語ですら数学的に厳密な仕様なんて存在しないしな
最終的にはCoqのソースコードで示される、とかはあるかもしれないが
2021/05/11(火) 12:47:18.80ID:BXZYJdJz
>>571
CやC++は数学的なパターンで処理できるようになってる。
そこにヒューリスティックなものは入ってない。
2021/05/11(火) 12:55:41.33ID:r1e7nJBc
the abstract syntax tree でのライフタイムの解析から
the control-flow graph でのライフタイムの解析にしたって言ってるから
かなりマシン語に近いとこで判定してるってことだわな。
ここにいる奴に聞くだけ無駄w
2021/05/11(火) 18:36:37.89ID:efUOVNNI
>>571
純lispくらいかね。
あるいはBrainfuckとか。
2021/05/11(火) 18:56:14.78ID:jWdOrz94
issue #25860って未だに解決されてないんだよね?
行きあたりばったりでライフタイム仕様決めてきた結果w
2021/05/11(火) 19:03:56.93ID:wl2jzTgT
Rustと原子力発電は人類には早すぎたんや…
2021/05/11(火) 19:52:59.74ID:8+nUEbRM
Rust嫌う人ってなんでみんな #25860 の話するのって言われてんぞ
2021/05/11(火) 22:03:42.47ID:1AWmjfgF
>>576
太陽光発電は、ある意味原子力発電と言えるのではないだろうか。
2021/05/12(水) 08:51:30.06ID:1N4enQMj
Rust 2021 Editionは10月リリース予定

https://blog.rust-lang.org/2021/05/11/edition-2021.html
2021/05/12(水) 10:38:41.98ID:qFi3vx5o
1.56.0からか
2021/05/12(水) 10:40:17.60ID:1N4enQMj
2021 Edition ざっと読んでみたけど、次の2点以外は些末な変更だな

for e in [1, 2, 3] {}
がエラーにならなくなる
(IntoIterator for arrays)

クロージャーが構造体をフィールド単位でキャプチャーするようになる
(Disjoint capture in closures)
2021/05/12(水) 21:45:20.66ID:rLfxFtSp
2018で勉強してますが仕様変わりますか?
2021/05/12(水) 22:08:40.92ID:fyx4mRuh
https://www.google.com/amp/s/japan.zdnet.com/amp/article/35170513/

「Windows用Rust」のバージョン0.9がリリース

何か誤解を与えそうな記事タイトルだ
2021/05/13(木) 00:09:46.25ID:JmJXN960
リポジトリ名的にwindows-rsのが適語か?
2021/05/13(木) 00:34:31.53ID:hcgdol/O
>>582
マイナーチェンジだし2018も継続して使えるし特に問題ないよ
2021/05/13(木) 00:46:54.51ID:oO6nJ4P1
何年か前なら喜んでたんだけどな、どうしよ何の興味も沸かない
Docker触り始めた辺りからWindows用は趣味でも書かなくなってしまった…
587デフォルトの名無しさん
垢版 |
2021/05/13(木) 07:59:13.00ID:OSZsGS3x
>>583 多分windowsクレートの説明文のRust for Windowsの直訳だとは思うけどこれは誤解するわ
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あたりが適当
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況