انتشار زبان برنامه نویسی Go 1.18

انتشار زبان برنامه نویسی Go 1.18 ارائه شده است که توسط گوگل با مشارکت جامعه به عنوان یک راه حل ترکیبی که عملکرد بالای زبان های کامپایل شده را با مزایای زبان های برنامه نویسی مانند سهولت در نوشتن کد ترکیب می کند ارائه شده است. ، سرعت توسعه و حفاظت از خطا. کد پروژه تحت مجوز BSD توزیع شده است.

سینتکس Go بر اساس عناصر آشنای زبان C با برخی وام‌گیری‌هایی از زبان پایتون است. زبان کاملاً مختصر است، اما کد به راحتی قابل خواندن و درک است. کد Go در فایل‌های اجرایی باینری مستقل کامپایل می‌شود که بدون استفاده از ماشین مجازی به‌صورت بومی اجرا می‌شوند (ماژول‌های نمایه‌سازی، اشکال زدایی، و سایر زیرسیستم‌های تشخیص مشکل زمان اجرا به عنوان اجزای زمان اجرا یکپارچه شده‌اند)، که امکان عملکرد قابل مقایسه با برنامه‌های C را فراهم می‌کند.

این پروژه در ابتدا با توجه به برنامه نویسی چند رشته ای و عملیات کارآمد بر روی سیستم های چند هسته ای، از جمله ارائه ابزارهای سطح اپراتور برای سازماندهی محاسبات موازی و تعامل بین روش های موازی اجرا شده، توسعه یافته است. این زبان همچنین محافظت داخلی در برابر بلوک های حافظه بیش از حد تخصیص داده شده را فراهم می کند و امکان استفاده از جمع کننده زباله را فراهم می کند.

نسخه جدید پشتیبانی از توابع و انواع عمومی (عمومی) را اضافه می کند که با کمک آن یک توسعه دهنده می تواند توابع طراحی شده برای کار با چندین نوع را به طور همزمان تعریف و استفاده کند. همچنین می توان از رابط ها برای ایجاد انواع ترکیبی که چندین نوع داده را در بر می گیرد، استفاده کرد. پشتیبانی از ژنریک بدون شکستن سازگاری با کد موجود اجرا می شود. // مجموع مقادیر مجموعه، برای انواع int64 و float64 کار می کند func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // گزینه دیگری با تعریف نوع عمومی: نوع Number interface { int64 | float64 } func SumNumbers[K قابل مقایسه، V عدد](m map[K]V) V { var s V برای _, v := محدوده m { s += v } بازگشت s }

بهبودهای دیگر:

  • ابزارهای کاربردی برای تست کد فازی در جعبه ابزار استاندارد یکپارچه شده اند. در طول تست فازی، جریانی از تمام ترکیبات تصادفی ممکن از داده های ورودی تولید می شود و خرابی های احتمالی در طول پردازش آنها ثبت می شود. اگر یک دنباله از کار بیفتد یا با پاسخ مورد انتظار مطابقت نداشته باشد، این رفتار به احتمال زیاد نشان دهنده یک اشکال یا آسیب پذیری است.
  • اضافه شدن پشتیبانی از فضاهای کاری چند ماژولار، به شما امکان می دهد دستورات را روی چندین ماژول به طور همزمان اجرا کنید، به شما امکان می دهد همزمان کد را در چندین ماژول بسازید و اجرا کنید.
  • بهینه سازی عملکرد قابل توجهی برای سیستم های مبتنی بر پردازنده های Apple M1، ARM64 و PowerPC64 انجام شده است. امکان استفاده از ثبات ها به جای پشته برای ارسال آرگومان ها به توابع و برگرداندن نتیجه را فعال کرد. باز کردن درون خطی حلقه ها توسط کامپایلر بهبود یافته است. بررسی تایپ در کامپایلر کاملاً دوباره طراحی شده است. برخی از تست‌ها 20 درصد افزایش عملکرد کد را نسبت به نسخه قبلی نشان می‌دهند، اما خود کامپایل حدود 15 درصد بیشتر طول می‌کشد.
  • در زمان اجرا، راندمان بازگرداندن حافظه آزاد شده به سیستم عامل افزایش یافته و عملکرد جمع کننده زباله بهبود یافته است که رفتار آن قابل پیش بینی تر شده است.
  • بسته های جدید net/netip و debug/buildinfo به کتابخانه استاندارد اضافه شده اند. پشتیبانی از TLS 1.0 و 1.1 به طور پیش فرض در کد مشتری غیرفعال است. ماژول crypto/x509 پردازش گواهینامه های امضا شده با استفاده از هش SHA-1 را متوقف کرده است.
  • الزامات محیط زیست در لینوکس افزایش یافته است؛ برای کار کردن، اکنون باید هسته لینوکس حداقل نسخه 2.6.32 داشته باشید. در نسخه بعدی، تغییرات مشابهی برای FreeBSD انتظار می رود (پشتیبانی از شاخه FreeBSD 11.x متوقف خواهد شد) و حداقل برای کارکردن به FreeBSD 12.2 نیاز است.

منبع: opennet.ru

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