Nim 1.6.0 dasturlash tilining chiqarilishi

Bir yillik rivojlanishdan so'ng Nim 1.6 tizimli dasturlash tili nashr etildi, u statik terishdan foydalanadi va Paskal, C++, Python va Lisp tillarida ko'z bilan yaratilgan. Nim manba kodi C, C++ yoki JavaScript ko'rinishida tuzilgan. Keyinchalik, olingan C/C++ kodi har qanday mavjud kompilyator (clang, gcc, icc, Visual C++) yordamida bajariladigan faylga kompilyatsiya qilinadi, bu sizga C ga yaqin ishlashga erishish imkonini beradi, agar siz ishga tushirish xarajatlarini hisobga olmasangiz. axlat yig'uvchi. Python-ga o'xshab, Nim blok cheklovchi sifatida chekinishdan foydalanadi. Metadasturlash vositalari va domenga xos tillarni (DSL) yaratish imkoniyatlari qo'llab-quvvatlanadi. Loyiha kodi MIT litsenziyasi ostida taqdim etilgan.

Yangi nashrdagi sezilarli o'zgarishlar quyidagilardan iborat:

  • Iteratorlar uchun turni amalga oshirish bilan iterable[T] sinfi qo'shildi. andoza summasi[T](a: takrorlanadigan[T]): T = var natija: ai uchun T: natija += ai natija assert sum(iota(3)) == 0 + 1 + 2 # yoki 'iota( 3).sum'
  • Effektlarni tanlab qo'llash uchun ".effectsOf" izohlari uchun eksperimental yordam qo'shildi. aniqlanganda(nimHasEffectsOf): {.eksperimental: "strictEffects".} boshqa: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • “import foo {.all.}” yangi import sintaksisi taklif qilindi, bu sizga nafaqat umumiy, balki shaxsiy belgilarni ham import qilish imkonini beradi. Ob'ektlarning shaxsiy maydonlariga kirish uchun std/importutils moduli va privateAccess API qo'shildi. {.all.} tizimidan tizim2 sifatida import nil echo system2.ThisIsSystem import os {.all.} echo weirdTarget
  • Dinamik maydonlarni amalga oshirish uchun ishlatilishi mumkin bo'lgan nuqta operatorlari uchun tajribaviy yordam qo'shildi. import std/json shablonini '.?'(a: JsonNode, b: yozilmagan{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} tasdiq j.?a1.?a2.getInt == 10
  • Qo'shimcha parametrlar blok argumentlarida ko'rsatilishi mumkin. shablon fn(a = 1, b = 2, tana1, tana2) = o'chirish fn(a = 1): bar1 qilish: bar2
  • Foydalanuvchi tomonidan belgilangan literallarni qo'llab-quvvatlash amalga oshirildi (masalan, "-128'bignum"). func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • Kompilyator Nim buyruqlarini buyruq satridan to'g'ridan-to'g'ri ishga tushirish uchun “—eval:cmd” buyrug'ini amalga oshiradi, masalan, ‘nim —eval:”echo 1″‘.
  • Nimscript backend uchun o'z kengaytmalaringizni yaratishda yordam ko'rsatilgan.
  • Xato xabarlari xato bilan bog'liq kontekstni ko'rsatish uchun ancha kengaytirildi. Amalga oshirilgan maxsus kompilyator ogohlantirishlari.
  • "--gc:arc" va "--gc:orc" axlat yig'uvchilarning ishlashi sezilarli darajada yaxshilandi.
  • Barcha backendlar butun sonlar va suzuvchi nuqta raqamlarini tahlil qilish uchun kodning aniqligi va unumdorligini oshirdi.
  • JS, VM va nimscript backendlarining avval faqat C backend bilan ishlagan modullar bilan muvofiqligi yaxshilandi (masalan, std/prelude moduli). C, JS va VM backendlari bilan stdlib modullarini sinovdan o'tkazish o'rnatildi.
  • Apple Silicon/M1 chipi, 32-bitli RISC-V, armv8l va CROSSOS tizimlari uchun qo'shimcha qo'llab-quvvatlash.
  • std/jsbigints, std/tempfiles va std/sysrand modullari qo‘shildi. Tizimda, matematika, random, json, jsonutils, os, typetraits, wrapnils, lists va xesh modullarida sezilarli yaxshilanishlar amalga oshirildi.

Manba: opennet.ru

a Izoh qo'shish