定期ミートアップ14
前回 /prog-lang-sys-ja/yhara%2F20211114のあらすじ
Shiikaのcrateを分割した
lib/
shiika_core
shiika_ast
shiika_parser
skc_corelib
skc_hir
skc_ast2hir
skc_hir2ll
skc_rustlib
skc_corelibだけ残作業がある
今回の進捗
skc_corelibをRustで再実装した
https://github.com/shiika-lang/shiika/pull/317
苦労したところ
unsafe Rust
型が合っても全然動かないことがある(それはそう)
yhara (Yutaka HARA)さんはTwitterを使っています 「ああああああああ https://t.co/2OaRo1Vxop」 / Twitter
yhara (Yutaka HARA)さんはTwitterを使っています 「ふーむ、壊れてるのはArray#pushじゃないな。Array#[]の方だ。…わかった、capaとn_itemsがstructに無いじゃん。いろいろいじってるうちに変になってたのか。 https://t.co/LCOLEQMcsp」 / Twitter https://twitter.com/yhara/status/1464552130270810122
方針
yhara (Yutaka HARA)さんはTwitterを使っています 「@s_isshiki1969 これ、ちょっと考え直して、そもそもこれやらなくてすむ方向で検討中です(Shiika::Internal::Ptrっていうクラスがあったんですが、ArrayクラスをRustで実装すればそもそも要らなくなるかも)」 / Twitter https://twitter.com/yhara/status/1460865743260569601
と思ったが…
unbox_i8ptr
yhara (Yutaka HARA)さんはTwitterを使っています 「うーむ、alignじゃなくて型定義の方の問題かもしれない。%Aのような定義をしてたんだけど、Rustでstructにrepl(c)つけたやつは%Bのような謎の定義になるんだよな。C言語のABIって%Aじゃなく%Bなんですかね? https://t.co/MRiFnt97kR」 / Twitter
Why does Rust generate LLVM IR in an architecture-specific way and using empty arrays for mutable static variables? - Stack Overflow
https://stackoverflow.com/questions/59888944/why-does-rust-generate-llvm-ir-in-an-architecture-specific-way-and-using-empty-a
Drop alignment padding fields in type definitions in LLVM IR - compiler - Rust Internals
https://internals.rust-lang.org/t/drop-alignment-padding-fields-in-type-definitions-in-llvm-ir/11701
Tips
yhara (Yutaka HARA)さんはTwitterを使っています 「LLVMのptrtointってRustでできるのかな」 / Twitter
-> std::mem::transmute
Object#object_id
as u64でいいらしい
JSON5
使用例:https://github.com/shiika-lang/shiika/blob/crates2/lib/skc_rustlib/provided_methods.json5
https://json5.org/
JSONを少しだけ拡張したもの
コメント
trailing comma
JSONは手書きには向かない
その他の話題
型推論の論文を途中まで読んだ
質問
たとえばFileクラスをskc_rustlibで実装するとして
Fileクラスのオブジェクトがgcされたとき、ファイルは閉じられるのか?
=> 閉じられないと思われる
File.open(path)するときの処理
mem = GC_malloc(サイズ)
memにFile用のデータを入れる
GC_register_finalizer(mem, File用のfinalizer)