Pagpagawas sa Nim 1.6.0 programming language

Human sa usa ka tuig nga pag-uswag, ang pagpagawas sa sistema sa programming language nga Nim 1.6 gimantala, nga naggamit sa static nga pag-type ug gimugna uban ang usa ka mata sa Pascal, C ++, Python ug Lisp. Ang source code sa Nim gihugpong ngadto sa representasyon sa C, C++, o JavaScript. Pagkahuman, ang resulta nga C/C++ code gihugpong sa usa ka executable file gamit ang bisan unsang magamit nga compiler (clang, gcc, icc, Visual C++), nga nagtugot kanimo nga makab-ot ang pasundayag duol sa C, kung wala nimo tagda ang gasto sa pagpadagan. ang tigkolekta sa basura. Sama sa Python, gigamit ni Nim ang indentation isip block delimiters. Gisuportahan ang mga himan ug kapabilidad sa metaprogramming alang sa paghimo sa mga pinulongan nga piho sa domain (DSLs). Ang code sa proyekto gihatag ubos sa lisensya sa MIT.

Ang mga bantog nga pagbag-o sa bag-ong pagpagawas naglakip sa:

  • Gidugang ang iterable [T] nga klase nga adunay usa ka tipo nga pagpatuman alang sa mga iterator. template sum[T](a: iterable[T]): T = var resulta: T para sa ai sa usa ka: resulta += ai result assert sum(iota(3)) == 0 + 1 + 2 # or 'iota( 3).sum'
  • Gidugang ang eksperimento nga suporta alang sa ".effectsOf" nga mga anotasyon alang sa pinili nga pagpadapat sa mga epekto. kung gipasabot(nimHasEffectsOf): {.experimental: "strictEffects".} lain pa: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Usa ka bag-ong import syntax nga "import foo {.all.}" ang gisugyot, nga nagtugot kanimo sa pag-import dili lamang sa publiko, apan usab sa mga pribadong simbolo. Aron ma-access ang pribadong mga natad sa mga butang, ang std/importutils module ug ang privateAccess API gidugang. gikan sa sistema {.all.} ingon system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Gidugang nga suporta sa eksperimento alang sa mga operator sa tuldok, nga magamit sa pagpatuman sa mga dinamikong natad. import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{β€œa1”: {β€œa2”: 10}} assert j.?a1.?a2.getInt == 10
  • Ang dugang nga mga parameter mahimong matino sa mga argumento sa block. template fn(a = 1, b = 2, body1, body2) = isalikway fn(a = 1): bar1 do: bar2
  • Gipatuman ang suporta alang sa mga literal nga gitakda sa user (pananglitan, "-128'bignum'"). function `'dako`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Gipatuman sa compiler ang β€œβ€”eval:cmd” nga sugo aron direktang ipadagan ang Nim commands gikan sa command line, pananglitan β€˜nim β€”eval:”echo 1β€³β€˜.
  • Naghatag suporta alang sa paghimo sa imong kaugalingon nga mga extension para sa nimscript backend.
  • Ang mga mensahe sa sayop gipalapdan pag-ayo aron ipakita ang konteksto nga nalangkit sa sayop. Gipatuman ang custom compiler nga mga pasidaan.
  • Mahinungdanon nga milambo ang performance sa "--gc:arc" ug "--gc:orc" nga mga tigkolekta sa basura.
  • Ang tanan nga mga backend nagpauswag sa katukma ug paghimo sa code alang sa pag-parse sa mga integer ug mga numero sa floating point.
  • Gipauswag nga pagkaangay sa JS, VM ug nimscript backend nga adunay mga module nga kaniadto nagtrabaho lamang sa C backend (pananglitan, ang std/prelude module). Ang pagsulay sa stdlib modules nga adunay C, JS ug VM backends natukod na.
  • Gidugang nga suporta alang sa Apple Silicon/M1 chip, 32-bit RISC-V, armv8l ug CROSSOS nga mga sistema.
  • Gidugang modules std/jsbigints, std/tempfiles ug std/sysrand. Mahinungdanon nga mga pag-uswag ang nahimo sa sistema, matematika, random, json, jsonutils, os, typetraits, wrapnils, mga lista ug mga modulo sa hash.

Source: opennet.ru

Idugang sa usa ka comment