Tso tawm Nim 1.6.0 programming lus

Tom qab ib xyoos ntawm txoj kev loj hlob, qhov kev tso tawm ntawm qhov system programming lus Nim 1.6 tau luam tawm, uas siv cov ntawv zoo li qub thiab tau tsim nrog lub qhov muag ntawm Pascal, C ++, Python thiab Lisp. Nim qhov chaws tau muab tso ua ke rau hauv C, C ++, lossis JavaScript sawv cev. Tom qab ntawd, cov txiaj ntsig C / C ++ code tau muab tso ua ke rau hauv cov ntaub ntawv ua tiav siv txhua qhov muaj compiler (clang, gcc, icc, Visual C ++), uas tso cai rau koj ua tiav kev ua haujlwm ze rau C, yog tias koj tsis suav nrog cov nqi khiav. tus neeg khaws khib nyiab. Zoo ib yam li Python, Nim siv indentation raws li thaiv qhov sib cais. Metaprogramming cov cuab yeej thiab muaj peev xwm tsim cov hom lus tshwj xeeb (DSLs) tau txais kev txhawb nqa. Txoj haujlwm code yog muab nyob rau hauv daim ntawv tso cai MIT.

Cov kev hloov pauv tseem ceeb hauv qhov kev tso tawm tshiab suav nrog:

  • Ntxiv rau chav kawm iterable [T] nrog hom kev siv rau iterators. template sum[T](a: iterable[T]): T = var result: T for ai in a: result += ai result assert sum(iota(3)) == 0 + 1 + 2 # or 'iota( 3) sum'
  • Ntxiv kev sim txhawb rau ".effectsOf" annotations rau xaiv siv cov teebmeem. when defined(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Ib tug tshiab ntshuam syntax "ntshuam foo {.all.}" tau raug thov, tso cai rau koj mus import tsis tau tsuas yog pej xeem, tab sis kuj private cim. Txhawm rau nkag mus rau thaj chaw ntiag tug ntawm cov khoom, std/importutils module thiab privateAccess API tau ntxiv. los ntawm system {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Ntxiv qhov kev sim txhawb nqa rau cov neeg ua haujlwm dot, uas tuaj yeem siv los ua cov teb dynamic. import std/json template '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{β€œa1”: {β€œa2”: 10}} assert j.?a1.?a2.getInt == 10
  • Cov kev txwv ntxiv tuaj yeem teev nyob rau hauv cov lus sib cav. template fn(a = 1, b = 2, body1, body2) = discard fn(a = 1): bar1 ua: bar2
  • Kev them nyiaj yug rau cov neeg siv cov lus txhais tau raug siv (piv txwv li, "-128'bignum'"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffffff'big == (1'big shl 64'big) - 1'loj
  • Lub compiler siv cov lus txib "--eval: cmd" ncaj qha khiav Nim cov lus txib los ntawm kab hais kom ua, piv txwv li 'nim -eval: "echo 1"'.
  • Muab kev txhawb nqa los tsim koj tus kheej txuas ntxiv rau nimscript backend.
  • Cov lus yuam kev tau nthuav dav heev los qhia cov ntsiab lus cuam tshuam nrog qhov yuam kev. Ua raws li kev cai compiler ceeb toom.
  • Txhim kho qhov ua tau zoo ntawm "--gc: arc" thiab "--gc:orc" cov khoom khib nyiab.
  • Tag nrho cov backends tau txhim kho qhov raug thiab kev ua tau zoo ntawm cov lej rau kev txheeb cov lej thiab cov lej ntab ntab.
  • Txhim kho kev sib raug zoo ntawm JS, VM thiab nimscript backends nrog cov qauv uas yav dhau los tsuas yog ua haujlwm nrog C backend (piv txwv li, std / prelude module). Kev sim ntawm stdlib modules nrog C, JS thiab VM backends tau tsim.
  • Ntxiv kev txhawb nqa rau Apple Silicon / M1 nti, 32-ntsis RISC-V, armv8l thiab CROSSOS systems.
  • Ntxiv modules std/jsbigints, std/tempfiles thiab std/sysrand. Cov kev txhim kho tseem ceeb tau ua rau lub kaw lus, lej, random, json, jsonutils, os, typetraits, wrapnils, lists thiab hashes modules.

Tau qhov twg los: opennet.ru

Ntxiv ib saib