انتشار زبان برنامه نویسی Nim 1.6.0

پس از یک سال توسعه، انتشار زبان برنامه نویسی سیستم Nim 1.6 منتشر شد که از تایپ استاتیک استفاده می کند و با نگاهی به پاسکال، سی پلاس پلاس، پایتون و لیسپ ساخته شده است. کد منبع Nim در یک نمایش C، C++ یا جاوا اسکریپت کامپایل می شود. متعاقباً، کد C/C++ حاصل با استفاده از هر کامپایلر موجود (clang، gcc، icc، Visual C++) در یک فایل اجرایی کامپایل می‌شود، که به شما امکان می‌دهد در صورت عدم توجه به هزینه‌های اجرا، عملکردی نزدیک به C داشته باشید. زباله جمع کن مشابه پایتون، Nim از تورفتگی به عنوان جداکننده بلوک استفاده می کند. ابزارها و قابلیت‌های فرابرنامه‌نویسی برای ایجاد زبان‌های خاص دامنه (DSL) پشتیبانی می‌شوند. کد پروژه تحت مجوز MIT ارائه شده است.

تغییرات قابل توجه در نسخه جدید عبارتند از:

  • کلاس iterable[T] را با اجرای نوع برای تکرارکننده ها اضافه کرد. مجموع الگو[T](a: قابل تکرار[T]): T = var نتیجه: T برای ai در a: نتیجه += ai نتیجه بیان مجموع(iota(3)) == 0 + 1 + 2 # یا 'iota( 3). مجموع
  • پشتیبانی آزمایشی برای حاشیه نویسی ".effectsOf" برای اعمال انتخابی افکت ها اضافه شد. وقتی تعریف شد(nimHasEffectsOf): {.experimental: "strictEffects".} else: {.pragma: effectOf.} proc mysort(s: seq; cmp: proc(a, b: t): int) {.effectsOf: cmp. }
  • یک دستور واردات جدید "import foo {.all.}" پیشنهاد شده است که به شما امکان می دهد نه تنها نمادهای عمومی، بلکه خصوصی را نیز وارد کنید. برای دسترسی به فیلدهای خصوصی اشیاء، ماژول std/importutils و privateAccess API اضافه شده است. از سیستم {.all.} به عنوان system2 import nil echo system2.ThisIsSystem import OS {.all.} echo weirdTarget
  • پشتیبانی آزمایشی برای عملگرهای نقطه اضافه شده است که می تواند برای پیاده سازی فیلدهای پویا استفاده شود. قالب std/json را وارد کنید '.؟'(a: JsonNode، b: untyped{ident}): JsonNode = a[astToStr(b)] اجازه دهید 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(#)".} assert 0xffffffffffffff'big == (1'big shl 64'big) - 1'big
  • کامپایلر دستور «—eval:cmd» را برای اجرای مستقیم دستورات Nim از خط فرمان اجرا می‌کند، به عنوان مثال «nim —eval:»echo 1».
  • پشتیبانی برای ایجاد برنامه های افزودنی خود برای پشتیبان nimscript ارائه شده است.
  • پیام های خطا تا حد زیادی گسترش یافته اند تا زمینه مرتبط با خطا را نشان دهند. اخطارهای کامپایلر سفارشی پیاده سازی شده است.
  • عملکرد آشغال‌گیرهای «--gc:arc» و «--gc:orc» به‌طور قابل‌توجهی بهبود یافته است.
  • همه Backendها دقت و عملکرد کد را برای تجزیه اعداد صحیح و اعداد ممیز شناور بهبود بخشیده اند.
  • سازگاری بهبود یافته پشتیبان‌های 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

اضافه کردن نظر