Gopher Academy
📌 Memory Allocation in Go 🔹 در این پست به بررسی جزئیات مدیریت حافظه در زبان Go میپردازیم. درک درست از ساختار حافظه به شما کمک میکند عملکرد برنامههایتان را بهتر بهینه کنید و رفتار Garbage Collector را بهتر بفهمید. 🔵 Introduction 🔴 https://t.iss.one/gopher_academy/4231…
برای مدیریت بهینهی حافظه، Go حافظهی تخصیصدادهشده از طریق memory mapping را به واحدهای سلسلهمراتبی تقسیم میکند:
ساختار حافظه:
Arena (۶۴MB)
بزرگترین واحد تخصیص در Go.
هر Arena فضایی به اندازهی ثابت ۶۴MB دارد.
اGo سعی میکند Arenaها رو پشتسر هم قرار بده، ولی همیشه تضمین نمیشه (به خاطر رفتار mmap).
Page (۸KB)
هر Arena به صفحات (Page) تقسیم میشود.
سایز هر Page: ۸KB.
این Pageها با Pageهای سیستمعامل (معمولاً ۴KB) متفاوت هستند.
تخصیص اشیاء:
اگر اندازهی شیء کوچکتر از ۸KB باشد → چندین شیء در یک Page جا میگیرند.
اگر اندازهی شیء دقیقاً ۸KB باشد → کل Page را اشغال میکند.
اگر اندازهی شیء بزرگتر از ۸KB باشد → روی چند Page گسترده میشود.
اGoroutine Stack
استک هر goroutine در همین Pageها نگهداری میشود.
هر استک در ابتدا فقط ۲KB است.
بنابراین یک Page (۸KB) میتواند تا ۴ goroutine stack را در خود جا دهد.
به زبان ساده:
اGo حافظه را اول به Arena (۶۴MB) تقسیم میکند، سپس هر Arena را به Page (۸KB) میشکند و این Pageها برای اشیاء مختلف یا استک goroutineها استفاده میشوند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
ساختار حافظه:
Arena (۶۴MB)
بزرگترین واحد تخصیص در Go.
هر Arena فضایی به اندازهی ثابت ۶۴MB دارد.
اGo سعی میکند Arenaها رو پشتسر هم قرار بده، ولی همیشه تضمین نمیشه (به خاطر رفتار mmap).
Page (۸KB)
هر Arena به صفحات (Page) تقسیم میشود.
سایز هر Page: ۸KB.
این Pageها با Pageهای سیستمعامل (معمولاً ۴KB) متفاوت هستند.
تخصیص اشیاء:
اگر اندازهی شیء کوچکتر از ۸KB باشد → چندین شیء در یک Page جا میگیرند.
اگر اندازهی شیء دقیقاً ۸KB باشد → کل Page را اشغال میکند.
اگر اندازهی شیء بزرگتر از ۸KB باشد → روی چند Page گسترده میشود.
اGoroutine Stack
استک هر goroutine در همین Pageها نگهداری میشود.
هر استک در ابتدا فقط ۲KB است.
بنابراین یک Page (۸KB) میتواند تا ۴ goroutine stack را در خود جا دهد.
به زبان ساده:
اGo حافظه را اول به Arena (۶۴MB) تقسیم میکند، سپس هر Arena را به Page (۸KB) میشکند و این Pageها برای اشیاء مختلف یا استک goroutineها استفاده میشوند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
❤1👍1🏆1
🔵 عنوان مقاله
GoMLX: An Accelerated Machine Learning Framework for Go
🟢 خلاصه مقاله:
اGoMLX یک مجموعه کتابخانه و ابزار یادگیری ماشین برای زبان Go است که با تمرکز بر اجرای شتابگرفته و تجربهای سازگار با اکوسیستم Go ارائه میشود. این پروژه عملاً نقش جایگزینی برای PyTorch یا TensorFlow در دنیای Go را بازی میکند و ساخت مدل، آموزش، پردازش داده و استنتاج را با APIهای ساده و ایدئوماتیک Go ممکن میسازد. با وجود نام مشابه، هیچ ارتباطی با MLX از Apple ندارد و در حال حاضر فقط روی Linux قابل استفاده است؛ انتخابی که آن را برای محیطهای سروری و کانتینری رایج مناسب میکند.
#GoMLX #Go #MachineLearning #PyTorch #TensorFlow #Linux #MLOps
🟣لینک مقاله:
https://golangweekly.com/link/174649/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GoMLX: An Accelerated Machine Learning Framework for Go
🟢 خلاصه مقاله:
اGoMLX یک مجموعه کتابخانه و ابزار یادگیری ماشین برای زبان Go است که با تمرکز بر اجرای شتابگرفته و تجربهای سازگار با اکوسیستم Go ارائه میشود. این پروژه عملاً نقش جایگزینی برای PyTorch یا TensorFlow در دنیای Go را بازی میکند و ساخت مدل، آموزش، پردازش داده و استنتاج را با APIهای ساده و ایدئوماتیک Go ممکن میسازد. با وجود نام مشابه، هیچ ارتباطی با MLX از Apple ندارد و در حال حاضر فقط روی Linux قابل استفاده است؛ انتخابی که آن را برای محیطهای سروری و کانتینری رایج مناسب میکند.
#GoMLX #Go #MachineLearning #PyTorch #TensorFlow #Linux #MLOps
🟣لینک مقاله:
https://golangweekly.com/link/174649/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - gomlx/gomlx: GoMLX: An Accelerated Machine Learning Framework For Go
GoMLX: An Accelerated Machine Learning Framework For Go - gomlx/gomlx
❤2 1
🔵 عنوان مقاله
TableWriter 1.1: Render Rich Text-Based Tables
🟢 خلاصه مقاله:
جدولنویسی TableWriter 1.1 یک کتابخانه چندمنظوره برای رندر کردن جدولهای متنیِ خوانا در قالبهای مختلف است. خروجیهای استاندارد مانند ASCII، Unicode، Markdown و HTML را پوشش میدهد و برای ترمینالهای رنگی نیز مناسب است؛ بنابراین برای ابزارهای خط فرمان، گزارشها و مستندسازی انتخابی کاربردی محسوب میشود. تمرکز آن بر انعطافپذیری و خوانایی است تا با تنظیم چینش، فاصلهها و مرزبندی، دادههای متفاوت را به شکلی منظم نمایش دهد. README این پروژه با مثالهای فراوان، شروع کار را سریع و بیدردسر میکند.
#TableWriter #ASCII #Unicode #Markdown #HTML #Terminal #CLI #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/174651/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
TableWriter 1.1: Render Rich Text-Based Tables
🟢 خلاصه مقاله:
جدولنویسی TableWriter 1.1 یک کتابخانه چندمنظوره برای رندر کردن جدولهای متنیِ خوانا در قالبهای مختلف است. خروجیهای استاندارد مانند ASCII، Unicode، Markdown و HTML را پوشش میدهد و برای ترمینالهای رنگی نیز مناسب است؛ بنابراین برای ابزارهای خط فرمان، گزارشها و مستندسازی انتخابی کاربردی محسوب میشود. تمرکز آن بر انعطافپذیری و خوانایی است تا با تنظیم چینش، فاصلهها و مرزبندی، دادههای متفاوت را به شکلی منظم نمایش دهد. README این پروژه با مثالهای فراوان، شروع کار را سریع و بیدردسر میکند.
#TableWriter #ASCII #Unicode #Markdown #HTML #Terminal #CLI #OpenSource
🟣لینک مقاله:
https://golangweekly.com/link/174651/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - olekukonko/tablewriter: ASCII table in golang
ASCII table in golang. Contribute to olekukonko/tablewriter development by creating an account on GitHub.
❤2
🔵 عنوان مقاله
The Day the Linter Broke My Code
🟢 خلاصه مقاله:
**
روزِ خرابکاریِ linter یادآور این واقعیت است که تحلیل ایستا همیشه تمامِ زمینه را نمیبیند. یک «اصلاح بیضرر»—مثل حذف یک متغیر بهظاهر بلااستفاده—میتواند رفتار پنهانی یا الگوهای پویا را از کار بیندازد و کد را بشکند. راهحل، کنار گذاشتن linter نیست؛ بلکه تنظیم دقیق قوانین، پرهیز از autofix برای تغییرات معنایی، کاهش شدت برخی قوانین، افزودن مستندات و استثناهای صریح، و تکیه بر تستها و بازبینی انسانی است. از lint باید بهعنوان راهنما استفاده کرد، نه مرجع نهایی؛ بهویژه در کدهایی که با الگوهای پویا، reflection یا codegen کار میکنند. با بازخورد به نگهداران ابزارها، استفاده از حالتهای آگاه به نوع (مثل ESLint با TypeScript) و سیاستهای روشن در CI، میتوان مزایای lint را گرفت و ریسک «اصلاحات خطرناک» را کم کرد.
#linting #staticanalysis #codequality #developerexperience #CI #autofix #falsepositives #softwareengineering
🟣لینک مقاله:
https://golangweekly.com/link/174418/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
The Day the Linter Broke My Code
🟢 خلاصه مقاله:
**
روزِ خرابکاریِ linter یادآور این واقعیت است که تحلیل ایستا همیشه تمامِ زمینه را نمیبیند. یک «اصلاح بیضرر»—مثل حذف یک متغیر بهظاهر بلااستفاده—میتواند رفتار پنهانی یا الگوهای پویا را از کار بیندازد و کد را بشکند. راهحل، کنار گذاشتن linter نیست؛ بلکه تنظیم دقیق قوانین، پرهیز از autofix برای تغییرات معنایی، کاهش شدت برخی قوانین، افزودن مستندات و استثناهای صریح، و تکیه بر تستها و بازبینی انسانی است. از lint باید بهعنوان راهنما استفاده کرد، نه مرجع نهایی؛ بهویژه در کدهایی که با الگوهای پویا، reflection یا codegen کار میکنند. با بازخورد به نگهداران ابزارها، استفاده از حالتهای آگاه به نوع (مثل ESLint با TypeScript) و سیاستهای روشن در CI، میتوان مزایای lint را گرفت و ریسک «اصلاحات خطرناک» را کم کرد.
#linting #staticanalysis #codequality #developerexperience #CI #autofix #falsepositives #softwareengineering
🟣لینک مقاله:
https://golangweekly.com/link/174418/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
👍1