久々のネタ更新(さらに久々の lctags 更新)

github に上げている個人的なツールの中で、 スターの付いている数少ないプロジェクトの1つである lctags。 これを久し振りに更新した。 更新内容は以下の通り。 docker による環境構築対応 C++ の auto 型推論対応 libclang15 対応 暫くノーメンテだった lctags を、このタイミングで更新したのは、 イマドキの C++ に使うには色々と不備があった為。 仕事で新しいプロジェクトに入り、そこで C++ をメインで利用していたので、 ソースを読む補助ツールとして lctags を導入しよう

monaco editor に自作言語拡張(インデント、補完、syntax エラー)を登録する

次の 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 のセルフホストビルド時間と GOMAXPROCS

LuneScript のセルフホストビルド時間が1秒を切れない問題。 GOMAXPROCS を設定すれば、もしかしたら簡単に短縮できるのではないか? と思って GOMAXPROCS を 1 〜 11 まで変えてみた。 その結果が次の図。 この図を見ると、GOMAXPROCS を上げるごとに、僅かにビルド時間(real time)が下っている。 一方で、 real time の下げ幅よりも、 並列処理の合計時間(user time)の上げ幅の方が大きくなってしまっている。 今は 6 コアの Ryzen 3600 使っていて、 次の候

LuneScript のコレクション側を Go の generics を利用するように変更

<../../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 の generics パフォーマンスがもの凄く改善されていた

以前 Golang 1.19.2 の generics のパフォーマンスを計測したところ、 generics を使ったケースと、自前で any からキャストするケースを比較すると、 なぜか自前で any からキャストする方が速くなるという謎の現象が発生していました。 前回の結果はここ。 ../../2022/2022-10-15-go-generics/ go のバージョンが 1.20 に上ったので、 再度同じテストをして確認してみます。 確認方法 テストするコードは前回と全く同じものを使います。 このコードを go の 1.19.2 と 1.20 でビルドし、実行結果を比較します。 実行結果 実行結