Nim programming mutauro kuburitswa 1.6.0

Mushure megore rekusimudzira, kuburitswa kweiyo system programming mutauro Nim 1.6 yakaburitswa, iyo inoshandisa static typing uye yakagadzirwa neziso paPascal, C ++, Python uye Lisp. Nim source code inounganidzwa kuita C, C++, kana JavaScript inomiririra. Zvadaro, iyo inoguma C / C ++ kodhi inounganidzwa kuita faira rinoshandiswa uchishandisa chero inowanikwa compiler (clang, gcc, icc, Visual C ++), iyo inokutendera iwe kuti uwane kuita padyo neC, kana ukasafunga nezvemitengo yekumhanya. muunganidzi wemarara. Zvakafanana nePython, Nim inoshandisa indentation se block delimiters. Metaprogramming maturusi uye kugona kugadzira mitauro-yakananga mitauro (DSLs) inotsigirwa. Iyo kodhi yeprojekiti inopihwa pasi peMIT rezinesi.

Shanduko dzinozivikanwa mukuburitswa kutsva dzinosanganisira:

  • Yakawedzera iyo iterable[T] kirasi ine mhando yekushandisa kune 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 # kana 'iota( 3).sum'
  • Yakawedzera tsigiro yezviyedzo ye ".effectsOf" zvirevo zvekusarudza kushandisa maitiro. when defined(nimHasEffectsOf): {.experimental: "strictEffects".} zvimwe: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • Izwi idzva rekunze rekuti "import foo {.all.}" rakurudzirwa, richikutendera kuti utore kwete zveruzhinji chete, asiwo zviratidzo zvepachivande. Kuti uwane nzvimbo dzakavanzika dzezvinhu, iyo std/importutils module uye yakavanzikaAccess API yakawedzerwa. kubva kuhurongwa {.all.} as system2 import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Yakawedzera tsigiro yezviyedzo yevashandisi dot, iyo inogona kushandiswa kushandisa masimba ane simba. import std/json template '.?'(a: JsonNode, b: isina kunyorwa{ident}): JsonNode = a[astToStr(b)] rega j = %*{β€œa1”: {β€œa2”: 10}} simbisa j.?a1.?a2.getInt == 10
  • Mamwe maparamendi anogona kutsanangurwa mumabhuroko nharo. template fn(a = 1, b = 2, body1, body2) = bvisa fn(a = 1): bar1 ita: bar2
  • Tsigiro yezvinyorwa-zvinotsanangurwa nevashandisi yaitwa (semuenzaniso, "-128'bignum'"). func `'big`*(nhamba: cstring): JsBigInt {.importjs: "BigInt(#)".} taura 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Iyo compiler inoshandisa iyo "-eval: cmd" kuraira kumhanyisa Nim mirairo kubva pamutsetse wemirairo, semuenzaniso 'nim -eval:"echo 1β€³'.
  • Yakapihwa rutsigiro rwekugadzira yako yekuwedzera kune iyo nimscript backend.
  • Mameseji ekukanganisa akawedzerwa zvakanyanya kuratidza mamiriro ane chekuita nekukanganisa. Yakaiswa yambiro yekuunganidza.
  • Kuita kwakagadziridzwa kwakanyanya kwe "--gc: arc" uye "--gc:orc" vanonhonga marara.
  • Zvese zvinodzokera kumashure zvakavandudza huroyi uye kuita kwekodhi yekubatanidza nhamba uye nhamba dzepoinzi dzinoyangarara.
  • Yakavandudzwa kuenderana kweJS, VM uye nimscript backends nemamodule aimboshanda chete neC backend (semuenzaniso, iyo std/prelude module). Kuedzwa kwe stdlib modules neC, JS uye VM backends kwave kusimbiswa.
  • Yakawedzerwa rutsigiro rweApple Silicon/M1 chip, 32-bit RISC-V, armv8l uye CROSSOS masisitimu.
  • Akawedzera mamodule std/jsbigints, std/temfiles uye std/sysrand. Kuvandudzwa kwakakosha kwakaitwa kuhurongwa, masvomhu, zvisina tsarukano, json, jsonutils, os, typetraits, wrapnils, zvinyorwa uye hashes modules.

Source: opennet.ru

Voeg