Nimの2.2.0がリリースされましたね。 前回は2024/07に2.0.8がリリースされたので、大体3ヶ月くらいですね。 Nim Blogはいつもチェックしているのですが、昔は月イチくらいでライブラリ紹介をしていたのですが、最近は専らバージョンアップですね…。 Nimの頻繁なリリースは嬉しいのですが、ライブラリ紹介が少ないのは残念です。まだまだNimユーザが少ないってことでしょうか。(むしろ、昔よりも減っている?)
Nim 2.2.0
リリースハイライト
このリリースでは、ジェネリクス、型記述(typedesc)、および静的型に関する多くの長年のコンパイラバグが修正され、これらの機能が実質的に安定しました。特に、ジェネリック型内の型や値に対する任意の式が、これまで特定のケースでのみ動作していたものが、今ではほぼ正常に機能します。このリリースは全体的にバグ修正に焦点を当てており、多くの他の問題も幅広く修正されています。このリリースでは、C++との相互運用性に関する改善が続けられています:
noInit
を型やフィールドで使用し、C++バックエンドでメンバ初期化子を無効にできるようになりました。- C++のカスタムコンストラクタ初期化子が追加されました。
member
を使用して、手続き(procedure)をC++型に関連付けることができます。- C++のコンストラクタは、新しいオブジェクトを作成するのではなく、既存の結果を再利用するようになりました。
- JavaScriptバックエンドは、クロージャとクロージャイテレータに対してラムダリフティングをサポートするようになりました。
メソッドは、
--experimental:vtables
オプションを使用してVTableに基づく実装をサポートするようになりました。メソッドは、その型が定義された同じモジュール内に制限されます。タプルのアンパッキング機能が強化されました:
- タプルのアンパッキング代入で、値を破棄するためにアンダースコア(
_
)を使用できるようになりました。
var a, c: int
(a, _, c) = (1, 2, 3)
- タプルのアンパッキング変数宣言で、タプル全体に対してのみ型アノテーションをサポートするようになりました。
let (a, b): (int, int) = (1, 2)
let (a, (b, c)): (byte, (float, cstring)) = (1, (2, "abc"))
ジェネリックルーチンやテンプレート内でシンボルキャプチャの問題に対処するため、実験的なスイッチ
--experimental:openSym
が追加されました。マクロ作成者向けに、新しいノード種類nnkOpenSym
が追加され、これを別途処理する必要があるかもしれません(nnkOpenSymChoice
に似ています)。詳細は完全な変更ログをご覧ください。Nim 2.2.0には、オプトインオプションとしてSATソルバーを導入するNimble 0.16.1が同梱されています。