🔵 عنوان مقاله
[ On | No ] Syntactic Support for Error Handling
🟢 خلاصه مقاله:
در طول سالها، موضوع نحوه مدیریت خطاها در زبان برنامهنویسی Go و امکان بهبود نحو (سینتکس) در این زمینه همواره مورد بحث بوده است. توسعهدهندگان و جامعه برنامهنویسان بارها درباره بهترین شیوهها و امکاناتی که میتواند کار را سادهتر و قابل فهمتر کند، گفتگو کردهاند. برخی پیشنهادها برای تغییرات در نحوه نوشتن و برخورد با خطاها ارائه شده، اما به نظر میرسد که حفظ روال کنونی تاکنون مزایای خاص خود را داشته است. در ماه ژوئن، رابرت به تفصیل به این موضوع پرداخت، مشکلات موجود در سیستم کنونی، پیشنهادهای در حال بررسی و مزایای ادامه پیروی از وضع موجود را شرح داد. این بحثها نشان میدهد که هر چند ممکن است در آینده تغییراتی صورت گیرد، اما در حال حاضر نگه داشتن حالت فعلی مزایای زیادی دارد و جایگزین مناسبی است.
در پایان، اهمیت دارد که توسعهدهندگان همچنان بر راهکارهای مؤثر و قابل فهم تمرکز کنند و سعی نکنند همیشه تغییرات سریع و دائمی در سیستمهای بنیادی ایجاد کنند، مگر آنکه مزایای آن بسیار بیشتر باشد. در چنین مباحثی، اعتماد به راهکارهای آزمایششده و ثابت کردن کارایی آنها، میتواند به ثبات و پیشرفت بهتر پروژههای نرمافزاری کمک کند.
#خطاکنترل #برنامهنویسی #گو #سینتکس
🟣لینک مقاله:
https://golangweekly.com/link/178532/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
[ On | No ] Syntactic Support for Error Handling
🟢 خلاصه مقاله:
در طول سالها، موضوع نحوه مدیریت خطاها در زبان برنامهنویسی Go و امکان بهبود نحو (سینتکس) در این زمینه همواره مورد بحث بوده است. توسعهدهندگان و جامعه برنامهنویسان بارها درباره بهترین شیوهها و امکاناتی که میتواند کار را سادهتر و قابل فهمتر کند، گفتگو کردهاند. برخی پیشنهادها برای تغییرات در نحوه نوشتن و برخورد با خطاها ارائه شده، اما به نظر میرسد که حفظ روال کنونی تاکنون مزایای خاص خود را داشته است. در ماه ژوئن، رابرت به تفصیل به این موضوع پرداخت، مشکلات موجود در سیستم کنونی، پیشنهادهای در حال بررسی و مزایای ادامه پیروی از وضع موجود را شرح داد. این بحثها نشان میدهد که هر چند ممکن است در آینده تغییراتی صورت گیرد، اما در حال حاضر نگه داشتن حالت فعلی مزایای زیادی دارد و جایگزین مناسبی است.
در پایان، اهمیت دارد که توسعهدهندگان همچنان بر راهکارهای مؤثر و قابل فهم تمرکز کنند و سعی نکنند همیشه تغییرات سریع و دائمی در سیستمهای بنیادی ایجاد کنند، مگر آنکه مزایای آن بسیار بیشتر باشد. در چنین مباحثی، اعتماد به راهکارهای آزمایششده و ثابت کردن کارایی آنها، میتواند به ثبات و پیشرفت بهتر پروژههای نرمافزاری کمک کند.
#خطاکنترل #برنامهنویسی #گو #سینتکس
🟣لینک مقاله:
https://golangweekly.com/link/178532/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go.dev
[ On | No ] syntactic support for error handling - The Go Programming Language
Go team plans around error handling support
❤1
🔵 عنوان مقاله
filesql: SQL Driver for CSV, TSV, XLSX Files, and More
🟢 خلاصه مقاله:
فایلاسکوال، درایور SQL بر پایهٔ SQLite است که امکان دسترسی به دادههای موجود در فایلهای مختلفی مانند CSV، TSV، LTSV، فایلهای پارکت و اکسل (XLSX) را به زبان برنامهنویسی گو فراهم میکند. این ابزار قدرتمند، توسعهدهندگان را قادر میسازد تا بدون نیاز به وارد کردن دادهها به پایگاه دادههای سنتی، با این فایلهای متنوع به صورت مستقیم و آسان کار کنند. استفاده از فایلاسکوال مخصوصاً در پروژههایی که با دادههای خام و فایلهای متنی و اکسل سروکار دارند، بسیار کاربردی است و میتواند فرآیند تحلیل دادهها را سرعت بخشد و کارایی توسعه را افزایش دهد.
این درایور به تحلیلگرانی که نیاز دارند به سرعت و به شکلی کارآمد با انواع فایلهای دادهای کار کنند، یک گزینه بسیار مناسب است. با توجه به اینکه بر پایهٔ SQLite ساخته شده است، امکانات پیشرفتهٔ SQL و سازگاری با زبانهای مختلف را در اختیار کاربران قرار میدهد. این ویژگیها، فایلاسکوال را به ابزاری مهم در حوزه تحلیل داده و توسعه برنامههای کاربردی تبدیل کرده است، به طوری که میتواند جایگزین مناسبی برای وارد کردن دادهها به پایگاههای سنتی باشد و تجربه کاربری بینقصی را ارائه دهد.
#فایلاسکوال #SQLدرایور #دادههای_خام #تحلیل_داده
🟣لینک مقاله:
https://golangweekly.com/link/178268/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
filesql: SQL Driver for CSV, TSV, XLSX Files, and More
🟢 خلاصه مقاله:
فایلاسکوال، درایور SQL بر پایهٔ SQLite است که امکان دسترسی به دادههای موجود در فایلهای مختلفی مانند CSV، TSV، LTSV، فایلهای پارکت و اکسل (XLSX) را به زبان برنامهنویسی گو فراهم میکند. این ابزار قدرتمند، توسعهدهندگان را قادر میسازد تا بدون نیاز به وارد کردن دادهها به پایگاه دادههای سنتی، با این فایلهای متنوع به صورت مستقیم و آسان کار کنند. استفاده از فایلاسکوال مخصوصاً در پروژههایی که با دادههای خام و فایلهای متنی و اکسل سروکار دارند، بسیار کاربردی است و میتواند فرآیند تحلیل دادهها را سرعت بخشد و کارایی توسعه را افزایش دهد.
این درایور به تحلیلگرانی که نیاز دارند به سرعت و به شکلی کارآمد با انواع فایلهای دادهای کار کنند، یک گزینه بسیار مناسب است. با توجه به اینکه بر پایهٔ SQLite ساخته شده است، امکانات پیشرفتهٔ SQL و سازگاری با زبانهای مختلف را در اختیار کاربران قرار میدهد. این ویژگیها، فایلاسکوال را به ابزاری مهم در حوزه تحلیل داده و توسعه برنامههای کاربردی تبدیل کرده است، به طوری که میتواند جایگزین مناسبی برای وارد کردن دادهها به پایگاههای سنتی باشد و تجربه کاربری بینقصی را ارائه دهد.
#فایلاسکوال #SQLدرایور #دادههای_خام #تحلیل_داده
🟣لینک مقاله:
https://golangweekly.com/link/178268/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - nao1215/filesql: sql driver for CSV, TSV, LTSV, Parquet, Excel with gzip, bzip2, xz, zstd support.
sql driver for CSV, TSV, LTSV, Parquet, Excel with gzip, bzip2, xz, zstd support. - nao1215/filesql
👍1
🔵 عنوان مقاله
Memory Allocation in Go
🟢 خلاصه مقاله:
در برنامهنویسی با زبان Go، تخصیص و مدیریت بهینه حافظه نقش بسیار اساسی در عملکرد و قابلیت اطمینان برنامهها دارد. اگرچه این زبان تا حد زیادی پیچیدگیهای مربوط به حافظه را مخفی میکند و فرآیندهای آن را سادهتر میسازد، ولی داشتن شناختی جامع درباره نحوه کارکرد سیستم حافظه در کنار نحوه مدیریت آن، میتواند در بهبود کارایی و رفع اشکالات موثر باشد.
در واقع، درک بهتر فرآیند تخصیص حافظه در زبان Go به برنامهنویسان کمک میکند تا مشکلات مربوط به حافظه مانند نشت حافظه یا تخصیص نادرست را بهدرستی شناسایی و برطرف کنند. این امر به ویژه در برنامههایی با نیازهای عملکردی بالا و میزان زیادی داده اهمیت پیدا میکند، زیرا مدیریت هوشمندانه حافظه میتواند تاثیر عظیمی در کاهش زمان اجرایی و مصرف منابع داشته باشد.
در نتیجه، هرچند Go تلاش میکند جزئیات پیچیده حافظه را از دید برنامهنویس مخفی نگه دارد، اما اطلاع داشتن از فرآیندهای زیرساختی، اعم از نحوه تخصیص بخشهایی مانند Heap و Stack و مدیریت Garbage Collector، میتواند اطمینان بیشتری نسبت به کارایی برنامههایتان فراهم آورد و در توسعه برنامههایی کارآمد و پایدار نقش مؤثری ایفا میکند.
#برنامهنویسی #حافظه #Go #توسعه_نرمافزار
🟣لینک مقاله:
https://golangweekly.com/link/178537/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Memory Allocation in Go
🟢 خلاصه مقاله:
در برنامهنویسی با زبان Go، تخصیص و مدیریت بهینه حافظه نقش بسیار اساسی در عملکرد و قابلیت اطمینان برنامهها دارد. اگرچه این زبان تا حد زیادی پیچیدگیهای مربوط به حافظه را مخفی میکند و فرآیندهای آن را سادهتر میسازد، ولی داشتن شناختی جامع درباره نحوه کارکرد سیستم حافظه در کنار نحوه مدیریت آن، میتواند در بهبود کارایی و رفع اشکالات موثر باشد.
در واقع، درک بهتر فرآیند تخصیص حافظه در زبان Go به برنامهنویسان کمک میکند تا مشکلات مربوط به حافظه مانند نشت حافظه یا تخصیص نادرست را بهدرستی شناسایی و برطرف کنند. این امر به ویژه در برنامههایی با نیازهای عملکردی بالا و میزان زیادی داده اهمیت پیدا میکند، زیرا مدیریت هوشمندانه حافظه میتواند تاثیر عظیمی در کاهش زمان اجرایی و مصرف منابع داشته باشد.
در نتیجه، هرچند Go تلاش میکند جزئیات پیچیده حافظه را از دید برنامهنویس مخفی نگه دارد، اما اطلاع داشتن از فرآیندهای زیرساختی، اعم از نحوه تخصیص بخشهایی مانند Heap و Stack و مدیریت Garbage Collector، میتواند اطمینان بیشتری نسبت به کارایی برنامههایتان فراهم آورد و در توسعه برنامههایی کارآمد و پایدار نقش مؤثری ایفا میکند.
#برنامهنویسی #حافظه #Go #توسعه_نرمافزار
🟣لینک مقاله:
https://golangweekly.com/link/178537/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Melatoni
Memory Allocation in Go
توی نسخههای جدید Go یک قابلیت تازه و البته آزمایشی اضافه شده که حسابی سروصدا کرده: Green Tea.
قبل از اینکه بریم سراغش، بد نیست یادآوری کنیم مدل قدیمی GC چه مشکلی داشت.
در نسخههای قبلی، GC هیچ اطلاعاتی نداشت که بین دو Cycle دقیقا کجای حافظه تغییر کرده. برای همین مجبور بود هر بار کل هیپ رو اسکن کنه؛ حتی اگر فقط چند درصدش دست خورده بود. نتیجه؟ مصرف بالای CPU، کمکگیری سنگین از mutator assist و یهسری وقفه های ریز که روی تجربهی اجرا تاثیر میذاشت.
تو رویکرد جدید،گو میاد heap رو به segmentهای کوچیک تقسیم میکنه و هر موقع allocation یا pointer write اتفاق میافته، فقط همون segment بهعنوان dirty علامت میخوره. وقتی GC شروع میشه، دیگه خبری از اسکن کل heap نیست؛ فقط بخشهایی بررسی میشن که واقعا تغییر کردن در طول یک چرخه
خروجی این تغییر هم کاملا ملموسه: کاهش مصرف CPU (تا حدود ۳۵٪ طبق گزارشها)و وقفه های GC کوتاهتر و کممزاحمتر.
| <Go Talk/>
قبل از اینکه بریم سراغش، بد نیست یادآوری کنیم مدل قدیمی GC چه مشکلی داشت.
در نسخههای قبلی، GC هیچ اطلاعاتی نداشت که بین دو Cycle دقیقا کجای حافظه تغییر کرده. برای همین مجبور بود هر بار کل هیپ رو اسکن کنه؛ حتی اگر فقط چند درصدش دست خورده بود. نتیجه؟ مصرف بالای CPU، کمکگیری سنگین از mutator assist و یهسری وقفه های ریز که روی تجربهی اجرا تاثیر میذاشت.
تو رویکرد جدید،گو میاد heap رو به segmentهای کوچیک تقسیم میکنه و هر موقع allocation یا pointer write اتفاق میافته، فقط همون segment بهعنوان dirty علامت میخوره. وقتی GC شروع میشه، دیگه خبری از اسکن کل heap نیست؛ فقط بخشهایی بررسی میشن که واقعا تغییر کردن در طول یک چرخه
خروجی این تغییر هم کاملا ملموسه: کاهش مصرف CPU (تا حدود ۳۵٪ طبق گزارشها)و وقفه های GC کوتاهتر و کممزاحمتر.
| <Go Talk/>
❤4👍3🏆1🍾1👾1
بازار کار برنامه نویسی تو #ایران کاملا به ابتذال کشیده شده🫤
با دلار 132 هزارتومنی، اکثر برنامه نویسای هموطن 400،300 دلار درآمد دارن !
( بماند که برخی با حقوق وزرات کار 150 دلاری کار میکنن )
کاری به آمریکا و کانادا نداریم که 4000 تا 8000 دلار میانگین درآمد دارن، ولی ینی در حد هند و پاکستان هم نیستیم که 1000 دلار دربیاریم ؟!
رفقای عزیزم اگه زیر 130 میلیون درآمد دارین، تلاش کنید پروژه های دلاری بگیرید ..
اگه زبانتون خوب نیست روی یادگیری زبان تمرکز کنید چون روز به روز داره وضعیت #برنامه_نویسی تو ایران مبتذل تر میشه!
تو مملکتی که قیمت ماست و پنیر امروز با دیروز فرق میکنه و بستگی به قیمت دلار داره، باید دلاری کار کرد واگرنه روز به روز #قدرت_خرید کمتر و کمتر میشه ..
✍🏻 Ahmad Ahmad-Nejad
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
با دلار 132 هزارتومنی، اکثر برنامه نویسای هموطن 400،300 دلار درآمد دارن !
( بماند که برخی با حقوق وزرات کار 150 دلاری کار میکنن )
کاری به آمریکا و کانادا نداریم که 4000 تا 8000 دلار میانگین درآمد دارن، ولی ینی در حد هند و پاکستان هم نیستیم که 1000 دلار دربیاریم ؟!
رفقای عزیزم اگه زیر 130 میلیون درآمد دارین، تلاش کنید پروژه های دلاری بگیرید ..
اگه زبانتون خوب نیست روی یادگیری زبان تمرکز کنید چون روز به روز داره وضعیت #برنامه_نویسی تو ایران مبتذل تر میشه!
تو مملکتی که قیمت ماست و پنیر امروز با دیروز فرق میکنه و بستگی به قیمت دلار داره، باید دلاری کار کرد واگرنه روز به روز #قدرت_خرید کمتر و کمتر میشه ..
✍🏻 Ahmad Ahmad-Nejad
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
👍15🍾2🔥1🕊1🏆1
🔵 عنوان مقاله
go tool is One of Go's Best Additions in Years
🟢 خلاصه مقاله:
ابزار go یکی از بهترین افزونههای زبان گو در سالهای اخیر به شمار میرود که تغییرات چشمگیری ایجاد کرده است. این ابزار جدید، با ارائه قابلیتهایی که کار توسعهدهندگان را بسیار آسانتر کرده است، موجی از هیجان را در جامعه برنامهنویسان برانگیخته است.
با ورود نسخه ۱.۲۴ زبان گو، این ابزار قابلیتهای مهمی در مدیریت وابستگیها به خود اختصاص داد. حالا توسعهدهندگان میتوانند به سادگی و با صرف زمان کمتر، وابستگیهای پروژههای خود را مدیریت و هماهنگ کنند. این ویژگی نه تنها فرآیند توسعه را روانتر کرده است، بلکه خطاهای مربوط به تداخل نسخهها را کاهش داد و توسعه سریعتر و مطمئنتر را ممکن ساخته است.
علاوه بر این، بهبودهای عملکردی نیز در این نسخه مشاهده میشود. ابزار go با بهرهگیری از سیستم کش، اجرای فرآیندها را سریعتر کرده است، به طوری که زمان ساخت پروژهها به شدت کاهش یافته و بهرهوری تیم توسعه بالا رفته است. همچنین، با کاهش حجم وابستگیهای غیرضروری، پروژهها سبکتر و کمحجمتر شدهاند که این امر در بهبود کارایی و کاهش نیاز به منابع سیستمی بسیار موثر است.
در نتیجه، این بهروزرسانی نشان میدهد که تیم توسعه زبان گو همچنان در جهت بهبود و ارتقای ابزارهای خود قدم برداشته است. ابزار go در نسخه ۱.۲۴، نه تنها فرآیند توسعه را سادهتر و سریعتر کرده، بلکه باعث صرفهجویی در زمان و منابع شده است، که این امر اهمیت زیادی در پروژههای بزرگ و پیچیده دارد.
#ابزارگو #پیشرفت_توسعه #مدیریت_وابستگی #بهبود_عملکرد
🟣لینک مقاله:
https://golangweekly.com/link/178536/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
go tool is One of Go's Best Additions in Years
🟢 خلاصه مقاله:
ابزار go یکی از بهترین افزونههای زبان گو در سالهای اخیر به شمار میرود که تغییرات چشمگیری ایجاد کرده است. این ابزار جدید، با ارائه قابلیتهایی که کار توسعهدهندگان را بسیار آسانتر کرده است، موجی از هیجان را در جامعه برنامهنویسان برانگیخته است.
با ورود نسخه ۱.۲۴ زبان گو، این ابزار قابلیتهای مهمی در مدیریت وابستگیها به خود اختصاص داد. حالا توسعهدهندگان میتوانند به سادگی و با صرف زمان کمتر، وابستگیهای پروژههای خود را مدیریت و هماهنگ کنند. این ویژگی نه تنها فرآیند توسعه را روانتر کرده است، بلکه خطاهای مربوط به تداخل نسخهها را کاهش داد و توسعه سریعتر و مطمئنتر را ممکن ساخته است.
علاوه بر این، بهبودهای عملکردی نیز در این نسخه مشاهده میشود. ابزار go با بهرهگیری از سیستم کش، اجرای فرآیندها را سریعتر کرده است، به طوری که زمان ساخت پروژهها به شدت کاهش یافته و بهرهوری تیم توسعه بالا رفته است. همچنین، با کاهش حجم وابستگیهای غیرضروری، پروژهها سبکتر و کمحجمتر شدهاند که این امر در بهبود کارایی و کاهش نیاز به منابع سیستمی بسیار موثر است.
در نتیجه، این بهروزرسانی نشان میدهد که تیم توسعه زبان گو همچنان در جهت بهبود و ارتقای ابزارهای خود قدم برداشته است. ابزار go در نسخه ۱.۲۴، نه تنها فرآیند توسعه را سادهتر و سریعتر کرده، بلکه باعث صرفهجویی در زمان و منابع شده است، که این امر اهمیت زیادی در پروژههای بزرگ و پیچیده دارد.
#ابزارگو #پیشرفت_توسعه #مدیریت_وابستگی #بهبود_عملکرد
🟣لینک مقاله:
https://golangweekly.com/link/178536/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Jamie Tanna | Software Engineer
Go 1.24's `go tool` is one of the best additions to the ecosystem in years · Jamie Tanna | Software Engineer
Why I'm very excited about `go tool` landing in Go 1.24.
❤1🏆1
📌 ا Green Tea GC چیست؟
ا Green Tea یک جمعکننده زباله (Garbage Collector) جدید و تجربی (experimental) در Go است که در Go 1.25 عرضه شده و میتوان آن را با flag
هدف اصلی Green Tea این است که:
✅ هزینهی CPU برای جمعآوری زباله را کاهش دهد
✅ کارایی حافظه را با Locality بهتر بالا ببرد
✅ و جمعآوری زباله را با الگوهای مدرن سختافزار همگامتر کند
⚙️ چرا Green Tea ایجاد شد؟
در GC معمولی :
🔹ا Garbage Collector با روش classique به صورت mark-sweep concurrent کار میکند.
🔹 این روش برای “پیمایش گراف اشارهگرها (pointers)” طراحی شده است که در سیستمهای کوچک خوب عمل میکند، اما در سیستمهای چند هسته (multi-core) و حجم زیاد heap مشکل دارد:
* پردازش پراکندهی حافظه باعث کاهش شدید cache locality میشود
*ا CPU زمان زیادی منتظر میماند تا دادهها از حافظه اصلی بارگذاری شوند (cache misses)
به عبارت دیگر، GC سنتی نمیداند حافظه چطور در RAM ذخیره شده است و همین باعث کاهش کارایی و مصرف غیرضروری CPU میشود.
🧠 3) تفاوت اصلی Green Tea با GC سنتی Go
📌 جمعآوری به جای *Objects*، بر اساس *Memory Blocks*
در GC سنتی، کار GC اینگونه است:
اما Green Tea به جای اینکه روی هر شیء (object) تمرکز کند، حافظه را در بلوکهای بزرگتر (spans) اسکن میکند و کار را روی آنها انجام میدهد:
این یعنی:
✔️ دادههایی که نزدیک هم هستند با هم پردازش میشوند
✔️ا cache locality بالاتر میرود
✔️ا CPU زمان کمتری منتظر کندی حافظه میماند ([Medium][2])
🧩 4) چه مزایایی دارد؟
بر اساس پست رسمی Go و تستها:
🚀 1. کاهش هزینهی GC
بسیاری از برنامهها 10% تا حتی 40% زمان صرفهجویی در GC دیدهاند.
🧠 2. افزایش Cache Locality
با پردازش بلوکهای حافظه به جای اشارهگرهای پراکنده،
ا CPU کمتر منتظر میماند تا داده از RAM بیاید.
⚙️ 3. آماده برای سختافزارهای مدرن
این روش میتواند از SIMD برای اسکن سریعتر حافظه استفاده کند که در سختافزارهای جدید عملکرد عالی دارد.
🌀 4. بهتر روی چند هسته
به خاطر روش span-based، میتوان کار GC را بهتر بین هستهها تقسیم کرد (work-stealing و parallel).
⚠️ 5) محدودیتها و نکات عملی
🔹 تجربی است: هنوز پیشفرض نیست و باید با
🔹 در بعضی بارهای کاری (workloads) ممکن است اثر خاصی نداشته باشد یا حتی کمی بدتر شود، مخصوصاً زمانی که حافظه به شکل پراکندهتر استفاده شود.
🔹 هدف تیم Go این است که در Go 1.26 بهصورت پیشفرض فعال شود اگر بازخورد کافی دریافت کنند.
📌 جمعبندی
ا Green Tea Garbage Collector نمایانگر یک گام بزرگ در طراحی حافظهی Go است:
✅ کاهش مصرف CPU در GC
✅ استفاده بهتر از حافظه و Cache
✅ انطباق با سختافزارهای چند هستهای
و در نهایت، **تبدیل شدن به GC پیشفرض در نسخههای آینده Go**، اگر بازخوردها مثبت باشد.
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
ا Green Tea یک جمعکننده زباله (Garbage Collector) جدید و تجربی (experimental) در Go است که در Go 1.25 عرضه شده و میتوان آن را با flag
GOEXPERIMENT=greenteagc فعال کرد. هدف اصلی Green Tea این است که:
✅ هزینهی CPU برای جمعآوری زباله را کاهش دهد
✅ کارایی حافظه را با Locality بهتر بالا ببرد
✅ و جمعآوری زباله را با الگوهای مدرن سختافزار همگامتر کند
⚙️ چرا Green Tea ایجاد شد؟
در GC معمولی :
🔹ا Garbage Collector با روش classique به صورت mark-sweep concurrent کار میکند.
🔹 این روش برای “پیمایش گراف اشارهگرها (pointers)” طراحی شده است که در سیستمهای کوچک خوب عمل میکند، اما در سیستمهای چند هسته (multi-core) و حجم زیاد heap مشکل دارد:
* پردازش پراکندهی حافظه باعث کاهش شدید cache locality میشود
*ا CPU زمان زیادی منتظر میماند تا دادهها از حافظه اصلی بارگذاری شوند (cache misses)
به عبارت دیگر، GC سنتی نمیداند حافظه چطور در RAM ذخیره شده است و همین باعث کاهش کارایی و مصرف غیرضروری CPU میشود.
🧠 3) تفاوت اصلی Green Tea با GC سنتی Go
📌 جمعآوری به جای *Objects*، بر اساس *Memory Blocks*
در GC سنتی، کار GC اینگونه است:
ترسیم گراف → دنبال کردن اشارهگرها به صورت پراکنده
اما Green Tea به جای اینکه روی هر شیء (object) تمرکز کند، حافظه را در بلوکهای بزرگتر (spans) اسکن میکند و کار را روی آنها انجام میدهد:
برای هر span:
اscan کل بلوک به صورت مرتب
این یعنی:
✔️ دادههایی که نزدیک هم هستند با هم پردازش میشوند
✔️ا cache locality بالاتر میرود
✔️ا CPU زمان کمتری منتظر کندی حافظه میماند ([Medium][2])
🧩 4) چه مزایایی دارد؟
بر اساس پست رسمی Go و تستها:
🚀 1. کاهش هزینهی GC
بسیاری از برنامهها 10% تا حتی 40% زمان صرفهجویی در GC دیدهاند.
🧠 2. افزایش Cache Locality
با پردازش بلوکهای حافظه به جای اشارهگرهای پراکنده،
ا CPU کمتر منتظر میماند تا داده از RAM بیاید.
⚙️ 3. آماده برای سختافزارهای مدرن
این روش میتواند از SIMD برای اسکن سریعتر حافظه استفاده کند که در سختافزارهای جدید عملکرد عالی دارد.
🌀 4. بهتر روی چند هسته
به خاطر روش span-based، میتوان کار GC را بهتر بین هستهها تقسیم کرد (work-stealing و parallel).
⚠️ 5) محدودیتها و نکات عملی
🔹 تجربی است: هنوز پیشفرض نیست و باید با
GOEXPERIMENT=greenteagc فعال شود.🔹 در بعضی بارهای کاری (workloads) ممکن است اثر خاصی نداشته باشد یا حتی کمی بدتر شود، مخصوصاً زمانی که حافظه به شکل پراکندهتر استفاده شود.
🔹 هدف تیم Go این است که در Go 1.26 بهصورت پیشفرض فعال شود اگر بازخورد کافی دریافت کنند.
📌 جمعبندی
ا Green Tea Garbage Collector نمایانگر یک گام بزرگ در طراحی حافظهی Go است:
✅ کاهش مصرف CPU در GC
✅ استفاده بهتر از حافظه و Cache
✅ انطباق با سختافزارهای چند هستهای
و در نهایت، **تبدیل شدن به GC پیشفرض در نسخههای آینده Go**، اگر بازخوردها مثبت باشد.
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
👍4
🔵 عنوان مقاله
The “10x” Commandments of Highly Effective Go
🟢 خلاصه مقاله:
در دنیای توسعه نرمافزار، بهویژه در زمینه برنامهنویسی با زبان Go، رویکردها و راهکارهای موثر نقش مهمی در موفقیت پروژهها دارند. جان، برنامهنویس و توسعهدهنده برجسته، مجموعهای از ده دستورالعمل طلایی را با عنوان «ده فرمان موثر در زبان Go» تدوین کرده است که میتواند راهنمایی کاربردی برای برنامهنویسان باشد. این اصول نه تنها جنبه فنی دارند، بلکه به رویکردهای ذهنی و استراتژیک نیز میپردازند تا توسعهدهندگان بتوانند کارایی، کارآمدی و کیفیت کدهای خود را افزایش دهند.
در این مجموعه، جان بر اهمیت بهرهگیری از تکنیکها و عادات صحیح تأکید میکند و به توسعهدهندگان یادآوری میکند که موفقیت در برنامهنویسی نیازمند بیوقفه تمرین، خلاقیت و توجه به جزئیات است. این ده فرمان نه تنها راهنماییهای ساده و کاربردی ارائه میدهند، بلکه روحیه ارتقاء مداوم و کار تیمی موثر را نیز تقویت میکنند. استفاده از این اصول میتواند به بهبود کیفیت کد، کاهش خطاها و تسریع روند توسعه کمک کند.
در کل، مجموعه «ده فرمان موثر در زبان Go» با رویکردی جذاب و در عین حال حرفهای، ابزارهای ارزشمندی در اختیار توسعهدهندگان قرار میدهد تا کارایی خود را ارتقاء دهند، پروژههای موفقتری خلق کنند و در مسیر حرفهای خود پیشرفت مستمر داشته باشند. این اصول، راهنمایی برای همه کسانی است که میخواهند در دنیای برنامهنویسی Go جایگاه ویژهای پیدا کنند.
#برنامهنویسی #Go #توسعه_نرمافزار #ده_فرمان
🟣لینک مقاله:
https://golangweekly.com/link/178528/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
The “10x” Commandments of Highly Effective Go
🟢 خلاصه مقاله:
در دنیای توسعه نرمافزار، بهویژه در زمینه برنامهنویسی با زبان Go، رویکردها و راهکارهای موثر نقش مهمی در موفقیت پروژهها دارند. جان، برنامهنویس و توسعهدهنده برجسته، مجموعهای از ده دستورالعمل طلایی را با عنوان «ده فرمان موثر در زبان Go» تدوین کرده است که میتواند راهنمایی کاربردی برای برنامهنویسان باشد. این اصول نه تنها جنبه فنی دارند، بلکه به رویکردهای ذهنی و استراتژیک نیز میپردازند تا توسعهدهندگان بتوانند کارایی، کارآمدی و کیفیت کدهای خود را افزایش دهند.
در این مجموعه، جان بر اهمیت بهرهگیری از تکنیکها و عادات صحیح تأکید میکند و به توسعهدهندگان یادآوری میکند که موفقیت در برنامهنویسی نیازمند بیوقفه تمرین، خلاقیت و توجه به جزئیات است. این ده فرمان نه تنها راهنماییهای ساده و کاربردی ارائه میدهند، بلکه روحیه ارتقاء مداوم و کار تیمی موثر را نیز تقویت میکنند. استفاده از این اصول میتواند به بهبود کیفیت کد، کاهش خطاها و تسریع روند توسعه کمک کند.
در کل، مجموعه «ده فرمان موثر در زبان Go» با رویکردی جذاب و در عین حال حرفهای، ابزارهای ارزشمندی در اختیار توسعهدهندگان قرار میدهد تا کارایی خود را ارتقاء دهند، پروژههای موفقتری خلق کنند و در مسیر حرفهای خود پیشرفت مستمر داشته باشند. این اصول، راهنمایی برای همه کسانی است که میخواهند در دنیای برنامهنویسی Go جایگاه ویژهای پیدا کنند.
#برنامهنویسی #Go #توسعه_نرمافزار #ده_فرمان
🟣لینک مقاله:
https://golangweekly.com/link/178528/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
The JetBrains Blog
The “10x” Commandments of Highly Effective Go | The GoLand Blog
What makes Go developers truly effective? In this guest post, John Arundel shares ten practical “commandments” of Go excellence – timeless lessons for writing cleaner, safer, and more maintainable Go code.
Gopher Academy
🚀 کد تمیز از AI بدون هزینه اضافه! ♥️این پرامت برای کاهش هزینه مصرف توکن و دریافت کد خالص و کاربردی طراحی شده است. 💸دیگه وقتی از Claude یا ChatGPT یا هر هوش مصنوعی دیگری برات کد تولید میکنه به صورت پیش فرض به ازای هر تغییری در کد با README، فایل تست، و…
☝️☝️☝️☝️
یه سری تغییرات و بهبود جدید اضافه کردم 👇
🔹 اضافه شدن پیام Git استاندارد بههمراه توضیح تغییرات
🔹 بهبود ساختار کلی ریپو
🔹 یه پرامت برای پشتیبانی از تمام زبانهای برنامهنویسی
🔹یه پرامت فقط مختص ستفاده از Golang
🔹یه پرامت هم اضافه شد برای بخش CI/CD Pipeline
یه سری تغییرات و بهبود جدید اضافه کردم 👇
🔹 اضافه شدن پیام Git استاندارد بههمراه توضیح تغییرات
🔹 بهبود ساختار کلی ریپو
🔹 یه پرامت برای پشتیبانی از تمام زبانهای برنامهنویسی
🔹یه پرامت فقط مختص ستفاده از Golang
🔹یه پرامت هم اضافه شد برای بخش CI/CD Pipeline
👍1
🔵 عنوان مقاله
numerous videos of talks from GopherCon 2025
🟢 خلاصه مقاله:
این هفته، تعداد زیادی ویدئو از سخنرانیهای کنفرانس GopherCon 2025 بر روی یوتیوب منتشر شده است. این رویداد، یکی از مهمترین همایشهای مختص زبان برنامهنویسی Go است که هر سال هزاران توسعهدهنده را گرد هم میآورد تا جدیدترین پیشرفتها، تجربیات و مباحث فنی در این حوزه را با یکدیگر به اشتراک بگذارند. در این ویدئوها، سخنرانان برجسته از شرکتها و تیمهای توسعه، موضوعات متنوعی از قبیل بهبود کارایی، فناوریهای نوین، ابزارهای توسعه و نکات کلیدی برنامهنویسی در زبان GO را مطرح کردهاند.
در حالی که در سال نو میلادی قصد داریم برخی از این سخنرانیها را در کنار هم معرفی کنیم، هماکنون ۱۴ عنوان سخنرانی از این کنفرانس در دسترس است که میتوانید تماشا کنید و از دانش و دیدگاههای متخصصان بهرهمند شوید. تماشای این ویدئوها فرصت بینظیری است برای هر توسعهدهندهای که میخواهد مهارتهای خود را در زمینه Go تقویت کند و با آخرین روندهای فنی آشنا شود.
در مجموع، این مجموعه ویدئوها نمایی کامل از سطح دانش و نوآوریهای جامعه برنامهنویسان Go ارائه میدهد و میتواند به عنوان منبعی غنی و ارزشمند برای یادگیری و توسعه حرفهای مورد استفاده قرار گیرد. پس اگر علاقهمند به دنیای برنامهنویسی هستید و میخواهید همگام با جدیدترین روندهای این حوزه پیش بروید، تماشای این سخنرانیها را از دست ندهید.
#برنامهنویسی #گو #کنفرانس_فنی #توسعه_فناوری
🟣لینک مقاله:
https://golangweekly.com/link/178523/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
numerous videos of talks from GopherCon 2025
🟢 خلاصه مقاله:
این هفته، تعداد زیادی ویدئو از سخنرانیهای کنفرانس GopherCon 2025 بر روی یوتیوب منتشر شده است. این رویداد، یکی از مهمترین همایشهای مختص زبان برنامهنویسی Go است که هر سال هزاران توسعهدهنده را گرد هم میآورد تا جدیدترین پیشرفتها، تجربیات و مباحث فنی در این حوزه را با یکدیگر به اشتراک بگذارند. در این ویدئوها، سخنرانان برجسته از شرکتها و تیمهای توسعه، موضوعات متنوعی از قبیل بهبود کارایی، فناوریهای نوین، ابزارهای توسعه و نکات کلیدی برنامهنویسی در زبان GO را مطرح کردهاند.
در حالی که در سال نو میلادی قصد داریم برخی از این سخنرانیها را در کنار هم معرفی کنیم، هماکنون ۱۴ عنوان سخنرانی از این کنفرانس در دسترس است که میتوانید تماشا کنید و از دانش و دیدگاههای متخصصان بهرهمند شوید. تماشای این ویدئوها فرصت بینظیری است برای هر توسعهدهندهای که میخواهد مهارتهای خود را در زمینه Go تقویت کند و با آخرین روندهای فنی آشنا شود.
در مجموع، این مجموعه ویدئوها نمایی کامل از سطح دانش و نوآوریهای جامعه برنامهنویسان Go ارائه میدهد و میتواند به عنوان منبعی غنی و ارزشمند برای یادگیری و توسعه حرفهای مورد استفاده قرار گیرد. پس اگر علاقهمند به دنیای برنامهنویسی هستید و میخواهید همگام با جدیدترین روندهای این حوزه پیش بروید، تماشای این سخنرانیها را از دست ندهید.
#برنامهنویسی #گو #کنفرانس_فنی #توسعه_فناوری
🟣لینک مقاله:
https://golangweekly.com/link/178523/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Youtube
- YouTube
Enjoy the videos and music you love, upload original content, and share it all with friends, family, and the world on YouTube.
❤1
🔵 عنوان مقاله
RobotGo 1.0: Native Cross-Platform GUI Automation
🟢 خلاصه مقاله:
نسخه ۱.۰ رباتگو: اتوماسیون گرافیکی چندپلتفرمی بومی
رباتگو یک ابزار قدرتمند است که به شما امکان میدهد با استفاده از آن کنترل کامل بر روی نشانگر موس، صفحهکلید و خواندن محتوای صفحه نمایش در سیستمهای مختلف مانند macOS، ویندوز و لینوکس (در محیط X11) داشته باشید. این چارچوب متنباز و حرفهای، راهی ساده و موثر برای اتوماسیون عملیاتهای گرافیکی در برنامهها و اسکریپتهای خود فراهم میکند.
گسترش این ابزار باعث شده تا توسعهدهندگان بتوانند به راحتی و بدون نیاز به نصب نرمافزارهای اضافی، وظایف تکراری را به صورت خودکار انجام دهند. از طریق رباتگو، میتوان عملیاتهایی مانند حرکت اوتوماتیک موس، فشردن کلیدهای مختلف، خواندن محتویات روی صفحه و تعامل با رابطهای کاربری را در سیستمعاملهای مختلف انجام داد. این پلتفرم بومی و چندپلتفرمی، انعطافپذیری و سرعت بالایی دارد و توسعهدهندگان را قادر میسازد بدون نگرانی درباره سازگاری، برنامههای اتوماسیون خود را پیادهسازی کنند.
در نتیجه، نسخه ۱.۰ رباتگو گامی مهم در مسیر توسعه ابزارهای اتوماسیونی مستقل و قابل اعتماد است که به راحتی در محیطهای مختلف عملیاتی میشود و کارایی برنامههای اتوماسیونی را به شکل قابل توجهی افزایش میدهد.
#اتوماسیون #رباتگو #گرافیکى #چندپلتفرم
🟣لینک مقاله:
https://golangweekly.com/link/178264/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
RobotGo 1.0: Native Cross-Platform GUI Automation
🟢 خلاصه مقاله:
نسخه ۱.۰ رباتگو: اتوماسیون گرافیکی چندپلتفرمی بومی
رباتگو یک ابزار قدرتمند است که به شما امکان میدهد با استفاده از آن کنترل کامل بر روی نشانگر موس، صفحهکلید و خواندن محتوای صفحه نمایش در سیستمهای مختلف مانند macOS، ویندوز و لینوکس (در محیط X11) داشته باشید. این چارچوب متنباز و حرفهای، راهی ساده و موثر برای اتوماسیون عملیاتهای گرافیکی در برنامهها و اسکریپتهای خود فراهم میکند.
گسترش این ابزار باعث شده تا توسعهدهندگان بتوانند به راحتی و بدون نیاز به نصب نرمافزارهای اضافی، وظایف تکراری را به صورت خودکار انجام دهند. از طریق رباتگو، میتوان عملیاتهایی مانند حرکت اوتوماتیک موس، فشردن کلیدهای مختلف، خواندن محتویات روی صفحه و تعامل با رابطهای کاربری را در سیستمعاملهای مختلف انجام داد. این پلتفرم بومی و چندپلتفرمی، انعطافپذیری و سرعت بالایی دارد و توسعهدهندگان را قادر میسازد بدون نگرانی درباره سازگاری، برنامههای اتوماسیون خود را پیادهسازی کنند.
در نتیجه، نسخه ۱.۰ رباتگو گامی مهم در مسیر توسعه ابزارهای اتوماسیونی مستقل و قابل اعتماد است که به راحتی در محیطهای مختلف عملیاتی میشود و کارایی برنامههای اتوماسیونی را به شکل قابل توجهی افزایش میدهد.
#اتوماسیون #رباتگو #گرافیکى #چندپلتفرم
🟣لینک مقاله:
https://golangweekly.com/link/178264/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
GitHub
GitHub - go-vgo/robotgo: RobotGo, Go Native cross-platform RPA, GUI automation, Auto test and Computer use @vcaesar
RobotGo, Go Native cross-platform RPA, GUI automation, Auto test and Computer use @vcaesar - go-vgo/robotgo
🔵 عنوان مقاله
An Interactive Tour of Go 1.25
🟢 خلاصه مقاله:
در این مطلب، به بررسی گام به گام نسخه ۱.۲۵ زبان برنامهنویسی Go میپردازیم. در واقع، آنتونی، توسعهدهنده و فعال در جامعه Go، قبلتر نگاهی جامعی به نسخه ۱.۲۴ این زبان داشت. بر اساس آمار، لینک دیدار او از نسخه ۱.۲۴، در طول سال جاری، دومین لینک پرکلیک دنیای توسعهدهندگان بود. این نشان میدهد که جامعه برنامهنویسان نسبت به بروزرسانی و امکانات جدید Go، علاقهمندی ویژهای نشان میدهد.
در این سفر تعاملی، قرار است ویژگیها و بهبودهای نسخه ۱.۲۵ با زبانی روشن و جزئیات کافی بررسی شود. هدف آن است که باسلیقهترین توسعهدهندگان هم بتوانند به شکل قابل فهم و جذابی با تغییرات این نسخه آشنا شوند و بهرهمند شوند. با ادامه این راهنمای تعاملی، نگاهی دقیقتر به بهبودهای فنی، قابلیتهای جدید و تغییراتی که توسعه برنامههای به مراتب بهتر را امکانپذیر میسازد، خواهیم داشت.
در مجموع، این بازدید رسمی و کامل از نسخه ۱.۲۵، فرصت مغتنمی برای توسعهدهندگان است تا با پیشرفتهای جاری در زبان محبوب Go آشنا شوند و از آن در پروژههای خود بهرهمند گردند. این محتوا، ضمن حفظ دقت، سعی کرده است که جریان منطقی و طبیعی مطالب را برای خوانندگان فارسیزبان فراهم کند، تا آنان بتوانند به راحتی با نسخه جدید این زبان برنامهنویسی آشنا شوند.
#برنامهنویسی #Go زبان #نسخه۱.۲۵ #توسعهدهندگان
🟣لینک مقاله:
https://golangweekly.com/link/178526/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
An Interactive Tour of Go 1.25
🟢 خلاصه مقاله:
در این مطلب، به بررسی گام به گام نسخه ۱.۲۵ زبان برنامهنویسی Go میپردازیم. در واقع، آنتونی، توسعهدهنده و فعال در جامعه Go، قبلتر نگاهی جامعی به نسخه ۱.۲۴ این زبان داشت. بر اساس آمار، لینک دیدار او از نسخه ۱.۲۴، در طول سال جاری، دومین لینک پرکلیک دنیای توسعهدهندگان بود. این نشان میدهد که جامعه برنامهنویسان نسبت به بروزرسانی و امکانات جدید Go، علاقهمندی ویژهای نشان میدهد.
در این سفر تعاملی، قرار است ویژگیها و بهبودهای نسخه ۱.۲۵ با زبانی روشن و جزئیات کافی بررسی شود. هدف آن است که باسلیقهترین توسعهدهندگان هم بتوانند به شکل قابل فهم و جذابی با تغییرات این نسخه آشنا شوند و بهرهمند شوند. با ادامه این راهنمای تعاملی، نگاهی دقیقتر به بهبودهای فنی، قابلیتهای جدید و تغییراتی که توسعه برنامههای به مراتب بهتر را امکانپذیر میسازد، خواهیم داشت.
در مجموع، این بازدید رسمی و کامل از نسخه ۱.۲۵، فرصت مغتنمی برای توسعهدهندگان است تا با پیشرفتهای جاری در زبان محبوب Go آشنا شوند و از آن در پروژههای خود بهرهمند گردند. این محتوا، ضمن حفظ دقت، سعی کرده است که جریان منطقی و طبیعی مطالب را برای خوانندگان فارسیزبان فراهم کند، تا آنان بتوانند به راحتی با نسخه جدید این زبان برنامهنویسی آشنا شوند.
#برنامهنویسی #Go زبان #نسخه۱.۲۵ #توسعهدهندگان
🟣لینک مقاله:
https://golangweekly.com/link/178526/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
antonz.org
Go 1.25 interactive tour
Fake clock, new GC, flight recorder and more.
🔵 عنوان مقاله
How Go 1.24's Swiss Tables 'Saved Us Hundreds of Gigabytes'
🟢 خلاصه مقاله:
در نسخه 1.24 زبان برنامهنویسی Go، یک تغییر مهم و تاثیرگذار صورت گرفت که نقش قابل توجهی در بهبود کارایی و کاهش مصرف حافظه داشت. این نسخه از زبان، با معرفی پیادهسازی نوع جدیدی از جدولهای «سوئیس» (Swiss Tables)، توانست میزان مصرف حافظه در برنامههای مبتنی بر نقشههای درون حافظهای (درایممپ) را به طور چشمگیری کاهش دهد.
تیم توسعهدهنده، پس از پیادهسازی این تکنولوژی نوین، به دقت نحوه عملکرد آن را پروفایل و ارزیابی کرد تا تاثیر واقعی بر مصرف حافظه را اندازهگیری کند. این بررسیها نشان داد که استفاده از «جدولهای سوئیس» چه میزان در صرفهجویی در حافظه مؤثر بوده است، بهخصوص در پروژههای بزرگ و با دادههای حجیم. در نهایت، با توجه به نیازهای بهینهسازی، تیم اقدام به اعمال تغییراتی در سطح ساختارهای داده کرد که این اصلاحات باعث شد صرفهجوییهای بیشتری حاصل شود.
نتیجه این بهبودها، کاهش قابل توجه در نیازهای حافظه برنامهها بود؛ بهطوریکه میتوان گفت در برخی موارد، صرفهجوییها حتی به صدها گیگابایت رسید. این موفقیت نشان میدهد که پیادهسازیهای هوشمندانه و بههنگام در سطح ساختارهای داده، نقش کلیدی در کارایی سیستمهای نرمافزاری دارند و میتوانند تحولات بزرگی در عملکرد برنامهها ایجاد کنند.
#برنامهنویسی #گو #حافظه #بهبودکارایی
🟣لینک مقاله:
https://golangweekly.com/link/178530/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How Go 1.24's Swiss Tables 'Saved Us Hundreds of Gigabytes'
🟢 خلاصه مقاله:
در نسخه 1.24 زبان برنامهنویسی Go، یک تغییر مهم و تاثیرگذار صورت گرفت که نقش قابل توجهی در بهبود کارایی و کاهش مصرف حافظه داشت. این نسخه از زبان، با معرفی پیادهسازی نوع جدیدی از جدولهای «سوئیس» (Swiss Tables)، توانست میزان مصرف حافظه در برنامههای مبتنی بر نقشههای درون حافظهای (درایممپ) را به طور چشمگیری کاهش دهد.
تیم توسعهدهنده، پس از پیادهسازی این تکنولوژی نوین، به دقت نحوه عملکرد آن را پروفایل و ارزیابی کرد تا تاثیر واقعی بر مصرف حافظه را اندازهگیری کند. این بررسیها نشان داد که استفاده از «جدولهای سوئیس» چه میزان در صرفهجویی در حافظه مؤثر بوده است، بهخصوص در پروژههای بزرگ و با دادههای حجیم. در نهایت، با توجه به نیازهای بهینهسازی، تیم اقدام به اعمال تغییراتی در سطح ساختارهای داده کرد که این اصلاحات باعث شد صرفهجوییهای بیشتری حاصل شود.
نتیجه این بهبودها، کاهش قابل توجه در نیازهای حافظه برنامهها بود؛ بهطوریکه میتوان گفت در برخی موارد، صرفهجوییها حتی به صدها گیگابایت رسید. این موفقیت نشان میدهد که پیادهسازیهای هوشمندانه و بههنگام در سطح ساختارهای داده، نقش کلیدی در کارایی سیستمهای نرمافزاری دارند و میتوانند تحولات بزرگی در عملکرد برنامهها ایجاد کنند.
#برنامهنویسی #گو #حافظه #بهبودکارایی
🟣لینک مقاله:
https://golangweekly.com/link/178530/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Datadog
How Go 1.24's Swiss Tables saved us hundreds of gigabytes | Datadog
Go 1.24's Swiss Tables cut our map memory usage by up to 70% in high-traffic workloads. Here's how we profiled the savings and improved performance.
❤4
🎙️ عنوان پادکست:
🎄 An Adventful Sweet 16 for Go! 🎂
خلاصه پادکست:
golang.org/x/crypto v0.45.0 released🎂 Blog post: Go's Sweet 16macOS 12 losing support in Go 1.27🗒️ Interview with Neil VassNeil's notesLearn Go with TestsChris Do Dev on YouTubeJonathan's joke assert library ★ Support this podcast on Patreon ★ ]]>
🎄 An Adventful Sweet 16 for Go! 🎂
خلاصه پادکست:
golang.org/x/crypto v0.45.0 released🎂 Blog post: Go's Sweet 16macOS 12 losing support in Go 1.27🗒️ Interview with Neil VassNeil's notesLearn Go with TestsChris Do Dev on YouTubeJonathan's joke assert library ★ Support this podcast on Patreon ★ ]]>
👍3
Forwarded from AI Labdon
https://youtu.be/HfJwezWWu08?t=426
یعنی این تیکه از صحبت های The PrimeTime انقدر دارک بود که دارم ناامید میشم به گیتهاب
اینکه CEO کل سازمان گیتهاب داره با AI میره جلو
حتی پالمر نقش پایین تری داره و این موضوع خیلی عجیبه
یعنی کل گیتهاب داره با هدایت هوش مصنوعی میره جلو؟
شهر عجیبیه
<Shayan GeeDook/>
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
یعنی این تیکه از صحبت های The PrimeTime انقدر دارک بود که دارم ناامید میشم به گیتهاب
اینکه CEO کل سازمان گیتهاب داره با AI میره جلو
حتی پالمر نقش پایین تری داره و این موضوع خیلی عجیبه
یعنی کل گیتهاب داره با هدایت هوش مصنوعی میره جلو؟
شهر عجیبیه
<Shayan GeeDook/>
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
❤1👾1
🔵 عنوان مقاله
A No Nonsense Guide to Go Project Layout
🟢 خلاصه مقاله:
در دنیای توسعه نرمافزار، سازماندهی پروژههای گو یکی از مهمترین عوامل موفقیت است. در مقالهای کاربردی و بدون حاشیه، نویسنده بر اهمیت دوری کردن از ساختارهای پیچیده و سنگین تأکید میکند و میگوید در پروژههای کوچک، بهتر است روی یک ساختار ساده و قابل فهم تمرکز کنید. این رویکرد نه تنها فرآیند توسعه را روانتر میکند، بلکه نگهداری کد و همکاری تیمی را نیز آسانتر میسازد.
نویسنده در این مقاله به خوانندگان توصیه میکند که از طراحی ساختارهایی با بستهبندیهای بیپایان و اغراقآمیز خودداری کنند و به جای آن، بر مرتبسازی منطقی و پایهای پروژه تمرکز نمایند. این کار باعث میشود که پروژههای کوچک و متوسط انعطافپذیری بیشتری داشته باشند و در مسیر رشد، دچار دشواری نشوند. همچنین، تکنیکها و راهکارهایی را برای جلوگیری از پیچیدگیهای بیمورد پیشنهاد میدهد تا توسعهدهندگان بتوانند تمرکز خود را بر روی قابلیتها و بهبودهای اصلی پروژه حفظ کنند.
در نهایت، این مقاله که در سال ۲۰۲۴ نوشته شده و در سال ۲۰۲۵ بهروزرسانی شده، راهنمایی عملی و عملی برای برنامهنویسان و تیمهای توسعه است که میخواهند از ساختارهای بیدلیل پیچیده پرهیز کرده و پروژههایی ساده، قابل مدیریت و توسعهپذیر داشته باشند. رعایت این نکات ساده ولی مؤثر میتواند تفاوت قابل توجهی در کیفیت و بهرهوری تیمهای فنی ایجاد کند.
#برنامه_نویسی #گو #پروژه_ساده #مدیریت_پروژه
🟣لینک مقاله:
https://golangweekly.com/link/178529/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
A No Nonsense Guide to Go Project Layout
🟢 خلاصه مقاله:
در دنیای توسعه نرمافزار، سازماندهی پروژههای گو یکی از مهمترین عوامل موفقیت است. در مقالهای کاربردی و بدون حاشیه، نویسنده بر اهمیت دوری کردن از ساختارهای پیچیده و سنگین تأکید میکند و میگوید در پروژههای کوچک، بهتر است روی یک ساختار ساده و قابل فهم تمرکز کنید. این رویکرد نه تنها فرآیند توسعه را روانتر میکند، بلکه نگهداری کد و همکاری تیمی را نیز آسانتر میسازد.
نویسنده در این مقاله به خوانندگان توصیه میکند که از طراحی ساختارهایی با بستهبندیهای بیپایان و اغراقآمیز خودداری کنند و به جای آن، بر مرتبسازی منطقی و پایهای پروژه تمرکز نمایند. این کار باعث میشود که پروژههای کوچک و متوسط انعطافپذیری بیشتری داشته باشند و در مسیر رشد، دچار دشواری نشوند. همچنین، تکنیکها و راهکارهایی را برای جلوگیری از پیچیدگیهای بیمورد پیشنهاد میدهد تا توسعهدهندگان بتوانند تمرکز خود را بر روی قابلیتها و بهبودهای اصلی پروژه حفظ کنند.
در نهایت، این مقاله که در سال ۲۰۲۴ نوشته شده و در سال ۲۰۲۵ بهروزرسانی شده، راهنمایی عملی و عملی برای برنامهنویسان و تیمهای توسعه است که میخواهند از ساختارهای بیدلیل پیچیده پرهیز کرده و پروژههایی ساده، قابل مدیریت و توسعهپذیر داشته باشند. رعایت این نکات ساده ولی مؤثر میتواند تفاوت قابل توجهی در کیفیت و بهرهوری تیمهای فنی ایجاد کند.
#برنامه_نویسی #گو #پروژه_ساده #مدیریت_پروژه
🟣لینک مقاله:
https://golangweekly.com/link/178529/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Laurentsv
No nonsense guide to Go projects layout
It’s a recurring question on gopher slack and discord: «How should I set up my go project repository?». Unfortunately, there are a lot of both outdated and o...
❤3
Gopher Academy
👇👇👇👇 ✅page fault trap #Go #Golang #SoftwareEngineering ➖➖➖➖➖➖➖➖ 👑 @gopher_academy
👉 Heman Hosseinpana
Technical Lead Snapp!
چند روز پیش در یکی از تردهای ایمیل گروه گولنگ، بحثی بین چند دولوپر شناختهشده از جمله Rob Pike (یکی از طراحان اصلی زبان Go) دربارهی نحوهی مدیریت پشته در Go مطرح شده بودکه به نظرم خیلی جالب اومد.
موضوع اصلی این بود که آیا میتوان بهجای بررسی دستی در هر تابع، از page fault trap برای رشد خودکار پشته استفاده کرد یا نه؟
مساله اینه که در Go، هر تابع قبل از اجرا بررسی میکند که آیا فضای کافی روی پشته وجود دارد یا نه. اگر نبود، تابع runtime.morestack صدا زده میشود تا استک بزرگتر شود.
این بررسی حدود ۱۰ دستورالعمل CPU زمان میبرد و باعث میشود اندازهی کد کمی بزرگتر شود (حدود ۵ تا ۱۰٪ افزایش).
این افزایش اندازهی کد میتواند فشار بیشتری به کش L1 دستورالعملها (L1i cache) وارد کند.
نویسنده ایمیل پیشنهاد داده بود که بهجای این بررسیها، اجازه دهیم وقتی پشته پر شد، CPU خودش خطای حافظه (page fault) بدهد و سیستمعامل پشته را گسترش دهد.
اما این روش نیازمند چندین context switch بین برنامه و کرنل است (حداقل ۳ یا ۴ بار) و در عمل بسیار کندتر از روش فعلی است.
جواب Rob Pike واقعا نمونه بارز این مسالهست که سادگی عموما انتخابی آگاهانه و از روی تجربه است:
«من فکر میکنم شما هزینهی این کار را بیش از حد بزرگ جلوه میدهید. قابل اندازهگیری است، اما آنقدرها هم که گفتید شدید نیست.
الان با رایجتر شدن inlining (درونخطیسازی توابع توسط کامپایلر)، توابع بزرگتر از قبل شدهاند، در نتیجه هزینهی سرشکنشده و واقعی این بررسیها کمتر شده است.
ضمناً، استفاده از trapها (یعنی تکیه بر خطاهای سختافزاری مثل page fault برای رشد پشته) قبلاً هم دردسرساز بوده است. من سیستمهای دیگری را دیدهام که سعی کردند از این روش استفاده کنند، اما اغلب به خاطر پیچیدگی غیرمنتظره رهایش کردند.
نمیگویم غیرممکن است، اما آسان هم نیست. و از طرفی انجام این کار به صورت portable (سازگار با همه سیستمعاملها و معماریها) سخت است چون جزئیات آن به سختافزار و سیستمعامل وابسته است
#Go #Golang #SoftwareEngineering
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Technical Lead Snapp!
چند روز پیش در یکی از تردهای ایمیل گروه گولنگ، بحثی بین چند دولوپر شناختهشده از جمله Rob Pike (یکی از طراحان اصلی زبان Go) دربارهی نحوهی مدیریت پشته در Go مطرح شده بودکه به نظرم خیلی جالب اومد.
موضوع اصلی این بود که آیا میتوان بهجای بررسی دستی در هر تابع، از page fault trap برای رشد خودکار پشته استفاده کرد یا نه؟
مساله اینه که در Go، هر تابع قبل از اجرا بررسی میکند که آیا فضای کافی روی پشته وجود دارد یا نه. اگر نبود، تابع runtime.morestack صدا زده میشود تا استک بزرگتر شود.
این بررسی حدود ۱۰ دستورالعمل CPU زمان میبرد و باعث میشود اندازهی کد کمی بزرگتر شود (حدود ۵ تا ۱۰٪ افزایش).
این افزایش اندازهی کد میتواند فشار بیشتری به کش L1 دستورالعملها (L1i cache) وارد کند.
نویسنده ایمیل پیشنهاد داده بود که بهجای این بررسیها، اجازه دهیم وقتی پشته پر شد، CPU خودش خطای حافظه (page fault) بدهد و سیستمعامل پشته را گسترش دهد.
اما این روش نیازمند چندین context switch بین برنامه و کرنل است (حداقل ۳ یا ۴ بار) و در عمل بسیار کندتر از روش فعلی است.
جواب Rob Pike واقعا نمونه بارز این مسالهست که سادگی عموما انتخابی آگاهانه و از روی تجربه است:
«من فکر میکنم شما هزینهی این کار را بیش از حد بزرگ جلوه میدهید. قابل اندازهگیری است، اما آنقدرها هم که گفتید شدید نیست.
الان با رایجتر شدن inlining (درونخطیسازی توابع توسط کامپایلر)، توابع بزرگتر از قبل شدهاند، در نتیجه هزینهی سرشکنشده و واقعی این بررسیها کمتر شده است.
ضمناً، استفاده از trapها (یعنی تکیه بر خطاهای سختافزاری مثل page fault برای رشد پشته) قبلاً هم دردسرساز بوده است. من سیستمهای دیگری را دیدهام که سعی کردند از این روش استفاده کنند، اما اغلب به خاطر پیچیدگی غیرمنتظره رهایش کردند.
نمیگویم غیرممکن است، اما آسان هم نیست. و از طرفی انجام این کار به صورت portable (سازگار با همه سیستمعاملها و معماریها) سخت است چون جزئیات آن به سختافزار و سیستمعامل وابسته است
#Go #Golang #SoftwareEngineering
➖➖➖➖➖➖➖➖
👑 @gopher_academy
🏆3
🔵 عنوان مقاله
reflects on 12 years of building Ebitengine
🟢 خلاصه مقاله:
در این مقاله، به مرور دوازده سال تلاش و توسعه در پروژه Ebitengine میپردازیم. این مدت زمان نشاندهندهی عزم و پشتکار تیم توسعهدهنده است که با تمرکز بر بهبود و پیشرفت، توانسته است نمونههای قابل توجهی از بازیهای ویدیویی را با استفاده از Ebitengine در سال ۲۰۲۵ عرضه کند. یکی از افتخارات این پلتفرم، ایجاد زمینهای قدرتمند برای توسعه بازیهای مبتنی بر فناوریهای نوین است که توسعهدهندگان را قادر میسازد ایدههای خلاقانه خود را به دنیای واقعیت مجازی و بازیهای مقیاسپذیر ارتقاء دهند.
در ادامه، نگاهی به چند نمونه از بازیهای ساخته شده با بهرهگیری از این موتور در سال جاری خواهیم داشت. این بازیها نه تنها نشاندهندهی انعطافپذیری و قدرت فنی Ebitengine هستند، بلکه توانستهاند توجه جامعهی گیمرها و توسعهدهندگان را جلب کنند و در عرصه رقابتی صنعت بازی محبوبیت زیادی کسب کنند. این دستاوردها گواهی بر توانمندی و پتانسیل بالای این پلتفرم در آیندهی توسعه بازیهای مستقل و چندمنظوره است.
در پایان، برنامههای آینده و نوآوریهای احتمالی در راه است که قرار است سطح جدیدی از امکانات و ویژگیها را برای توسعهدهندگان فراهم کند. تیم توسعهدهنده قصد دارد با تمرکز بر بهبود کارایی، افزودن قابلیتهای جدید و ارتقاء تجربه کاربری، Ebitengine را به یک ابزار کامل و بینظیر در دنیای توسعه بازی تبدیل کند. این مسیر نوید بخش آیندهای پرپتانسیل و پرامید برای صنعت بازیهای ویدیویی است.
#بازی_سازی #توسعه_بازی #فناوری_نوین #Ebitengine
🟣لینک مقاله:
https://golangweekly.com/link/178259/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
reflects on 12 years of building Ebitengine
🟢 خلاصه مقاله:
در این مقاله، به مرور دوازده سال تلاش و توسعه در پروژه Ebitengine میپردازیم. این مدت زمان نشاندهندهی عزم و پشتکار تیم توسعهدهنده است که با تمرکز بر بهبود و پیشرفت، توانسته است نمونههای قابل توجهی از بازیهای ویدیویی را با استفاده از Ebitengine در سال ۲۰۲۵ عرضه کند. یکی از افتخارات این پلتفرم، ایجاد زمینهای قدرتمند برای توسعه بازیهای مبتنی بر فناوریهای نوین است که توسعهدهندگان را قادر میسازد ایدههای خلاقانه خود را به دنیای واقعیت مجازی و بازیهای مقیاسپذیر ارتقاء دهند.
در ادامه، نگاهی به چند نمونه از بازیهای ساخته شده با بهرهگیری از این موتور در سال جاری خواهیم داشت. این بازیها نه تنها نشاندهندهی انعطافپذیری و قدرت فنی Ebitengine هستند، بلکه توانستهاند توجه جامعهی گیمرها و توسعهدهندگان را جلب کنند و در عرصه رقابتی صنعت بازی محبوبیت زیادی کسب کنند. این دستاوردها گواهی بر توانمندی و پتانسیل بالای این پلتفرم در آیندهی توسعه بازیهای مستقل و چندمنظوره است.
در پایان، برنامههای آینده و نوآوریهای احتمالی در راه است که قرار است سطح جدیدی از امکانات و ویژگیها را برای توسعهدهندگان فراهم کند. تیم توسعهدهنده قصد دارد با تمرکز بر بهبود کارایی، افزودن قابلیتهای جدید و ارتقاء تجربه کاربری، Ebitengine را به یک ابزار کامل و بینظیر در دنیای توسعه بازی تبدیل کند. این مسیر نوید بخش آیندهای پرپتانسیل و پرامید برای صنعت بازیهای ویدیویی است.
#بازی_سازی #توسعه_بازی #فناوری_نوین #Ebitengine
🟣لینک مقاله:
https://golangweekly.com/link/178259/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Ebitengine - A dead simple 2D game engine for Go
Ebitengine in 2025 - Ebitengine
Ebitengine is an open source game engine for the Go programming language. Ebitengine's simple API allows you to quickly and easily develop 2D games that can be deployed across multiple platforms.
❤2👍1
🧠 داستان Page Fault، Interrupt، MMU و حافظه در لینوکس — توضیحی که واقعاً نیازه برای درک بهتر اتفاقات پشت پرده
اگر تا حالا با خطاهایی مثل
اما Page Fault دقیقاً چیه؟
چه فرقی با Interrupt داره؟
این MMU و Page Table دقیقاً چهکار میکنن؟
و اینا چه ربطی به User Mode، Kernel Mode و Stack / Heap دارن؟
🔴 این Page Fault چیه؟
درواقعه Page Fault زمانی رخ میدهد که یک برنامه بخواهد به حافظهای دسترسی پیدا کند که:
* یا در RAM نیست
* یا اجازهٔ دسترسی به آن را ندارد
* یا اصلاً متعلق به آن برنامه نیست
در این لحظه:
*ا CPU اجرای برنامه را متوقف میکند
* کنترل به سیستمعامل داده میشود
*ا Kernel تصمیم میگیرد چهکار کند
📌 نکتهٔ مهم:
ا Page Fault همیشه «خطا» نیست — پایهٔ Virtual Memory است
🧪 مثال واقعی (C / Go)
درزبان برنامه نویسی C
نتیجه:
در زبان Go
نتیجه:
در هر دو:
*ا MMU آدرس را بررسی میکند
* صفحه نامعتبر است
*ا Page Fault رخ میدهد
*ا Kernel برنامه را متوقف میکند
🟢حالا Page Fault سالم و ناسالم رو بریم بررسی کنیم
✅ Valid Page Fault
* صفحه وجود دارد ولی هنوز در RAM نیست
*ا Kernel آن را از disk / swap میآورد
* برنامه ادامه میدهد
❌ Invalid Page Fault
* آدرس نامعتبر یا مجوز اشتباه
*ا Kernel سیگنال
* برنامه crash میکند
🔵 تفاوت Page Fault و Interrupt
| ویژگی | Page Fault | Interrupt
| منبع | داخل CPU / MMU | سختافزار خارجی
| زمان | همزمان با دستور | غیرهمزمان
| علت | دسترسی حافظه | رویداد سیستم
| تقصیر برنامه؟ | معمولاً بله | ❌
| قابل mask؟ | ❌ | ✅
📌 جملهٔ طلایی:
ا Page Fault نتیجهٔ نیاز یا اشتباه برنامه استا
ا Interrupt نتیجهٔ نیاز سیستم است
🧠ا MMU چیست؟
در واقعه MMU (Memory Management Unit) قطعهای سختافزاری داخل CPU است که:
* آدرس مجازی را به آدرس فیزیکی تبدیل میکند
* مجوزهای Read / Write / Execute را بررسی میکند
* بین پردازهها ایزولهسازی ایجاد میکند
* در صورت مشکل → Page Fault میسازد
هر دسترسی به حافظه = عبور از MMU
اPage Table چیست؟
ا Page Table نقشهای است که سیستمعامل میسازد و MMU از آن استفاده میکند.
میگوید:
* این صفحهٔ مجازی کجاست؟
* در RAM هست یا نه؟
* چه مجوزی دارد؟
ا Page Table Entry شامل:
* Frame Number
* Present Bit
* R / W / X
* User / Kernel
* Dirty / Accessed
⚙️ مسیر واقعی Page Fault در Linux
1. برنامه اجرا میشود
2.ا MMU خطا را تشخیص میدهد
3ا. CPU وارد Kernel Mode میشود
4. تابع
5ا Kernel تصمیم میگیرد:
* صفحه را لود کند ✅
* یا برنامه را نابود کند ❌
🔐 User Mode vs Kernel Mode
User Mode
* اجرای برنامهها
* بدون دسترسی مستقیم به:
* حافظهٔ سیستم
* سختافزار
*ا Page Table
Kernel Mode
* اجرای سیستمعامل
* دسترسی کامل
* مدیریت:
* حافظه
*ا Process
* فایلسیستم
*ا Driver
📌اPage Fault = ورود اجباری از User Mode به Kernel Mode
🧩 ا Memory Layout یک Process
هر Process فضای حافظهٔ مجازی خودش را دارد:
بخشها:
*ا Text: کد برنامه (read-only)
*ا Data / BSS: متغیرهای global
*ا Heap: malloc / new
*ا Stack: توابع و متغیرهای محلی
📌 اگر Stack و Heap به هم برسند → Page Fault → Crash
🔗 ارتباط همهٔ مفاهیم
* اMMU تشخیص میدهد
*ا Page Table مرجع است
*ا Kernel حل میکند
*ا Program ادامه میدهد یا میمیرد 😄
✨ جمعبندی نهایی
* Page Fault: آژیر مدیریت حافظه
* Interrupt: وقفهٔ رویدادهای سیستم
* MMU: مترجم و پلیس حافظه
* Page Table: نقشهٔ راه
* User / Kernel Mode: دیوار امنیت
* Stack / Heap: میدان مین برنامهنویس 😅
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
اگر تا حالا با خطاهایی مثل
Segmentation Fault`، `panic: invalid memory address یا کرشهای عجیب روبهرو شدی، ریشهٔ همهشون به یکجا برمیگرده:👇😳اما Page Fault دقیقاً چیه؟
چه فرقی با Interrupt داره؟
این MMU و Page Table دقیقاً چهکار میکنن؟
و اینا چه ربطی به User Mode، Kernel Mode و Stack / Heap دارن؟
🔴 این Page Fault چیه؟
درواقعه Page Fault زمانی رخ میدهد که یک برنامه بخواهد به حافظهای دسترسی پیدا کند که:
* یا در RAM نیست
* یا اجازهٔ دسترسی به آن را ندارد
* یا اصلاً متعلق به آن برنامه نیست
در این لحظه:
*ا CPU اجرای برنامه را متوقف میکند
* کنترل به سیستمعامل داده میشود
*ا Kernel تصمیم میگیرد چهکار کند
📌 نکتهٔ مهم:
ا Page Fault همیشه «خطا» نیست — پایهٔ Virtual Memory است
🧪 مثال واقعی (C / Go)
درزبان برنامه نویسی C
int *p = NULL;
*p = 10;
نتیجه:
Segmentation Fault
در زبان Go
var p *int
*p = 10
نتیجه:
panic: invalid memory address
در هر دو:
*ا MMU آدرس را بررسی میکند
* صفحه نامعتبر است
*ا Page Fault رخ میدهد
*ا Kernel برنامه را متوقف میکند
🟢حالا Page Fault سالم و ناسالم رو بریم بررسی کنیم
✅ Valid Page Fault
* صفحه وجود دارد ولی هنوز در RAM نیست
*ا Kernel آن را از disk / swap میآورد
* برنامه ادامه میدهد
❌ Invalid Page Fault
* آدرس نامعتبر یا مجوز اشتباه
*ا Kernel سیگنال
SIGSEGV میفرستد* برنامه crash میکند
🔵 تفاوت Page Fault و Interrupt
| ویژگی | Page Fault | Interrupt
| منبع | داخل CPU / MMU | سختافزار خارجی
| زمان | همزمان با دستور | غیرهمزمان
| علت | دسترسی حافظه | رویداد سیستم
| تقصیر برنامه؟ | معمولاً بله | ❌
| قابل mask؟ | ❌ | ✅
📌 جملهٔ طلایی:
ا Page Fault نتیجهٔ نیاز یا اشتباه برنامه استا
ا Interrupt نتیجهٔ نیاز سیستم است
🧠ا MMU چیست؟
در واقعه MMU (Memory Management Unit) قطعهای سختافزاری داخل CPU است که:
* آدرس مجازی را به آدرس فیزیکی تبدیل میکند
* مجوزهای Read / Write / Execute را بررسی میکند
* بین پردازهها ایزولهسازی ایجاد میکند
* در صورت مشکل → Page Fault میسازد
هر دسترسی به حافظه = عبور از MMU
اPage Table چیست؟
ا Page Table نقشهای است که سیستمعامل میسازد و MMU از آن استفاده میکند.
میگوید:
* این صفحهٔ مجازی کجاست؟
* در RAM هست یا نه؟
* چه مجوزی دارد؟
ا Page Table Entry شامل:
* Frame Number
* Present Bit
* R / W / X
* User / Kernel
* Dirty / Accessed
⚙️ مسیر واقعی Page Fault در Linux
1. برنامه اجرا میشود
2.ا MMU خطا را تشخیص میدهد
3ا. CPU وارد Kernel Mode میشود
4. تابع
do_page_fault() اجرا میشود5ا Kernel تصمیم میگیرد:
* صفحه را لود کند ✅
* یا برنامه را نابود کند ❌
🔐 User Mode vs Kernel Mode
User Mode
* اجرای برنامهها
* بدون دسترسی مستقیم به:
* حافظهٔ سیستم
* سختافزار
*ا Page Table
Kernel Mode
* اجرای سیستمعامل
* دسترسی کامل
* مدیریت:
* حافظه
*ا Process
* فایلسیستم
*ا Driver
📌اPage Fault = ورود اجباری از User Mode به Kernel Mode
🧩 ا Memory Layout یک Process
هر Process فضای حافظهٔ مجازی خودش را دارد:
| Stack ↓ |
| |
| Heap ↑ |
| Data |
| BSS |
| Text |
بخشها:
*ا Text: کد برنامه (read-only)
*ا Data / BSS: متغیرهای global
*ا Heap: malloc / new
*ا Stack: توابع و متغیرهای محلی
📌 اگر Stack و Heap به هم برسند → Page Fault → Crash
🔗 ارتباط همهٔ مفاهیم
Program
↓ virtual address
MMU
↓ Page Table
Kernel (on fault)
↓ decision
RAM / Disk
* اMMU تشخیص میدهد
*ا Page Table مرجع است
*ا Kernel حل میکند
*ا Program ادامه میدهد یا میمیرد 😄
✨ جمعبندی نهایی
* Page Fault: آژیر مدیریت حافظه
* Interrupt: وقفهٔ رویدادهای سیستم
* MMU: مترجم و پلیس حافظه
* Page Table: نقشهٔ راه
* User / Kernel Mode: دیوار امنیت
* Stack / Heap: میدان مین برنامهنویس 😅
👉 https://news.1rj.ru/str/addlist/AJ7rh2IzIh02NTI0
Telegram
Labdon
Bardia invites you to add the folder “Labdon”, which includes 8 chats.
👍4❤1