前回から引き続き 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リストを順次潰して
GCP から「Go 1.11 は使えなくなるから Go 1.13 にして」という通知があったので、 忘れないうちに Go 1.13 にして deploy をしたら、次のエラーが出た。 ERROR: (gcloud.functions.deploy) OperationError: code=13, message=Build failed: go mod: -require=xxxxxx/hoge/foo@v0.0.0: invalid path: malformed module path "xxxxxx/hoge/foo": missing dot in first path element; Error ID: 3182a79f どうやら、モジュールの先頭ディレクトリは FQDN の形式しないと NG になったようだ。 いままでは . を含まない適当な名前にしてたんだが、 「xxxxxx/hoge/foo の xxxxxx に . が含まれてない == FQDN ではない」、 ということで NG っぽい。 xxxxxx を github pages の自分の
先日、 Google 翻訳で lunescript が固有名詞として認識された可能性について ネタにしたが、 どうやら本当に lunescript が固有名詞として認識されたのではないかと思われる。 というのも、 google の検索バーに lunesc まで入力すると、 上のように lunescript が候補に挙げられる。 google の単語として登録されたからといって、 LuneScript の認知度が上った訳でもないが、何となく嬉しい。 なお、 lunescript を検索した際の関連ワードは次の通り。 ちゃんと lua を認識している。 念のため、次の状態で確認している
イマドキは少数派だと思うが、 PC に ubuntu と windows のデュアルブートを設定している。 さらに面倒なことに、 windows は BitLocker で暗号化 & PIN 認証を設定している。 そして、この状態で ubuntu を apt upgrade したら、 何故か windows ブート時の BitLocker の PIN 認証が失敗するようになった。 PIN を間違えているはずはないのだが、何度やっても PIN 認証が通らない。 しかたがないので、 BitLocker の回復キーを入力したところ問題なく起動した。 そういえば ubuntu の apt upgrade 実行時、grub の更新が掛った。 その際、
Go の勉強を兼て「これ」を Go で作っていたんだが、その時感じた Go の特徴をまとめておく。 Go は気軽に書けるのに、非常に高い実行パフォーマンスを出せる使い勝手の良い言語だと思う。 また、パッケージマネージャを言語自身に内蔵しているため、 拡張パッケージが揃っていて、今後さらにパッケージが充実して使える言語になるだろう。 こんな様なことは、もう誰もが書いていることだと思うので、 以降では、もう少し違った角度で Go につい
以前 lunescript の紹介記事を書いている時に、 lunescript の日本語訳がふと気になったんで調べていたんだが、 その時の Google 翻訳の結果が衝撃的だった。 <https://ifritjp.github.io/documents/lunescript/tutorial1/#headline-3> で、久し振りに Google 翻訳で lunescript を翻訳してみた。 その結果は次の通り。 めでたく lunescript の日本語訳が lunescript になった。 これは、 LuneScript が Google に固有名詞として認識されたということだろうか? それとも、該当する単語が登録されていないから、 とりあえずそのまま表示しているだけなんだろうか?