Nim ပရိုဂရမ်းမင်းဘာသာစကား 1.6.0 ထွက်ရှိသည်။

ဖွံ့ဖြိုးတိုးတက်မှု တစ်နှစ်အကြာတွင်၊ စနစ်ပရိုဂရမ်းမင်းဘာသာစကား Nim 1.6 ကို ထုတ်ဝေခဲ့ပြီး၊ static typing ကိုအသုံးပြုကာ Pascal၊ C++၊ Python နှင့် Lisp တို့ကို မျက်စိကျအောင် ဖန်တီးခဲ့သည်။ Nim အရင်းအမြစ်ကုဒ်ကို C၊ C++ သို့မဟုတ် JavaScript ကိုယ်စားပြုမှုအဖြစ် စုစည်းထားသည်။ နောက်ပိုင်းတွင် ရရှိလာသော C/C++ ကုဒ်ကို သင်အသုံးပြုသည့်ကုန်ကျစရိတ်များကို ထည့်သွင်းစဉ်းစားခြင်းမရှိပါက ရရှိနိုင်သော မည်သည့် compiler (clang, gcc, icc, Visual C++) ကို အသုံးပြု၍ executable file တစ်ခုအဖြစ် စုစည်းထားပါသည်။ အမှိုက်သိမ်းသူ။ Python နှင့်ဆင်တူသည်၊ Nim သည် အင်တင်းကို ပိတ်ဆို့ကန့်သတ်ချက်များအဖြစ် အသုံးပြုသည်။ domain-specific languages ​​(DSL) များဖန်တီးရန်အတွက် Metaprogramming ကိရိယာများနှင့် စွမ်းရည်များကို ပံ့ပိုးထားပါသည်။ ပရောဂျက်ကုဒ်ကို MIT လိုင်စင်အောက်တွင် ပေးထားသည်။

ထုတ်ဝေမှုအသစ်တွင် ထင်ရှားသောပြောင်းလဲမှုများ ပါဝင်သည်-

  • iterable[T] class ကို iterators အတွက် type implementation ဖြင့် ပေါင်းထည့်ခဲ့သည်။ နမူနာပုံစံ sum[T](a: iterable[T]): T = var ရလဒ်- T အတွက် ai အတွက် a: ရလဒ် += ai ရလဒ် assert sum(iota(3)) == 0 + 1 + 2 # သို့မဟုတ် 'iota( 3) အစု
  • အကျိုးသက်ရောက်မှုများကို ရွေးချယ်အသုံးပြုရန်အတွက် ".effectsOf" မှတ်စာများ အတွက် စမ်းသပ်မှု ပံ့ပိုးမှု ပေါင်းထည့်ထားသည်။ defined(nimHasEffectsOf): {.experimental: "strictEffects"။} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • သွင်းကုန်အထားအသိုအသစ် “import foo {.all.}” ကို အဆိုပြုထားပြီး၊ အများသူငှာသာမက ပုဂ္ဂလိကသင်္ကေတများကိုပါ တင်သွင်းခွင့်ပြုထားသည်။ အရာဝတ္ထုများ၏ သီးသန့်နယ်ပယ်များကို ဝင်ရောက်ကြည့်ရှုရန် std/importutils module နှင့် privateAccess API ကို ပေါင်းထည့်ထားသည်။ စနစ် {.all.} အဖြစ် system2 မှ တင်သွင်းခြင်း nil echo system2.ThisIsSystem တင်သွင်းခြင်း os {.all.} echo weirdTarget
  • ဒိုင်းနမစ်နယ်ပယ်များကို အကောင်အထည်ဖော်ရန် အသုံးပြုနိုင်သည့် အစက်အော်ပရေတာများအတွက် စမ်းသပ်မှုဆိုင်ရာ ပံ့ပိုးမှု ထပ်လောင်းထည့်ထားသည်။ တင်သွင်းသည့် std/json နမူနာပုံစံ '.?'(a: JsonNode၊ b: untyped{ident}): JsonNode = a[astToStr(b)] let j = %*{“a1”: {“a2”: 10}} အခိုင်အမာ j.?a1.?a2.getInt == ၁၀
  • block arguments များတွင် အပိုဘောင်များကို သတ်မှတ်နိုင်ပါသည်။ ပုံစံခွက် fn(a=1၊ b=2၊ body1၊ body2) = fn(a=1): bar1 do: bar2
  • အသုံးပြုသူသတ်မှတ်ထားသော စာလုံးများအတွက် ပံ့ပိုးမှုကို အကောင်အထည်ဖော်ပြီးဖြစ်သည် (ဥပမာ၊ "-128'bignum')။ func `'big`*(num: cstring): JsBigInt {.importjs: "BigInt(#)".} 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • ကွန်ပြူတာသည် “—eval: cmd” အမိန့်ကို ကွန်မန်းလိုင်းမှ Nim အမိန့်များကို တိုက်ရိုက် run ရန် ဥပမာ 'nim —eval:”echo 1″'။
  • nimscript backend အတွက် သင့်ကိုယ်ပိုင် extension များကို ဖန်တီးရန်အတွက် ပံ့ပိုးမှုပေးထားသည်။
  • error နှင့်ဆက်စပ်သည့်အကြောင်းအရာကိုပြသရန် Error message များကို အလွန်ချဲ့ထွင်ထားပါသည်။ စိတ်ကြိုက် compiler သတိပေးချက်များကို အကောင်အထည်ဖော်ခဲ့သည်။
  • "--gc:arc" နှင့် "--gc:orc" အမှိုက်စုဆောင်းသူများ၏ စွမ်းဆောင်ရည်ကို သိသာစွာ မြှင့်တင်ထားသည်။
  • နောက်ခံအားလုံးသည် ကိန်းပြည့်များနှင့် Floating Point နံပါတ်များကို ခွဲခြမ်းစိတ်ဖြာရန်အတွက် ကုဒ်များ၏ တိကျမှုနှင့် စွမ်းဆောင်ရည်ကို မြှင့်တင်ပေးထားပါသည်။
  • ယခင်က C backend (ဥပမာ၊ std/prelude module) နှင့် ယခင်က လုပ်ဆောင်ခဲ့သော module များနှင့်အတူ JS၊ VM နှင့် nimscript backend များ၏ လိုက်ဖက်ညီမှုကို ပိုမိုကောင်းမွန်စေသည်။ C, JS နှင့် VM backends များဖြင့် stdlib module များကို စမ်းသပ်ခြင်း ပြုလုပ်ပြီးဖြစ်သည်။
  • Apple Silicon/M1 ချစ်ပ်၊ 32-bit RISC-V၊ armv8l နှင့် CROSSOS စနစ်များအတွက် ထပ်လောင်းပံ့ပိုးမှု။
  • ထည့်သွင်းထားသော modules std/jsbigints၊ std/tempfiles နှင့် std/sysrand။ စနစ်၊ သင်္ချာ၊ ကျပန်း၊ json၊ jsonutils၊ os၊ typetraits၊ wrapnils၊ lists နှင့် hashes module များအတွက် သိသာထင်ရှားသော တိုးတက်မှုများကို ပြုလုပ်ထားပါသည်။

source: opennet.ru

မှတ်ချက် Add