إصدار لغة البرمجة نيم 1.6.0

بعد عام من التطوير، تم نشر إصدار لغة برمجة النظام Nim 1.6، والتي تستخدم الكتابة الثابتة وتم إنشاؤها مع التركيز على Pascal وC++ وPython وLisp. يتم تجميع كود مصدر Nim في تمثيل C أو C++ أو JavaScript. بعد ذلك، يتم تجميع كود C/C++ الناتج في ملف قابل للتنفيذ باستخدام أي مترجم متاح (clang، gcc، icc، Visual C++)، مما يسمح لك بتحقيق أداء قريب من C، إذا لم تأخذ في الاعتبار تكاليف التشغيل جامع القمامة. كما هو الحال مع بايثون، يستخدم Nim المسافة البادئة كمحددات للكتل. يتم دعم أدوات وإمكانات البرمجة الفوقية لإنشاء لغات خاصة بالمجال (DSL). يتم توفير رمز المشروع بموجب ترخيص MIT.

تشمل التغييرات الملحوظة في الإصدار الجديد ما يلي:

  • تمت إضافة فئة iterable[T] مع تنفيذ النوع للمكررات. قالب مجموع[T](a: iterable[T]): T = نتيجة var: T لـ ai في a: result += ai نتيجة تأكيد sum(iota(3)) == 0 + 1 + 2 # أو 'iota( 3).المجموع'
  • تمت إضافة دعم تجريبي للتعليقات التوضيحية ".effactOf" لتطبيق التأثيرات بشكل انتقائي. عند التعريف (nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: EffectsOf.} proc mysort(s: seq; cmp: proc(a, b: T): int) {.effactOf: cmp. }
  • تم اقتراح صيغة استيراد جديدة "import foo {.all.}"، مما يسمح لك باستيراد ليس فقط الرموز العامة، بل أيضًا الرموز الخاصة. للوصول إلى الحقول الخاصة للكائنات، تمت إضافة الوحدة النمطية std/importutils وواجهة برمجة تطبيقات الوصول الخاص. من النظام {.all.} مثل system2 import nil echo system2.ThisIsSystem import os {.all.} echo WeirdTarget
  • تمت إضافة دعم تجريبي لمشغلي النقاط، والذي يمكن استخدامه لتنفيذ الحقول الديناميكية. استيراد قالب std/json '.?'(a: JsonNode, b: untyped{ident}): JsonNode = a[astToStr(b)] Let j = %*{"a1": {"a2": 10}} تأكيد j.?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(#)".} تأكيد 0xffffffffffff'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

إضافة تعليق