Nim 1.6.0 programlama dilinin piyasaya sürülmesi

Bir yıllık geliştirme sürecinin ardından, statik yazım kullanan ve Pascal, C++, Python ve Lisp göz önünde bulundurularak oluşturulan sistem programlama dili Nim 1.6'nın sürümü yayınlandı. Nim kaynak kodu bir C, C++ veya JavaScript temsilinde derlenir. Daha sonra, ortaya çıkan C/C++ kodu, mevcut herhangi bir derleyici (clang, gcc, icc, Visual C++) kullanılarak yürütülebilir bir dosya halinde derlenir; bu, çalıştırma maliyetlerini hesaba katmazsanız, C'ye yakın bir performans elde etmenizi sağlar. çöp toplayıcı. Python'a benzer şekilde Nim, blok ayırıcı olarak girintiyi kullanır. Etki alanına özgü diller (DSL'ler) oluşturmaya yönelik metaprogramlama araçları ve yetenekleri desteklenir. Proje kodu MIT lisansı altında sağlanmaktadır.

Yeni sürümdeki dikkate değer değişiklikler şunları içerir:

  • Yineleyiciler için bir tür uygulamasıyla yinelenebilir[T] sınıfı eklendi. şablon toplamı[T](a: yinelenebilir[T]): T = var sonuç: ai için T a: sonuç += ai sonuç iddia toplamı(iota(3)) == 0 + 1 + 2 # veya 'iota( 3).toplam'
  • Efektlerin seçici olarak uygulanması için ".fectsOf" ek açıklamalarına deneysel destek eklendi. tanımlandığında(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.fectsOf: cmp. }
  • Yalnızca genel değil, aynı zamanda özel simgeleri de içe aktarmanıza olanak tanıyan yeni bir içe aktarma sözdizimi "import foo {.all.}" önerildi. Nesnelerin özel alanlarına erişmek için std/importutils modülü ve PrivateAccess API eklenmiştir. sistem {.tümü.}'den sistem2 olarak içe aktar nil echo system2.ThisIsSystem içe aktar os {.tümü.} echo garipTarget
  • Dinamik alanları uygulamak için kullanılabilecek nokta operatörleri için deneysel destek eklendi. import std/json şablonu '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} iddia j.?a1.?a2.getInt == 10
  • Blok bağımsız değişkenlerinde ek parametreler belirtilebilir. şablon fn(a = 1, b = 2, gövde1, gövde2) = atma fn(a = 1): bar1 do: bar2
  • Kullanıcı tanımlı değişmez değerlere yönelik destek uygulandı (örneğin, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} iddia 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Derleyici, Nim komutlarını komut satırından doğrudan çalıştırmak için "--eval:cmd" komutunu uygular; örneğin 'nim -eval:"echo 1"'.
  • Nimscript arka ucu için kendi uzantılarınızı oluşturma desteği sağlandı.
  • Hata mesajları, hatayla ilişkili bağlamı gösterecek şekilde büyük ölçüde genişletildi. Özel derleyici uyarıları uygulandı.
  • "--gc:arc" ve "--gc:orc" çöp toplayıcılarının performansı önemli ölçüde iyileştirildi.
  • Tüm arka uçlar, tam sayıları ve kayan nokta sayılarını ayrıştırmaya yönelik kodun doğruluğunu ve performansını iyileştirmiştir.
  • JS, VM ve nimscript arka uçlarının daha önce yalnızca C arka ucuyla çalışan modüllerle (örneğin std/prelude modülü) iyileştirilmiş uyumluluğu. Stdlib modüllerinin C, JS ve VM arka uçlarıyla test edilmesi sağlandı.
  • Apple Silicon/M1 çipi, 32 bit RISC-V, armv8l ve CROSSOS sistemleri için destek eklendi.
  • Std/jsbigints, std/tempfiles ve std/sysrand modülleri eklendi. Sistem, matematik, rastgele, json, jsonutils, os, typetraits, sarmanils, listeler ve hash modüllerinde önemli iyileştirmeler yapıldı.

Kaynak: opennet.ru

Yorum ekle