انتشار زبان برنامه نویسی Go 1.16 ارائه شده است که توسط گوگل با مشارکت جامعه به عنوان یک راه حل ترکیبی که عملکرد بالای زبان های کامپایل شده را با مزایای زبان های برنامه نویسی مانند سهولت در نوشتن کد ترکیب می کند ارائه شده است. ، سرعت توسعه و حفاظت از خطا. کد پروژه تحت مجوز BSD توزیع شده است.
سینتکس Go بر اساس عناصر آشنای زبان C با برخی وامگیریهایی از زبان پایتون است. زبان کاملاً مختصر است، اما کد به راحتی قابل خواندن و درک است. کد Go در فایلهای اجرایی باینری مستقل کامپایل میشود که بدون استفاده از ماشین مجازی بهصورت بومی اجرا میشوند (ماژولهای نمایهسازی، اشکال زدایی، و سایر زیرسیستمهای تشخیص مشکل زمان اجرا به عنوان اجزای زمان اجرا یکپارچه شدهاند)، که امکان عملکرد قابل مقایسه با برنامههای C را فراهم میکند.
این پروژه در ابتدا با توجه به برنامه نویسی چند رشته ای و عملیات کارآمد بر روی سیستم های چند هسته ای، از جمله ارائه ابزارهای سطح اپراتور برای سازماندهی محاسبات موازی و تعامل بین روش های موازی اجرا شده، توسعه یافته است. این زبان همچنین محافظت داخلی در برابر بلوک های حافظه بیش از حد تخصیص داده شده را فراهم می کند و امکان استفاده از جمع کننده زباله را فراهم می کند.
ویژگی های کلیدی جدید معرفی شده در Go 1.16:
- بسته جاسازی را اضافه کرد که ابزارهایی را برای جاسازی فایل ها و دایرکتوری های دلخواه در برنامه فراهم می کند. یک دستورالعمل جدید "//go:embed" برای مشخص کردن فایل هایی که در زمان کامپایل جاسازی شوند ارائه شده است. برای مثال، مشخص کردن “//go:embed test.txt” در کامنت کد و سپس اعلام متغیر “var f embed.FS” منجر به جاسازی فایل test.txt و امکان دسترسی به آن از طریق “ f” توصیفگر. به روشی مشابه، می توانید فایل هایی را با منابع یا مقادیر فردی از نوع خاصی که برای کار لازم است جاسازی کنید، به عنوان مثال، برای به دست آوردن متغیر رشته "s" از فایل version.txt، می توانید تعیین کنید: import _ "embed ” //go:embed version.txt var چاپ رشته (ها)
- بهطور پیشفرض، سیستم ماژول جدید با پشتیبانی نسخهسازی یکپارچه اکنون مورد نیاز است و جایگزین مدیریت وابستگی مبتنی بر GOPATH میشود. متغیر محیطی GO111MODULE اکنون بهطور پیشفرض روی «روشن» تنظیم شده است و حالت ماژولها بدون توجه به وجود فایل go.mod در دایرکتوری کار یا والد استفاده میشود. در حالت جدید، دستورات ساخت مانند "go build" و "go test" محتوای go.mod و go.sum را تغییر نمی دهند و دستور "go install" آرگومان های نسخه را پردازش می کند ("go install example.com/[ایمیل محافظت شده]"). برای بازگرداندن رفتار قدیمی، GO111MODULE را به "auto" تغییر دهید. خاطرنشان می شود که 96٪ از توسعه دهندگان قبلاً به سیستم ماژول جدید روی آورده اند.
- پیوند دهنده بهینه شده است. برای پروژه های بزرگ، طرح بندی اکنون 20 تا 25 درصد سریعتر است و 5 تا 15 درصد حافظه کمتری نیاز دارد.
- کامپایلر پشتیبانی از گسترش درون خطی توابع را با تعاریف اختصاری حلقههای «for»، مقادیر متد و ساختارهای «نوع سوئیچ» اضافه کرده است.
- اضافه شدن پشتیبانی از سیستم های اپل مجهز به تراشه جدید Apple M1 ARM. اضافه شدن پورت های netbsd/arm64 و openbsd/mips64 با پشتیبانی از NetBSD در ARM 64 بیتی و OpenBSD در سیستم های MIPS64. پشتیبانی از cgo و حالت "-buildmode=pie" به پورت linux/riscv64 اضافه شده است.
- پشتیبانی از حالت کامپایل x87 متوقف شده است (GO386=387). پشتیبانی از پردازنده های بدون دستورالعمل SSE2 اکنون از طریق حالت نرم افزار "GO386=softfloat" در دسترس است.
علاوه بر این، میتوانیم شروع آزمایش نسخه بتا زبان Dart 2.12 را یادداشت کنیم، که در آن حالت امن «Null» تثبیت شده است، که به جلوگیری از خرابیهای ناشی از تلاش برای استفاده از متغیرهایی که مقدار آنها تعریف نشده و روی «Null» تنظیم شده است کمک میکند. ". حالت به این معنی است که متغیرها نمی توانند مقادیر null داشته باشند مگر اینکه به صراحت مقدار null به آنها اختصاص داده شود. این حالت به شدت به انواع متغیرها احترام می گذارد، که به کامپایلر اجازه می دهد تا بهینه سازی های اضافی را اعمال کند. انطباق نوع در زمان کامپایل بررسی می شود، برای مثال، اگر بخواهید مقدار "Null" را به متغیری با نوعی اختصاص دهید که حالت تعریف نشده ای ندارد، مانند "int"، یک خطا نمایش داده می شود.
منبع: opennet.ru