Nim basa programming release 1.6.0

Saatos sataun pamekaran, sékrési sistem basa pamrograman Nim 1.6, anu nganggo ngetik statik sareng diciptakeun kalayan pandangan Pascal, C ++, Python sareng Lisp. Kode sumber Nim disusun jadi representasi C, C ++, atawa JavaScript. Salajengna, kode C / C ++ anu dihasilkeun disusun kana file executable ngagunakeun sagala compiler sadia (clang, gcc, icc, Visual C ++), nu ngidinan Anjeun pikeun ngahontal kinerja deukeut C, lamun teu tumut kana akun biaya ngajalankeun. tukang mulung. Sarupa jeung Python, Nim ngagunakeun indentation salaku block delimiters. Alat sareng kamampuan metaprogramming pikeun nyiptakeun basa khusus domain (DSL) dirojong. Kodeu proyék disayogikeun dina lisénsi MIT.

Parobihan anu penting dina sékrési énggal kalebet:

  • Ditambahkeun kelas iterable [T] kalayan palaksanaan tipe pikeun iterator. jumlah template [T](a: iterable [T]): T = var hasil: T pikeun ai dina: hasil += ai hasil negeskeun jumlah (iota (3)) == 0 + 1 + 2 # atawa 'iota ( 3).jumlah'
  • Ditambahkeun rojongan eksperimen pikeun ".effectsOf" annotations pikeun selektif nerapkeun épék. lamun dihartikeun (nimHasEffectsOf): {.eksperimen: "strictEffects".} Sejenna: {.pragma: effectsOf.} proc mysort (s: seq; cmp: proc (a, b: T): int) {.effectsOf: cmp. }
  • Sintaksis impor anyar "import foo {.all.}" parantos diajukeun, ngamungkinkeun anjeun pikeun ngimpor henteu ngan ukur umum, tapi ogé simbol pribadi. Pikeun ngakses widang pribadi objék, modul std/importutils jeung privateAccess API geus ditambahkeun. ti sistem {.all.} salaku system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Ditambahkeun dukungan ékspérimén pikeun operator titik, anu tiasa dianggo pikeun ngalaksanakeun widang dinamis. impor std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] hayu j = %*{"a1": {"a2": 10}} negeskeun j.?a1.?a2.getInt == 10
  • Parameter tambahan tiasa ditetepkeun dina argumen blok. template fn(a = 1, b = 2, body1, body2) = piceun fn(a = 1): bar1 do: bar2
  • Rojongan pikeun literal anu ditetepkeun ku pangguna parantos dilaksanakeun (contona, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} negeskeun 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompiler ngalaksanakeun paréntah "--eval: cmd" pikeun langsung ngajalankeun paréntah Nim tina garis paréntah, contona 'nim -eval:"echo 1"'.
  • Nyadiakeun rojongan pikeun nyieun ekstensi anjeun sorangan pikeun backend nimscript.
  • Talatah kasalahan geus greatly dimekarkeun pikeun mintonkeun konteks pakait jeung kasalahan. Dilaksanakeun warnings kompiler custom.
  • Ngaronjatkeun kinerja sacara signifikan tina "--gc: arc" jeung "--gc: orc" tukang sampah.
  • Kabéh backends geus ningkat akurasi sarta kinerja kode pikeun parsing integer jeung angka floating titik.
  • Ningkat kasaluyuan JS, VM na nimscript backends kalawan modul nu saméméhna ukur gawé bareng C backend (Contona, std / modul prelude). Nguji modul stdlib sareng backends C, JS sareng VM parantos didamel.
  • Ditambahkeun dukungan pikeun chip Apple Silicon / M1, 32-bit RISC-V, armv8l sareng sistem CROSSOS.
  • Ditambahkeun modul std / jsbigints, std / tempfiles na std / sysrand. Perbaikan anu signifikan parantos dilakukeun pikeun sistem, math, acak, json, jsonutils, os, typetraits, wrapnils, daptar sareng modul hashes.

sumber: opennet.ru

Tambahkeun komentar