انتشار زبان برنامه نویسی که توسط گوگل با مشارکت جامعه به عنوان یک راه حل ترکیبی که عملکرد بالای زبان های کامپایل شده را با مزایای زبان های اسکریپت نویسی مانند سهولت در نوشتن کد، سرعت توسعه و محافظت از خطا ترکیب می کند، در حال توسعه است. کد پروژه تحت مجوز BSD
سینتکس Go بر اساس عناصر آشنای زبان C با برخی وامگیریهایی از زبان پایتون است. زبان کاملاً مختصر است، اما کد به راحتی قابل خواندن و درک است. کد Go در فایل های اجرایی باینری مستقل که به صورت بومی و بدون استفاده از ماشین مجازی اجرا می شوند کامپایل می شود (پروفایل، اشکال زدایی و سایر زیرسیستم های تشخیص مشکل در زمان اجرا به صورت ادغام شده اند. ) که به شما امکان می دهد عملکردی قابل مقایسه با برنامه های C داشته باشید.
این پروژه در ابتدا با توجه به برنامه نویسی چند رشته ای و عملیات کارآمد بر روی سیستم های چند هسته ای، از جمله ارائه ابزارهای سطح اپراتور برای سازماندهی محاسبات موازی و تعامل بین روش های موازی اجرا شده، توسعه یافته است. این زبان همچنین محافظت داخلی در برابر بلوک های حافظه بیش از حد تخصیص داده شده را فراهم می کند و امکان استفاده از جمع کننده زباله را فراهم می کند.
اصلی معرفی شده در نسخه Go 1.14:
- سیستم ماژول جدید در دستور "go" اکنون برای استفاده عمومی آماده است، به طور پیشفرض فعال است و برای مدیریت وابستگی توصیه میشود و جایگزین GOPATH میشود. سیستم ماژول جدید دارای پشتیبانی یکپارچه از نسخهبندی، ابزارهای تحویل بسته و یک سیستم مدیریت وابستگی بهبود یافته است. با ماژولها، توسعهدهندگان دیگر به کار در درخت GOPATH وابسته نیستند، میتوانند وابستگیها را با توجه به نسخهها به صراحت تعریف کنند و ساختهای قابل تکرار ایجاد کنند.
- پشتیبانی از تعبیه رابطها با مجموعه متدهای همپوشانی. متدهای یک رابط تعبیهشده اکنون میتوانند نامها و امضاهای یکسانی با متدهای رابطهای موجود داشته باشند. متدهایی که به صراحت تعریف شدهاند، مانند قبل منحصر به فرد باقی میمانند.
- عملکرد عبارت "defer" بهبود یافته است، و تقریباً به همان سرعتی است که یک تابع defer شده را مستقیماً فراخوانی میکند، و امکان استفاده از اجرای تابع defer شده را در کد حساس به عملکرد فراهم میکند.
- پیشدستی ناهمزمان goroutine اکنون پشتیبانی میشود - حلقههایی که شامل فراخوانیهای تابع نیستند، دیگر نمیتوانند به طور بالقوه باعث بنبست زمانبندی شوند یا شروع جمعآوری زباله را به تأخیر بیندازند.
- کارایی سیستم تخصیص صفحات حافظه بهبود یافته است و به طور قابل توجهی تداخل قفلها را در پیکربندیهایی با مقادیر بزرگ GOMAXPROCS کاهش میدهد. این امر منجر به کاهش تأخیر و افزایش توان عملیاتی در طول تخصیص موازی و فشرده بلوکهای حافظه بزرگ میشود.
- قفلها بهینه شده و تعداد سوئیچهای زمینه هنگام اجرای تایمرهای داخلی مورد استفاده در توابع time.After، time.Tick و net.Conn.SetDeadline کاهش یافته است.
- پرچم "-mod=vendor" به طور پیشفرض در دستور go فعال میشود اگر دایرکتوری ریشه شامل یک دایرکتوری vendor برای وابستگیهای خارجی مختص به یک فروشنده خاص باشد. یک پرچم جداگانه "-mod=mod" برای بارگیری ماژولها از حافظه پنهان ماژول به جای دایرکتوری "vendor" اضافه شده است. اگر فایل go.mod فقط خواندنی باشد، اگر دایرکتوری سطح بالای "vendor" وجود نداشته باشد، پرچم "-mod=readonly" اکنون به طور پیشفرض تنظیم میشود. یک پرچم "-modfile=file" اضافه شده است تا یک فایل go.mod جایگزین را به جای فایل موجود در دایرکتوری ریشه ماژول مشخص کند.
- متغیر محیطی GOINSECURE اضافه شد، که وقتی تنظیم شود باعث میشود دستور go هنگام بارگیری مستقیم ماژولها نیازی به HTTPS نداشته باشد و بررسی گواهی را رد کند.
- کامپایلر اکنون یک پرچم پیشفرض "-d=checkptr" دارد تا کد را از نظر انطباق با قوانین استفاده ایمن برای unsafe.Pointer بررسی کند.
- بسته جدید شامل ارسال میشود با توابع هش غیر رمزنگاری برای ایجاد جداول هش برای توالیهای بایت یا رشتههای دلخواه.
- پشتیبانی آزمایشی برای پلتفرم ۶۴ بیتی RISC-V اضافه شد. Linux.
- پشتیبانی از FreeBSD در سیستمهای ARM 64 بیتی اضافه شد.
منبع: opennet.ru
