butterfly dream

FX自動取引のための時系列分析・信号処理・戦略ブログ

科学技術計算用プログラミング言語:Sci-Lispの自作(N日目):v0.1.0およびlispmeetupでの発表/今後の方針

chaploud-blog.hatenablog.com

Sci-Lisp自作のN日目です。途中で更新が途絶えかけていましたが、Sci-Lisp自体は毎日せっせとUpdateを続けていました。

github.com

v0.1.0

作りながら、Rustの勉強をしつつインタプリタの勉強をしていた状態で、現状の設計ではある種の限界を迎えました。 まず第一に、実行速度が圧倒的に遅い。単純にforループを107回すだけでも3.7秒かかります。(比較のため、Python250msで、10倍以上の差があります。) これは、値の評価や実行時環境からのシンボルの見つけ出しがメモリ・CPU向けに全く最適化されていないからであり、この壁を突破するにはバイトコードVMを用いたインタプリタにするしかありません。

そして第二に、まったく自己記述的でない(注1)です。100%Rustで書かれています。理想は、コアな部分ないし既存のクレートを最大限活用したい部分だけRustにし、他はSci-Lisp自身で自己記述的に拡張していくべきです。現状の設計では、そのような考慮は全くありません。

第三に、関数型・オブジェクト指向の設計があやふやです。このへんはまだ実装できていないのですが、そもそもこれらのパラダイムに対してどのような設計をすべきかの理解が乏しいです。

今後は、自己記述的で速度の速いマルチパラダイムな(大言壮語)言語に生まれ変わらせるべく、劇的な書き直しをしようと思っています。そのためにまず・・・(3セクション目に続く)

(注1)自己記述的というのは私が勢いで言ったもので厳密な用語ではないようです。なんかそういう雰囲気です。要するに言語をその言語自身で書くということを言いたかったのでした。

Shibuya Lisp lispmeetup #113 での発表

以下のスライドの内容で、発表しました。日ごろからXでお見掛けするつよいLisper/Clojurean達がいらっしゃって、大変刺激を受けました。(私の発表は57分ごろからです)

docs.google.com

他の方の発表内容は以下、コメントを添えて

  • @t-sin Lispの紹介 - 令和最新版
  • @chaploud 自作Lisp処理系:Sci-Lispの紹介
    • 割愛
  • @masatoi HyREPLの紹介(Hyの開発環境について)
    • ClojureのnREPLをHyに適用したHyREPLをメンテされている、いずれは私もSci-LispのLanguage Serverを作るつもりなので、大変参考になった
  • @lagenorhynque ClojureでのgRPC APIサーバ実装について
    • ClojureとgRPCをガシガシと使ったことがなかったので深くは理解できなかったが、Clojureの情報リソースが少ないなかPythonから処理をまねていると聞き、やはり開拓者の営みはそうだよなぁと感じた
  • @niyarin Coding-time meta programming
    • 機材トラブルにつき発表なし

初めてのShibuya Lisp参戦だったのですが、参加者の方からコメントをいただいたり、一気にGitHubリポジトリのスターが増えたりなど嬉しいことづくめでした。今後もぜひ参加したいです。

今後の方針ーWeb Assembly式VMスクリプト言語を作る&Juliaの仕様理解

上のスライドで、発表では時間の都合上省いたのですが、そもそもバイトコードVMを使う際、自分で独自の中間言語を定義するより広く知れ渡った形式を使うべきだよなぁと思い始めていました。 LLVMなどがまさにそれにあたるのですが、どうも規模がでかいうえにドキュメントが読みづらい。そこで、ばったり出会ったのがよく耳にはしていた、Web Assembly(wasm)です。WebとついているからてっきりRust等のコンパイル言語をブラウザで動かせる感じかなー?程度にしか思っていなかったのですが、実際には汎用アセンブリの定義であり、将来的にはあらゆるプラットフォームでそのまま実行できる共通形式(の可能性)であることが分かりました。しかも、wasmのテキスト表現であるwatはなんとS式そのものです。Lispが好きな私にとってはこれとない選択肢で、中間コード(wasm)生成までは自前のパーサー等で行い、その実行は外部クレートに頼ればいいのです。今のところ一番有名なwasmランタイムはwasmerのようです(Rust製)。

github.com

そして、wasmを知る副次的な作用として、プログラムは「これだけの命令セット」があれば実現できると知れることです。ちょっと言語化能力が足りずに申し訳ないのですが、スクリプト言語の高速なランタイムを作ろうとしたときに考えるべき事柄がもうすでにwasmには詰まっているということなのです。

さて、もう一つは、Juliaの仕様理解です。私はJuliaを学んだことがなかったのですが、Sci-Lispのターゲットとする科学技術計算をまさにターゲットとしているため、パク真似れるところは真似ていこうと思います。

Shibuya Lisp、オンライン参加もできるので遠方の方も参加できます。とにかく今日は刺激を受けました!また次回!