Gopher Academy
3.84K subscribers
930 photos
41 videos
280 files
2.16K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
Slice Tails Don't Grow Forever

🟢 خلاصه مقاله:
** این مطلب از Golang Weekly توضیح می‌دهد که در Go، وقتی از یک slice یک “tail” مثل s[i:] می‌سازیم، رشد آن به capacity وابسته است و پایدار و بی‌نهایت نیست. تا وقتی capacity اجازه دهد، append روی همان آرایه‌ی پشتی انجام می‌شود؛ اما به‌محض عبور از capacity، runtime آرایه‌ی جدیدی می‌سازد و داده‌ها را کپی می‌کند، در نتیجه اشتراک حافظه با sliceهای قبلی از بین می‌رود. این رفتار هم می‌تواند باعث شگفتی در منطق اشتراک‌گذاری داده‌ها شود و هم روی کارایی و مصرف حافظه اثر بگذارد (مثلاً نگه‌داشتن یک زیر-slice کوچک می‌تواند یک آرایه‌ی بزرگ را در حافظه زنده نگه دارد). نتیجهٔ عملی: روی رشد بی‌نهایت tail حساب نکنید، خروجی append را یک slice بالقوه با آرایه‌ی پشتی جدید در نظر بگیرید، برای آزادسازی حافظه از copy استفاده کنید، در صورت نیاز capacity مناسب را از قبل با make در نظر بگیرید و حتماً با benchmark تصمیم بگیرید.

#Go #Golang #Slices #Append #MemoryManagement #Performance #GolangWeekly

🟣لینک مقاله:
https://golangweekly.com/link/175065/web


👑 @gopher_academy
🤝1
🔵 عنوان مقاله
Register Allocation in the Go Compiler

🟢 خلاصه مقاله:
** این یادداشت دو موضوع فنی اما اثرگذار بر کارایی در Go را کنار هم می‌گذارد: نحوه تخصیص ثبات در کامپایلر و این واقعیت که «دمِ Sliceها برای همیشه رشد نمی‌کند». بخش نخست با الهام از تجربه‌های Vladimir Makarov در دنیای تخصیص ثبات توضیح می‌دهد که پشت‌صحنه‌ی SSA در کامپایلر Go چگونه محدوده‌های حیات متغیرها را روی تعداد کمی ثبات سخت‌افزاری نگاشت می‌کند، φها را حل و حرکت‌ها را ادغام می‌کند و در صورت نیاز سرریز به پشته انجام می‌دهد. چالش اصلی، حفظ کیفیت کد (کاهش حرکت‌ها و سرریزها) در کنار سرعت بالای کامپایل است؛ و ایده‌هایی مانند ترکیب رویکردهای linear-scan و coloring، مدیریت دقیق ثبات‌های caller/callee-saved، سرریز در مسیرهای کم‌احتمال و rematerialization انتخابی به ایجاد این توازن کمک می‌کنند.

بخش دوم، با تکیه بر نوشته‌ی Ted Unangst، یادآور می‌شود که Slice در Go تنها وصله‌ای روی یک آرایه مشترک است: append می‌تواند باعث تخصیص دوباره و کپی شود، رشد ظرفیت با بزرگ‌تر شدن Slice کند می‌شود، و با sub-slice ممکن است حافظه‌ی «سرِ» حذف‌شده همچنان نگه داشته شود. «دمِ» Slice بدون ظرفیت کافی گسترش نمی‌یابد و برای رها شدن حافظه‌ی قدیمی باید گاهی به یک آرایه‌ی تازه کپی کنید. راهکارها شامل استفاده از make با ظرفیت مناسب، پرهیز از نگه‌داشتن referenceهای ناخواسته به آرایه‌ی بزرگ و کپی آگاهانه برای آزادسازی حافظه است.

جمع‌بندی: همان‌طور که انتخاب‌های تخصیص ثبات روی تعداد دستورها و سرریز اثر می‌گذارد، الگوهای کار با Slice نیز روی مصرف حافظه و فشار GC اثر دارند. درک این جزئیات به کدی چابک‌تر، تأخیر پایدارتر و رفتار قابل پیش‌بینی‌تر در سرویس‌های Go منجر می‌شود.

#Go #Golang #Compiler #RegisterAllocation #Performance #MemoryManagement #Slices #SystemsProgramming

🟣لینک مقاله:
https://golangweekly.com/link/175064/web


👑 @gopher_academy
1🎉1🍾1
🔵 عنوان مقاله
The new() Function Will Take an Expression in Go 1.26

🟢 خلاصه مقاله:
در Go 1.26 یک بهبود کوچک اما کاربردی می‌آید: تابع new() می‌تواند یک عبارت بگیرد، نه فقط یک نوع؛ Chris Siebenmann توضیح می‌دهد که این تغییر برخی الگوهای تخصیص و مقداردهی را ساده‌تر و خواناتر می‌کند. Tim Little با استفاده از raylib-go یک شبیه‌سازی آب بلادرنگ در Go می‌سازد و نشان می‌دهد چگونه می‌توان با ترکیب کارایی Go و سادگی raylib، رندر و فیزیک ساده را پیاده‌سازی کرد. Vladimir Makarov به تخصیص ثبات در کامپایلر Go می‌پردازد و تأثیر آن بر کارایی، استراتژی‌ها و ملاحظات بخش SSA را شرح می‌دهد. در نهایت، Ted Unangst یادآوری می‌کند که «دم» برش‌ها در Go بی‌نهایت رشد نمی‌کند و باید به ظرفیت، بازبرش و رفتار append توجه کرد تا از خطاها و افت کارایی جلوگیری شود.

#Go #Golang #Go126 #Compiler #RegisterAllocation #raylib #GameDev #Slices

🟣لینک مقاله:
https://golangweekly.com/link/175062/web


👑 @gopher_academy
2