تغییرات نسخه های زبان گو

تغییرات نسخه های زبان گو

gopher

Go هر شش ماه یکبار منتشر می‌شود. هر نسخه‌ی اصلی Go تا زمانی که دو نسخه‌ی اصلی جدیدتر منتشر شوند، پشتیبانی می‌شود. مشکلات بحرانی با انتشار اصلاحات جزئی رفع می‌شوند.

همچنین لینک‌هایی به پروپوزال‌ها (P) و کامیت‌های (C) ویژگی‌های توضیح داده شده ارائه می‌کنم. برای انگیزه و جزئیات پیاده‌سازی آنها را بررسی کنید.

  • 2024-08-02

    نسخه 1.23

    • حلقه‌های for می‌توانند بر روی توابع تکرارگر (iterator) تکرار کنند.
    • بسته جدید iter با انواع تکرارگر.
    • تکرارگرهای برش (slice) در بسته slices.
    • تکرارگرهای نقشه (map) در بسته maps.
    • Timerها و Tickerها که دیگر به وسیله برنامه ارجاع داده نمی‌شوند، بلافاصله برای جمع‌آوری زباله (garbage collection) واجد شرایط می‌شوند.
    • از دریافت‌های منسوخ پس از اینکه Timerها و Tickerها Stop/Reset را برگردانند، اجتناب کنید.
    • بسته جدید unique امکاناتی برای استانداردسازی مقادیر ارائه می‌دهد.

    یادداشت‌های نسخه

  • 2023-08-02

    نسخه 1.21

    • توابع داخلی جدید min و max کوچک‌ترین/بزرگ‌ترین مقدار را از بین آرگومان‌ها محاسبه می‌کنند.
    • تابع داخلی جدید clear تمام عناصر یک نقشه را حذف یا تمام عناصر یک برش (slice) را صفر می‌کند.
    • بسته جدید log/slog لاگ‌برداری ساختاریافته با سطوح مختلف را فراهم می‌کند.
    • بسته جدید slices عملیات‌های رایج زیادی را بر روی برش‌ها (slices) فراهم می‌کند.
    • بسته جدید maps چندین عملیات رایج را بر روی نقشه‌ها (maps) فراهم می‌کند.
    • بسته جدید cmp برای کار با انواع مرتب‌شده (ordered types).
    • بهینه‌سازی مبتنی بر پروفایل (PGO) بهینه‌سازی‌ها را بر اساس اطلاعات پروفایل زمان اجرا انجام می‌دهد.
    • پورت WebAssembly System Interface.

    یادداشت‌های نسخه

  • 2023-02-02

    نسخه 1.20

    • تبدیل از یک برش (slice) به یک آرایه (array) مجاز شده است.
    • مقادیر ساختارها (struct) به صورت فیلد به فیلد و به ترتیب تعریف مقایسه می‌شوند.
    • انواع قابل مقایسه حالا می‌توانند محدودیت‌های comparable را برآورده کنند، حتی اگر آرگومان‌های نوع به طور دقیق قابل مقایسه نباشند.
    • امکان بسته‌بندی چندین خطا (error) فراهم شده است.
    • راهی برای لغو یک context.Context با یک خطای خاص (“cause”) وجود دارد.
    • رشته‌های فرمت time جدید برای سازگاری با استانداردهای بین‌المللی.
    • بسته جدید crypto/ecdh پشتیبانی از پروتکل Elliptic Curve Diffie-Hellman را فراهم می‌کند.
    • دستور go اکنون به طور پیش‌فرض cgo را در سیستم‌هایی که ابزارهای C ندارند، غیرفعال می‌کند.

    یادداشت‌های نسخه

  • 2022-08-02

    نسخه 1.19

    • مدل حافظه بازنگری شده است.
    • محدودیت نرم حافظه برای مقدار کل حافظه‌ای که Go استفاده می‌کند.
    • محدودیت استفاده کلی CPU توسط GC به 50%، به استثنای زمان بیکاری.
    • انواع اتمیک جدید در بسته sync/atomic.
    • پشتیبانی از لینک‌ها، لیست‌ها، و عناوین واضح‌تر در نظرات مستندات (doc comments).

    یادداشت‌های نسخه

  • 2022-03-15

    نسخه 1.18

    • برنامه‌نویسی عمومی با استفاده از پارامترهای نوع.
    • بسته جدید debug/buildinfo دسترسی به نسخه‌های ماژول و فلگ‌های ساخت را که در فایل‌های اجرایی جاسازی شده‌اند، فراهم می‌کند.
    • بسته جدید net/netip نوع آدرس IP بهتر و توابع کمکی را تعریف می‌کند.
    • دستور go get دیگر بسته‌ها را نمی‌سازد یا نصب نمی‌کند.
    • آزمون تصادفی (Fuzzing).

    یادداشت‌های نسخه

  • 2021-08-16

    نسخه 1.17

    • اجازه تبدیل از یک برش (slice) به اشاره‌گر به آرایه (array pointer) داده شده است.
    • بسته runtime/cgo تسهیلات متمرکزی برای مدیریت اشیاء اشاره‌گر (c)go فراهم می‌کند.
    • محدودیت‌های ساخت مقاوم در برابر اشکال با استفاده از دستور go:build.

    یادداشت‌های نسخه

  • 2021-02-16

    نسخه 1.16

    • جاسازی فایل‌ها در فایل اجرایی با استفاده از دستور go:embed.
    • بسته جدید runtime/metrics رابط پایداری برای خواندن معیارهای تعریف‌شده توسط پیاده‌سازی از زمان اجرای Go معرفی می‌کند.
    • بسته جدید io/fs رابط‌های سیستم فایل را فراهم می‌کند.
    • بسته io/ioutil منسوخ شده است.
    • حالت آگاه به ماژول به طور پیش‌فرض فعال شده است (GO111MODULE=on).
    • دستورهای ساخت مانند go build به طور پیش‌فرض go.mod و go.sum را تغییر نمی‌دهند.

    یادداشت‌های نسخه

  • 2020-02-25

    نسخه 1.14

    • اجازه جاسازی رابط‌های همپوشان (overlapping interfaces) داده شده است.
    • گوروتین‌ها (goroutines) اکنون به صورت ناهمزمان قابل پیش‌گیری (preemptible) هستند.
    • بسته جدید hash/maphash توابع هش روی دنباله‌های بایت را فراهم می‌کند.

    یادداشت‌های نسخه

  • 2019-09-03

    نسخه 1.13

    • مجموعه‌ای یکنواخت و مدرن از پیشوندهای عددی.
    • اجازه استفاده از مقادیر صحیح امضا شده به عنوان شمارش جابجایی.
    • بسته‌بندی خطاها (Error wrapping).
    • بسته جدید crypto/ed25519 طرح امضای Ed25519 را پیاده‌سازی می‌کند.

    یادداشت‌های نسخه

  • 2018-08-24

    نسخه 1.11

    • ماژول‌ها به عنوان روشی برای مدیریت وابستگی‌ها.
    • پورت WebAssembly.

    یادداشت‌های نسخه

  • 2018-02-16

    نسخه 1.10

    • go build حافظه کشی از بسته‌های اخیراً ساخته‌شده را نگه می‌دارد.
    • go test نتایج تست را کش می‌کند و به‌طور خودکار go vet را اجرا می‌کند.

    یادداشت‌های نسخه

  • 2017-08-24

    نسخه 1.9

    • هم‌نام‌سازی نوع‌ها (Type aliases).
    • ساعت یکنواخت در بسته time.
    • بسته جدید math/bits برای دستکاری بیت‌ها.
    • نقشه هم‌زمان (Concurrent map) در بسته sync.
    • توابع کمکی تست در بسته testing.
    • کامپایل موازی (Parallel compilation).

    یادداشت‌های نسخه

  • 2017-02-16

    نسخه 1.8

    • نادیده گرفتن برچسب‌ها (tags) هنگام تبدیل یک مقدار از یک نوع ساختار به نوع دیگر.
    • جمع‌آوری زباله (garbage collector) دیگر به‌طور مداوم آرگومان‌ها را در طول کل تابع زنده در نظر نمی‌گیرد.
    • توابع مربوط به برش‌ها (slice) در بسته sort.
    • ارسال pushهای سرور HTTP/2 در بسته net/http.
    • خاموشی نرم سرور HTTP در بسته net/http.
    • پشتیبانی از Context در بسته database/sql.

    یادداشت‌های نسخه

  • 2016-08-15

    نسخه 1.7

    • بسته جدید context برای کار با مهلت‌ها و لغو.
    • بسته جدید net/http/httptrace برای ردیابی رویدادها در درخواست‌های HTTP.
    • زیر-تست‌ها و زیر-بنچمارک‌ها در بسته testing.

    یادداشت‌های نسخه

  • 2015-08-19

    نسخه 1.5

    • کامپایلر و زمان اجرا به‌طور کامل در Go نوشته شده‌اند.
    • جمع‌آوری زباله (garbage collection) هم‌زمان.
    • به‌طور پیش‌فرض، GOMAXPROCS به تعداد هسته‌های در دسترس تنظیم می‌شود.
    • بسته‌های داخلی.
    • دستور go tool trace برای ردیابی دقیق اجرای برنامه.
    • دستور go doc برای ساخت مستندات بسته.

    یادداشت‌های نسخه

  • 2014-12-10

    نسخه 1.4

    • حلقه for-range بدون متغیرها.
    • عدم اجازه فراخوانی متدها بر روی **T.
    • دستور go generate برای تولید کد منبع قبل از کامپایل.

    یادداشت‌های نسخه

  • 2013-12-01

    نسخه 1.2

    • هر بیانیه‌ای که صراحتاً یا ضمنی نیاز به ارزیابی یک آدرس nil داشته باشد، خطا است.
    • بیان کامل برش برای مشخص کردن ظرفیت و طول هنگام برش.
    • بسته جدید encoding مجموعه‌ای از رابط‌های کدگذاری استاندارد برای ساخت marshalers و unmarshalers سفارشی را فراهم می‌کند.
    • بسته جدید image/color/palette پالت‌های رنگی استاندارد را ارائه می‌دهد.
    • عملیات ایندکسینگ در مشخصات قالب‌بندی fmt.

    یادداشت‌های نسخه

  • 2013-05-13

    نسخه 1.1

    • تقسیم عدد صحیح بر صفر یک خطای زمان کامپایل است.
    • مقادیر متد.
    • شناسایی خطاهای هم‌زمان (Race detector).
    • بسته جدید go/format روشی برای دسترسی به قابلیت‌های قالب‌بندی دستور go fmt ارائه می‌دهد.
    • بسته جدید net/http/cookiejar اصول مدیریت کوکی‌های HTTP را فراهم می‌کند.

    [یادداشت‌های نسخه](https://tip.golang.org/doc/go1.1