ภาษาโปรแกรม Nim รีลีส 1.6.0

หลังจากหนึ่งปีของการพัฒนา การเปิดตัวภาษาการเขียนโปรแกรมระบบ Nim 1.6 ก็ได้รับการเผยแพร่ ซึ่งใช้การพิมพ์แบบคงที่และสร้างขึ้นโดยคำนึงถึง Pascal, C++, Python และ Lisp ซอร์สโค้ด Nim ได้รับการคอมไพล์เป็นการแสดง C, C++ หรือ JavaScript ต่อจากนั้น รหัส C/C++ ที่ได้จะถูกคอมไพล์เป็นไฟล์ปฏิบัติการโดยใช้คอมไพเลอร์ที่มีอยู่ (clang, gcc, icc, Visual C++) ซึ่งช่วยให้คุณได้รับประสิทธิภาพที่ใกล้เคียงกับ C หากคุณไม่คำนึงถึงค่าใช้จ่ายในการรัน คนเก็บขยะ เช่นเดียวกับ Python Nim ใช้การเยื้องเป็นตัวคั่นบล็อก รองรับเครื่องมือการเขียนโปรแกรมเมตาและความสามารถในการสร้างภาษาเฉพาะโดเมน (DSL) รหัสโครงการมีให้ภายใต้ใบอนุญาต MIT

การเปลี่ยนแปลงที่โดดเด่นในรุ่นใหม่ ได้แก่:

  • เพิ่มคลาส iterable[T] พร้อมการใช้งานประเภทสำหรับตัววนซ้ำ ผลรวมเทมเพลต[T](a: iterable[T]): T = ผลลัพธ์ var: T สำหรับ ai ใน a: ผลลัพธ์ += ผลลัพธ์ ai ยืนยันผลรวม (iota(3)) == 0 + 1 + 2 # หรือ 'iota( 3).ผลรวม'
  • เพิ่มการสนับสนุนการทดลองสำหรับคำอธิบายประกอบ ".effectsOf" สำหรับการเลือกใช้เอฟเฟกต์ เมื่อกำหนด (nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effectsOf: cmp. }
  • มีการเสนอไวยากรณ์การนำเข้าใหม่ “import foo {.all.}” ซึ่งช่วยให้คุณนำเข้าได้ไม่เพียงแต่สัญลักษณ์สาธารณะเท่านั้น แต่ยังนำเข้าสัญลักษณ์ส่วนตัวด้วย ในการเข้าถึงฟิลด์ส่วนตัวของออบเจ็กต์ เราได้เพิ่มโมดูล std/importutils และ privateAccess API แล้ว จากระบบ {.all.} เป็น system2 นำเข้าไม่มี echo system2.ThisIsSystem นำเข้าระบบปฏิบัติการ {.all.} echoแปลกTarget
  • เพิ่มการสนับสนุนการทดลองสำหรับตัวดำเนินการจุด ซึ่งสามารถใช้เพื่อนำฟิลด์ไดนามิกไปใช้ นำเข้าเทมเพลต std/json '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] ให้ j = %*{“a1”: {“a2”: 10}} ยืนยัน เจ?a1.?a2.getInt == 10
  • สามารถระบุพารามิเตอร์เพิ่มเติมได้ในอาร์กิวเมนต์บล็อก เทมเพลต 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 โดยตรงจากบรรทัดคำสั่ง เช่น 'nim —eval:”echo 1″'
  • ให้การสนับสนุนสำหรับการสร้างส่วนขยายของคุณเองสำหรับแบ็กเอนด์ nimscript
  • ข้อความแสดงข้อผิดพลาดได้รับการขยายอย่างมากเพื่อแสดงบริบทที่เกี่ยวข้องกับข้อผิดพลาด ใช้คำเตือนคอมไพเลอร์แบบกำหนดเอง
  • ปรับปรุงประสิทธิภาพของตัวรวบรวมขยะ "--gc:arc" และ "--gc:orc" อย่างมีนัยสำคัญ
  • แบ็กเอนด์ทั้งหมดได้ปรับปรุงความแม่นยำและประสิทธิภาพของโค้ดสำหรับการแยกวิเคราะห์จำนวนเต็มและตัวเลขทศนิยม
  • ปรับปรุงความเข้ากันได้ของแบ็กเอนด์ JS, VM และ nimscript ด้วยโมดูลที่ก่อนหน้านี้ใช้งานได้กับแบ็กเอนด์ C เท่านั้น (เช่น โมดูล std/prelude) มีการสร้างการทดสอบโมดูล stdlib ด้วยแบ็กเอนด์ C, JS และ VM แล้ว
  • เพิ่มการรองรับชิป Apple Silicon/M1, ระบบ RISC-V 32 บิต, armv8l และ CROSSOS
  • เพิ่มโมดูล std/jsbigints, std/tempfiles และ std/sysrand มีการปรับปรุงที่สำคัญกับระบบ, คณิตศาสตร์, สุ่ม, json, jsonutils, os, typetraits, wrapnils, รายการและโมดูลแฮช

ที่มา: opennet.ru

เพิ่มความคิดเห็น