次の URL で提供している LuneScript playground 環境のエディタを、 シンプルな textarea からモダンな monaco editor に変更しました。 <https://ifritjp.github.io/LuneScript-webFront/lnsc_web_frontend/for_wasm/> 今回のネタは、monaco editor に独自言語の次の機能を追加する方法についてです。 インデント調整 コード補完 syntax エラー表示 monaco editor monaco editor は、 vscode のエディタ・コアです。 <https://microsoft.github.io/monaco-editor/> web 上で動作する高機能エディタには、 monaco editor とは別に Ace もありますが、 今回は monaco editor の方を採用しました。 その理由は、 近い将来的に vscode 用の LuneScript extension を作成するときに、 monaco editor を知っていた方
LuneScript のセルフホストビルド時間が1秒を切れない問題。 GOMAXPROCS を設定すれば、もしかしたら簡単に短縮できるのではないか? と思って GOMAXPROCS を 1 〜 11 まで変えてみた。 その結果が次の図。 この図を見ると、GOMAXPROCS を上げるごとに、僅かにビルド時間(real time)が下っている。 一方で、 real time の下げ幅よりも、 並列処理の合計時間(user time)の上げ幅の方が大きくなってしまっている。 今は 6 コアの Ryzen 3600 使っていて、 次の候
<../../2023/2023-02-11-go-generics2/> 前回の記事で書いた通り、 go の generics のパフォーマンスが向上したため、 LuneScript の v1.6.0 で go の generics を利用するように対応しました。 なお、現状は collection 型の対応に限定しています。 LuneScript で、新しくクラスで定義した generics は、従来通りの対応です。 詳しくは以下を参照。 <https://ifritjp.github.io/documents/lunescript/generics-go/> なお、この対応前と対応後では、 LuneScript のパフォーマンスはほとんど誤差レベルの差しかありませんでした。。。 なので、現状は積極的に使っていくモノではないです。 まぁ、でも今回の対応で既存バ
以前 Golang 1.19.2 の generics のパフォーマンスを計測したところ、 generics を使ったケースと、自前で any からキャストするケースを比較すると、 なぜか自前で any からキャストする方が速くなるという謎の現象が発生していました。 前回の結果はここ。 ../../2022/2022-10-15-go-generics/ go のバージョンが 1.20 に上ったので、 再度同じテストをして確認してみます。 確認方法 テストするコードは前回と全く同じものを使います。 このコードを go の 1.19.2 と 1.20 でビルドし、実行結果を比較します。 実行結果 実行結
LuneScript の v1.5.3 からタプルを対応している。 このタプルの go 実装についてパフォーマンスを調べた内容を載せておく。 LuneScript のタプルの go 変換初期実装 ここでは、LuneScript のタプルを go に変換した際に、 どのような実装になっているかを説明する。 LuneScript で次のようなタプル (int と str のペア) を定義した場合、 (int,str) go では次の型として扱う。 []any つまり、タプルの各要素の型情報は一旦 any に丸め、 タプルから値を取得する際に型変換を行なう。 例えば次の LuneScript