tootlog

Masanori Ogino 𓀁 [email protected]

Rust言語で使えてunsafeの外側ではRcが提供してくれるような保証を提供するトレーシングGCのスマートポインタを作るのは難しいという人々の談がいくつかあって、いつか眠たくないときに紹介したいと思っています

Masanori Ogino 𓀁 [email protected]

やりましょう。そして「Rustって型安全性とメモリ安全性は細かくチェックしてくれるけれど、プログラムの他の側面はやっぱりテストコード書かなきゃいけないんだよな……」と思い始めたらF*(FStar)やりましょう

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

裾 namachan10777

RustはやたらC++の影響っぽい構文あるけどMLの系譜は濃いと思うのでOCamlかSMLやりましょう

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

裾 namachan10777

多相なのでパラメータが出てこない方が不自然な気がするんですよね(Lifetimeじゃない型(伝われ)が多相な時もパラメータ増えるじゃないですか)あっでもstaticは多相って訳でもないや。これは型注釈って事で……

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

裾 namachan10777

確かに冗長と言えばそうだけど、<'a>と指定する方が本質的(に僕は思える)し(だって多相なので)、キモさもあまりないのでこっちかなあの気持ち

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

裾 namachan10777

完全にお気持ちですが僕としてはこちらのほうがちょっとキモい(sとtに主従っぽいのが出てくるので)

Masanori Ogino 𓀁 [email protected]

この両方とも事前に考えたのだけれども、先に現れる引数の識別子を特別扱いするというのが良い設計なのか疑問が残る、「出力のlifetimeはsとtのlifetimeの和」と「出力のlifetimeとsのlifetimeとtのlifetimeは同じ」は検査アルゴリズム上異なるような気がする、という反論がそれぞれあって採用しなかった

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

sksat sksat

その時は'(s,t)みたいに書けるとよろしいんじゃないでしょうかとか思ったけど,どうなんだろ

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

裾 namachan10777

s: & str, t: &'s strでいいと言う話も

Masanori Ogino 𓀁 [email protected]

ここでは、入力sのlifetimeと入力tのlifetimeはともに出力のlifetimeと同じでなければならないという関係

Masanori Ogino 𓀁 [email protected]

入力のlifetimeに関係がある場合というのは書きたかったものが
fn frob<'a>(s: &'a str, t: &'a str) -> &'a str;
だったという場合です

Masanori Ogino 𓀁 [email protected]

これは入力のlifetimeに関係があったりするとどうするんだというのがあり、あまり良くはなさそう

Masanori Ogino 𓀁 [email protected]

fn frob(s: &str, t: &str) -> &str;(lifetime省略不能)
を
fn frob<'a, 'b>(s: &'a str, t: &'b str) -> &'a str;
と書く代わりに
fn frob(s: str, t: str) -> &'s str;
みたいに書けたらどうか、ということでしょうか

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

sksat sksat

ンー戻り値の方に引数hogeと同じ区間やでみたいな書き方の方が短く済むのでは?という気持ちがあるが,パースめんどくなるか...

Masanori Ogino 𓀁 [email protected]

複数の参照が存在しうる後始末が必要なリソースを受け渡す機能が必要なときに、

・人がチェックして運用でカバーしたり、
・トレーシングGCで不要になったリソースをその内後始末したり、
・参照カウンタ(これもGC)で参照状況を都度書き留めることで不要になり次第後始末したり、

するのだけれども、GCでランタイムに状況監視せずともコードから静的に「このリソースが必要なのはこの範囲」と特定できる状況がある。
そこで、その限られた状況において、人手にも頼らずランタイムに状況監視するコストも払わず、後始末が無事つつがなく終わることを確かにするのがlifetime、という認識。

Masanori Ogino 𓀁 [email protected]

lifetimeをimplicitにしすぎるとかえって「この引数のlifetimeが短くてコンパイルが通らないがなぜそうなるのかわからない」という状況が増えるので、ある種の明らかな条件下でのみlifetimeを推論するようになっていると理解している

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago

sksat sksat

ンーなんとなくは分かったけどこれって明示的に書かないとあかんの

Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago
Masanori Ogino 𓀁 Masanori Ogino 𓀁 reblogged at 6 years ago