前回から引き続き LuneScript のトランスコンパイル時間短縮を行なっています。 今回の時間短縮は以下の通りです。 改善前(lua) 改善後(go) 参考 (lua batch) 参考 (luajit) 20.65 sec 4.32 sec 21.90 sec 21.56 sec この表の通り、 (/ 20.65 4.32) 4.780092592592592 ≒ 478% 改善しています。 以降では、今回の LuneScript 性能向上の実現方法について説明します。 一括処理 従来は、複数ある .lns ファイルを一つずつ処理するために、 LuneScript をファイル数分実行していました。 今回は、複数ある .lns ファイル全てを 一回の LuneScript の起動で処理
LuneScript は Lua 向けのトランスコンパイラで、 LuneScript 自体も Lua 上で動作しています。 また、LuneScript は LuneScript 自体の処理を、 LuneScript で開発する所謂セルフホスティングを採用しています。 そのセルフホスティングしているコード規模は、右肩上がりで増大しています。 上記グラフは少し以前のもので、現在は 50Kline を突破しています。 コード規模が増えて一番気になるのは、やはりコンパイル時間です。 特に LuneScript は Lua で動作するため、 一般的なネイティブのコン
これまでの LuneScript のコード規模の推移を調べてみた。 これは単純に LuneScript をセルフホストしている .lns ファイルの行数をトータルした結果。 よって、コメントや空行等も入っている。 2020年前半はさぼってたけど、それ以外はコンスタントに成長している感じ。 参考までに、このグラフを作った gnuplot スクリプト。 1列目に YYYY-MM-DD の日付データ、2列目に行数データの dump.csv からデータをロードして、 codesize.svg を出力する。 1 2 3 4 5 6 7 8 9 10 11 12 file='dump' se g se xdata time se timefmt "%Y-%m-%d" se
emacs で snippet を管理するパッケージに yasnippet がある。 yasnippet はメジャーモード毎に snippet を登録しておき、 編集中のメジャーモードに合せて snippet を呼び出すことができる。 yasnippet に snippet を登録するには、 変数 yas-snippet-dirs で指定しているディレクトリ内に メジャーモード名のディレクトリを作成し、 そのメジャーモード名のディレクトリ内に snippet 情報を記述したファイルを置く。 これにより、 yasnippet のロード時、あるいは M-x yas-reload-all 実行時に、 snippet が yasnippet に登録される。 ここで問題がある。 説明した通り
LuneScript の開発を続けて約 2 年経過。 2年間ずっと開発し続けているわけではないけど、 かなりの時間を LuneScript の開発にあてている。 そんな訳で、今回は LuneScript の開発工数を概算してみる。 もちろん、作業時間の記録なんて面倒なことはしていないので、 あくまで概算である。 開発作業 LuneScript に限ったことではないが、 github で個人開発する際は、 だいたい次のように開発を進めている。 作業項目(TODOリスト)を doc/todo.org にリストアップする TODOリストを順次潰して