オレオレ言語のこれまでと今後

公開:2019-02-19 05:48
更新:2020-02-15 04:37
カテゴリ:オレオレ言語,node.js,js,wasm

はや1年

2018年2月ころから作り始めた「オレオレ言語(sgl2)」は1年を経過したが、やはりストレートに成果物を作るというわけにはいかず、紆余曲折し中途半端なところで止まっているところである。

そもそも静的型付け言語のglslと動的型付けのJSとのデータのやり取りのオーバーヘッド(実装コスト&実行時の型変換のオーバーヘッド)が気になってしょうがないことや、コルーチンの言語サポートを動機としてオレオレ言語作りをはじめた。

S.F. Blog:キーワード「オレオレ言語」 のアーカイブ

紆余曲折は以下のTogetterにまとめてある。。

オレオレ言語を作る - Togetter

言語仕様をオリジナル感を強めたり、パーサーをpratt parserからpegに変えてみたり、glslに忠実実装しようとしたり、プリプロセッサをきちんと実装しようとして1年が経過したところである。

wasmが出てきたおかげでコンパイラが作れるようになったことやコンパイラの内部構造を知ることができたりと私としてはなかなか楽しい1年であったが。

今後とか

この1月くらいからあらためて「GPUとCPU間のやり取りをスムーズにする」言語仕様を考えていた。「オレオレ言語」の仕様をglslにできるだけ近づていけばやり取りはスムーズになるかなあと思ってた。けども今は「オレオレ言語」はglslの仕様からちょっと距離を置こうかなと思っている。

コンパイラはcpu向けの部分のコードはwasmを吐き(コンパイラ)、gpu向けの部分はglslを吐く(トランスパイラ)といういうふうにしようかなと思っている。そして構文はC-Likeであるが、オリジナルな要素を取り入れることにする。こうすることによってオリジナルな構文を入れてみたいという私の欲求を叶えることができる(笑)。

またプリプロセスは特別な構文をもつプリプロセッサを持つのではなく、オレオレ言語のサブセットで記述するようにしたいと考えている。言語のメタ・プログラミングを自身の言語で行うということだ。これ自体成り立つのかどうかよくわからないが、チャレンジしてみようと思う。おそらくはメタ記述のための特殊な構文が必要になってくると思われるが(型操作に関して)。

現状wasmモジュールはJSを経由しなければ利用できない。そしてwasmからDOMなどのリソースへのアクセス手段もない。そこはJSを経由してアクセスするようなランタイムも作らなくてはならない。このランタイム作りも骨が折れると思う。emscriptenはこのwasm <-> リソースへのブリッジ・コードがとても大きいが、今のwasmの仕様を考えると致し方ないと思う。これはいずれ直接リソースアクセスできるようになるようだが。

wasm自体については仕様が流動的だから、それについていくことになる。最近binaryenにSIMDのリファレンス実装が入ったようだから、それを使ってベクトル演算のコードを吐くようにしたいなあとか考えてワクワクしている。

とはいえ、私にはちょっと荷が重いが今年も楽しくオレオレ言語作りを進めよう。

sfpgmr/sgl2