Nim プログラミング言語リリース 1.6.0

1.6 年間の開発を経て、静的型付けを使用し、Pascal、C++、Python、Lisp を念頭に置いて作成されたシステム プログラミング言語 Nim XNUMX のリリースが公開されました。 Nim ソース コードは、C、C++、または JavaScript 表現にコンパイルされます。 その後、生成された C/C++ コードは、利用可能なコンパイラ (clang、gcc、icc、Visual C++) を使用して実行可能ファイルにコンパイルされます。これにより、実行コストを考慮しなければ、C に近いパフォーマンスを達成できます。ガベージコレクター。 Python と同様に、Nim はブロック区切り文字としてインデントを使用します。 メタプログラミング ツールとドメイン固有言語 (DSL) を作成する機能がサポートされています。 プロジェクト コードは MIT ライセンスに基づいて提供されます。

新しいリリースの注目すべき変更点は次のとおりです。

  • イテレータの型実装を備えた iterable[T] クラスを追加しました。 テンプレート sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai resultassert sum(iota(3)) == 0 + 1 + 2 # or 'iota( 3).合計'
  • 効果を選択的に適用するための「.EffectsOf」アノテーションの実験的サポートが追加されました。 定義時(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: EffectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.EffectsOf: cmp. }
  • 新しいインポート構文「import foo {.all.}」が提案されており、パブリック シンボルだけでなくプライベート シンボルもインポートできるようになります。 オブジェクトのプライベート フィールドにアクセスするために、std/importutils モジュールと privateAccess API が追加されました。 from system {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo奇妙なTarget
  • 動的フィールドの実装に使用できるドット演算子の実験的なサポートが追加されました。 import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} アサートj.?a1.?a2.getInt == 10
  • 追加のパラメーターをブロック引数で指定できます。 テンプレート fn(a = 1, b = 2, body1, body2) = 破棄 fn(a = 1): bar1 do: bar2
  • ユーザー定義リテラルのサポートが実装されました (たとえば、「-128'bignum'」)。 func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".}assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • コンパイラーは「--eval:cmd」コマンドを実装して、コマンドラインから Nim コマンドを直接実行します (例: 「nim -eval:"echo 1"」)。
  • nimscript バックエンド用の独自の拡張機能を作成するためのサポートが提供されました。
  • エラー メッセージが大幅に拡張され、エラーに関連するコンテキストが表示されます。 カスタム コンパイラの警告を実装しました。
  • 「--gc:arc」および「--gc:orc」ガベージ コレクターのパフォーマンスが大幅に向上しました。
  • すべてのバックエンドで、整数と浮動小数点数を解析するコードの精度とパフォーマンスが向上しました。
  • JS、VM、および nimscript バックエンドと、以前は C バックエンドでのみ動作していたモジュール (std/prelude モジュールなど) との互換性が向上しました。 C、JS、および VM バックエンドを使用した stdlib モジュールのテストが確立されました。
  • Apple Silicon/M1 チップ、32 ビット RISC-V、armv8l、および CROSSOS システムのサポートが追加されました。
  • モジュール std/jsbigints、std/tempfiles、std/sysrand を追加しました。 システム、数学、ランダム、json、jsonutils、os、typetraits、wrapnils、リスト、およびハッシュ モジュールに大幅な改善が加えられました。

出所: オープンネット.ru

コメントを追加します