Shiika/File等
Crystalの場合
これによって、libcがCrystalレベルから呼び出せるので、あとは.crで実装
案
現状
putsなどはsrc/corelib/*.rsで実装している
Rustのクロージャでメソッドを定義するAPIがあるので
といっても「Rustで書ける」わけではなく、「inkwellで書ける」ということ。このまま拡大するのはつらい
libのような仕組みを導入
たとえばlibSDLを触りたいとか考えるといずれは必要になる
が、その仕組みで標準ライブラリも実装するかは一考の余地がある
Note: ShiikaはCrystalと違い、Int64 Int32みたいなものがない
cons: Crystalのlibの仕様はけっこう複雑。言語仕様に組み込む必要はあるのだろうか?
本体とは別の言語にする(同じファイルに両方を混ぜられない)としたほうがすっきりしないかな
TODO: Rubyのffiを調査
Rustで書く
Rustで実装しオブジェクトファイルにしたものをリンクするような
pros: Rustの標準ライブラリはWindows等でも動くので、そこにフリーライドできる
Rustで書いたものをShiikaのクラス/メソッドとしてexposeする機能は必要
これって上記の「libのような仕組み」と同じ?
Rustで書くとして:
skで書けるものはbuiltin/file.skで書きたい
そこからRustで書いた関数を呼び出すイメージ
関数名はどんな感じか
shiika_file_openみたいな?
データ構造はどんな感じか
RustからShiika objectを触るにはどうすればいいか
RustのFileオブジェクトのGC
2021-04-24
たとえばDir.entries(path: String) -> Array<String>を実装するとする
shiika build_corelibでコンパイルできてほしい
Rustのコードを.bcにするのってどうやるんだろ
これ 見るとno_mangle + extern "C"で関数名を指定してるな core見るとcargo buildして生成されたlibcore.aを使うのかな?