Forwarded from Gopher Academy
این بخش وارد جزئیات مهمی از نحوهی تشخیص محل اشارهگرها (pointers) در حافظه توسط Garbage Collector در Go میشود. در ادامه توضیح مختصر و مفیدش 👇
📘 Heap Bits و Malloc Header در Go Runtime
🔹 در زبان Go، Garbage Collector (GC) باید بداند کدام قسمت از یک شیء شامل pointer است تا بتواند به درستی گراف حافظه را پیمایش کند.
اما بررسی تکتک فیلدهای هر struct در زمان اجرا (runtime) بسیار پرهزینه خواهد بود، مخصوصاً برای ساختارهای بزرگ یا تو در تو.
💡 راهحل Go: استفاده از متادیتا (Metadata)
برای حل این مشکل، Go از دو سازوکار اصلی استفاده میکند:
1. Heap Bits
* برای هر ناحیه از حافظهی heap، اطلاعاتی بهصورت بیتفیلد ذخیره میشود که مشخص میکند
هر بخش از آن حافظه شامل pointer است یا دادهی معمولی (non-pointer).
* این بیتها توسط کامپایلر در زمان کامپایل ساخته و در زمان اجرا توسط GC استفاده میشوند.
* نتیجه: GC میتواند مستقیماً بداند کدام قسمتها را باید دنبال کند، بدون نیاز به اسکن کل struct.
2. Malloc Header
* هر شیء در heap یک هدر (header) دارد که اطلاعات مدیریتی مثل اندازه، نوع و آدرس بیتهای مربوط به آن (heap bits) را نگهداری میکند.
ا * GC از این هدر برای دسترسی سریع به متادیتای مورد نیاز در زمان جمعآوری حافظه استفاده میکند.
⚙️ نتیجه
با ترکیب heap bits و malloc header**، GC در Go میتواند:
* تنها بخشهای لازم را اسکن کند (به جای کل حافظه)
* با سرعت و دقت بالا گراف اشیاء را پیمایش کند
* و در عین حال، **کارایی بالایی در مدیریت حافظه حفظ کند.
✅ خلاصه:
اGo با استفاده از *Heap Bits* و *Malloc Header*، مکان pointerها را از پیش میداند و به این ترتیب، فرآیند جمعآوری زباله را بسیار سریع و بهینه انجام میدهد — بدون نیاز به بررسی تکیتکی فیلدها در زمان اجرا.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
📘 Heap Bits و Malloc Header در Go Runtime
🔹 در زبان Go، Garbage Collector (GC) باید بداند کدام قسمت از یک شیء شامل pointer است تا بتواند به درستی گراف حافظه را پیمایش کند.
اما بررسی تکتک فیلدهای هر struct در زمان اجرا (runtime) بسیار پرهزینه خواهد بود، مخصوصاً برای ساختارهای بزرگ یا تو در تو.
💡 راهحل Go: استفاده از متادیتا (Metadata)
برای حل این مشکل، Go از دو سازوکار اصلی استفاده میکند:
1. Heap Bits
* برای هر ناحیه از حافظهی heap، اطلاعاتی بهصورت بیتفیلد ذخیره میشود که مشخص میکند
هر بخش از آن حافظه شامل pointer است یا دادهی معمولی (non-pointer).
* این بیتها توسط کامپایلر در زمان کامپایل ساخته و در زمان اجرا توسط GC استفاده میشوند.
* نتیجه: GC میتواند مستقیماً بداند کدام قسمتها را باید دنبال کند، بدون نیاز به اسکن کل struct.
2. Malloc Header
* هر شیء در heap یک هدر (header) دارد که اطلاعات مدیریتی مثل اندازه، نوع و آدرس بیتهای مربوط به آن (heap bits) را نگهداری میکند.
ا * GC از این هدر برای دسترسی سریع به متادیتای مورد نیاز در زمان جمعآوری حافظه استفاده میکند.
⚙️ نتیجه
با ترکیب heap bits و malloc header**، GC در Go میتواند:
* تنها بخشهای لازم را اسکن کند (به جای کل حافظه)
* با سرعت و دقت بالا گراف اشیاء را پیمایش کند
* و در عین حال، **کارایی بالایی در مدیریت حافظه حفظ کند.
✅ خلاصه:
اGo با استفاده از *Heap Bits* و *Malloc Header*، مکان pointerها را از پیش میداند و به این ترتیب، فرآیند جمعآوری زباله را بسیار سریع و بهینه انجام میدهد — بدون نیاز به بررسی تکیتکی فیلدها در زمان اجرا.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from Gopher Academy
🧠د Heap Bits در Go — هوشمندی در مدیریت حافظه
در Go، اشیاء کوچکتر از ۵۱۲ بایت درون spanهایی نگهداری میشن که خودشون چندین شیء هماندازه دارن.
اما چطور Garbage Collector میفهمه کدوم بخش از این اشیاء شامل pointer هست؟
پاسخ: با Heap Bitmap ✅
🔹 هر span یک نقشهی بیتی (bitmap) در انتهای خودش داره.
🔹 هر بیت مربوط به یک "word" از حافظه (معمولاً ۸ بایت) هست:
1️⃣ = شامل pointer
0️⃣ = دادهی عادی (non-pointer)
به این ترتیب، GC فقط بخشهایی رو اسکن میکنه که واقعاً pointer دارن — سریعتر و بهینهتر از اینکه کل حافظه بررسی بشه.
📦 هر span علاوهبر فضای مورد نیاز برای اشیاء، مقداری فضا برای این bitmap کنار میگذاره.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
در Go، اشیاء کوچکتر از ۵۱۲ بایت درون spanهایی نگهداری میشن که خودشون چندین شیء هماندازه دارن.
اما چطور Garbage Collector میفهمه کدوم بخش از این اشیاء شامل pointer هست؟
پاسخ: با Heap Bitmap ✅
🔹 هر span یک نقشهی بیتی (bitmap) در انتهای خودش داره.
🔹 هر بیت مربوط به یک "word" از حافظه (معمولاً ۸ بایت) هست:
1️⃣ = شامل pointer
0️⃣ = دادهی عادی (non-pointer)
به این ترتیب، GC فقط بخشهایی رو اسکن میکنه که واقعاً pointer دارن — سریعتر و بهینهتر از اینکه کل حافظه بررسی بشه.
📦 هر span علاوهبر فضای مورد نیاز برای اشیاء، مقداری فضا برای این bitmap کنار میگذاره.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from Gopher Academy
برای اشیایی که اندازهشان بیشتر از ۵۱۲ بایت باشد، استفاده از یک بیتمپ بزرگ برای مدیریت حافظه کارآمد نیست. به جای آن، هر شیء با یک هدر ۸ بایت به نام "malloc header" همراه میشود. این هدر شامل یک اشارهگر به اطلاعات نوع شیء (type information) است.
این اطلاعات نوع شامل یک فیلد به نام "GCData" است که چیدمان اشارهگرها (pointer layout) در نوع شیء را کدگذاری میکند. جمعآوری زباله (garbage collector) از این دادهها استفاده میکند تا به طور دقیق و کارآمد فقط فیلدهایی که حاوی اشارهگرها هستند را هنگام پیمایش گراف اشیاء پیدا کند.
به زبان ساده، این روش به جمعآوری زباله کمک میکند تا بدون نیاز به بررسی کل حافظه، فقط بخشهای مهم را که به اشیاء دیگر اشاره دارند، شناسایی و مدیریت کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
این اطلاعات نوع شامل یک فیلد به نام "GCData" است که چیدمان اشارهگرها (pointer layout) در نوع شیء را کدگذاری میکند. جمعآوری زباله (garbage collector) از این دادهها استفاده میکند تا به طور دقیق و کارآمد فقط فیلدهایی که حاوی اشارهگرها هستند را هنگام پیمایش گراف اشیاء پیدا کند.
به زبان ساده، این روش به جمعآوری زباله کمک میکند تا بدون نیاز به بررسی کل حافظه، فقط بخشهای مهم را که به اشیاء دیگر اشاره دارند، شناسایی و مدیریت کند.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from Gopher Academy
♥️جزییات فنی این بخش از مقالات رو می تونید توی لینک زیر بخونید
- https://github.com/golang/go/blob/go1.24.0/src/runtime/runtime2.go#L529-L529
🎯 کد تنظیمات اولیه runtime در Go - بخش اصلی اجرا!
- https://github.com/golang/go/blob/go1.24.0/src/runtime/proc.go#L117-L117
🚀 مدیریت فرآیندها (goroutines) در runtime Go.
- https://man7.org/linux/man-pages/man2/mmap.2.html
📚 مستندات mmap لینوکس - تخصیص حافظه به فرآیندها.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mheap.go#L245-L311
🗂 مدیریت هیپ در Go - تخصیص و آزادسازی صفحات حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mheap.go#L402-L496
🔧 مدیریت پیشرفته هیپ - ردیابی و تخصیص حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go#L6
📏 تعریف کلاسهای اندازه اولیه برای حافظه کارآمد.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go#L61
🧮 محاسبات دقیقتر برای کلاسهای اندازه حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go#L44
⚙️ تنظیمات اضافی برای دستهبندی اندازهها.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go
📂 فایل کامل کلاسهای اندازه حافظه در Go.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mheap.go#L556-L562
♻️ کد آزادسازی صفحات حافظه در هیپ.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mspanset.go#L14-L52
🌐 مدیریت مجموعه اسپنها برای تخصیص حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mbitmap.go#L549-L582
🖼 مدیریت بیتمپ برای ردیابی حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/malloc.go#L1470-L1470
💾 بخشی از تابع malloc برای تخصیص حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/internal/abi/type.go#L31-L42
📋 تعریف ساختار نوع و متادیتای ABI در Go.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
- https://github.com/golang/go/blob/go1.24.0/src/runtime/runtime2.go#L529-L529
🎯 کد تنظیمات اولیه runtime در Go - بخش اصلی اجرا!
- https://github.com/golang/go/blob/go1.24.0/src/runtime/proc.go#L117-L117
🚀 مدیریت فرآیندها (goroutines) در runtime Go.
- https://man7.org/linux/man-pages/man2/mmap.2.html
📚 مستندات mmap لینوکس - تخصیص حافظه به فرآیندها.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mheap.go#L245-L311
🗂 مدیریت هیپ در Go - تخصیص و آزادسازی صفحات حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mheap.go#L402-L496
🔧 مدیریت پیشرفته هیپ - ردیابی و تخصیص حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go#L6
📏 تعریف کلاسهای اندازه اولیه برای حافظه کارآمد.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go#L61
🧮 محاسبات دقیقتر برای کلاسهای اندازه حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go#L44
⚙️ تنظیمات اضافی برای دستهبندی اندازهها.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/sizeclasses.go
📂 فایل کامل کلاسهای اندازه حافظه در Go.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mheap.go#L556-L562
♻️ کد آزادسازی صفحات حافظه در هیپ.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mspanset.go#L14-L52
🌐 مدیریت مجموعه اسپنها برای تخصیص حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/mbitmap.go#L549-L582
🖼 مدیریت بیتمپ برای ردیابی حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/runtime/malloc.go#L1470-L1470
💾 بخشی از تابع malloc برای تخصیص حافظه.
- https://github.com/golang/go/blob/go1.24.0/src/internal/abi/type.go#L31-L42
📋 تعریف ساختار نوع و متادیتای ABI در Go.
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from Gopher Academy
🔵 عنوان مقاله
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
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
Forwarded from Gopher Academy
مثال از مقاله
یکی از مثالهای مقاله مربوط به ساخت یک struct به نام Person است:
type Person struct {
Name string
Age *int
}
func newPerson(name string, age int) *Person {
return &Person{
Name: name,
Age: new(age), // ایجاد اشارهگر به کپی مقدار age
}
}
در اینجا، new(age) یک اشارهگر به کپی مقدار age میسازد. این کار قبلاً با &age ممکن بود، اما استفاده از new(age) میتواند در مواردی مثل بهینهسازیهای کامپایلر (مانند آنالیز فرار یا escape analysis) مفید باشد، چون متغیر ورودی age ممکن است روی پشته (stack) باقی بماند و نیازی به تخصیص در هیپ (heap) نداشته باشد.
نکته در مورد ثابتها (Constants)
یک نکته که در مقاله ذکر شده، این است که وقتی از new() با یک ثابت عددی (مثل 10) استفاده میکنید، نوع پیشفرض آن *int است، که ممکن است در برخی موارد باعث خطای نوع (type mismatch) شود. برای مثال:
var ui uint
var uip *uint
ui = 10 // درست است، چون 10 به طور خودکار به uint تبدیل میشود
uip = new(10) // خطا: نوع *int نمیتواند به *uint اختصاص یابد
برای رفع این مشکل، باید نوع ثابت را صراحتاً مشخص کنید:
uip = new(uint(10)) // درست است
چرا این تغییر مفید است؟
- سادگی کد: حذف نیاز به متغیرهای موقت باعث کوتاهتر و خواناتر شدن کد میشود.
- بهینهسازی: کامپایلر Go ممکن است بتواند کدهای نوشتهشده با new(expr) را بهتر بهینه کند.
- یکنواختی: این تغییر باعث میشود که کار با انواع ساده و پیچیده در Go یکسانتر شود.
- محبوبیت: به نظر میرسد که معادلهای این قابلیت (مثل تابع ref()) در جامعه Go رایج بوده و این ویژگی جدید پاسخ به نیاز واقعی توسعهدهندگان است.
مثال تکمیلی
فرض کنید میخواهید یک اشارهگر به یک مقدار محاسبهشده بسازید:
func calculateValue(x, y int) *int {
return new(x + y) // اشارهگری به نتیجه x + y
}
func main() {
p := calculateValue(5, 3) // p اشارهگری به مقدار 8 است
fmt.Println(*p) // خروجی: 8
}
این کد بدون نیاز به متغیر موقت، یک اشارهگر به نتیجه x + y میسازد.
نتیجهگیری
تغییر در تابع new() در Go 1.26 یک بهبود کوچک اما کاربردی است که کد را سادهتر و انعطافپذیرتر میکند. این قابلیت به توسعهدهندگان اجازه میدهد تا بدون متغیرهای موقت، اشارهگرهایی به مقادیر محاسبهشده یا کپیهای مقادیر دیگر بسازند، و در عین حال ممکن است به بهینهسازیهای کامپایلر کمک کند.
یکی از مثالهای مقاله مربوط به ساخت یک struct به نام Person است:
type Person struct {
Name string
json:"name"Age *int
json:"age" // سن اگر مشخص باشد؛ در غیر این صورت nil}
func newPerson(name string, age int) *Person {
return &Person{
Name: name,
Age: new(age), // ایجاد اشارهگر به کپی مقدار age
}
}
در اینجا، new(age) یک اشارهگر به کپی مقدار age میسازد. این کار قبلاً با &age ممکن بود، اما استفاده از new(age) میتواند در مواردی مثل بهینهسازیهای کامپایلر (مانند آنالیز فرار یا escape analysis) مفید باشد، چون متغیر ورودی age ممکن است روی پشته (stack) باقی بماند و نیازی به تخصیص در هیپ (heap) نداشته باشد.
نکته در مورد ثابتها (Constants)
یک نکته که در مقاله ذکر شده، این است که وقتی از new() با یک ثابت عددی (مثل 10) استفاده میکنید، نوع پیشفرض آن *int است، که ممکن است در برخی موارد باعث خطای نوع (type mismatch) شود. برای مثال:
var ui uint
var uip *uint
ui = 10 // درست است، چون 10 به طور خودکار به uint تبدیل میشود
uip = new(10) // خطا: نوع *int نمیتواند به *uint اختصاص یابد
برای رفع این مشکل، باید نوع ثابت را صراحتاً مشخص کنید:
uip = new(uint(10)) // درست است
چرا این تغییر مفید است؟
- سادگی کد: حذف نیاز به متغیرهای موقت باعث کوتاهتر و خواناتر شدن کد میشود.
- بهینهسازی: کامپایلر Go ممکن است بتواند کدهای نوشتهشده با new(expr) را بهتر بهینه کند.
- یکنواختی: این تغییر باعث میشود که کار با انواع ساده و پیچیده در Go یکسانتر شود.
- محبوبیت: به نظر میرسد که معادلهای این قابلیت (مثل تابع ref()) در جامعه Go رایج بوده و این ویژگی جدید پاسخ به نیاز واقعی توسعهدهندگان است.
مثال تکمیلی
فرض کنید میخواهید یک اشارهگر به یک مقدار محاسبهشده بسازید:
func calculateValue(x, y int) *int {
return new(x + y) // اشارهگری به نتیجه x + y
}
func main() {
p := calculateValue(5, 3) // p اشارهگری به مقدار 8 است
fmt.Println(*p) // خروجی: 8
}
این کد بدون نیاز به متغیر موقت، یک اشارهگر به نتیجه x + y میسازد.
نتیجهگیری
تغییر در تابع new() در Go 1.26 یک بهبود کوچک اما کاربردی است که کد را سادهتر و انعطافپذیرتر میکند. این قابلیت به توسعهدهندگان اجازه میدهد تا بدون متغیرهای موقت، اشارهگرهایی به مقادیر محاسبهشده یا کپیهای مقادیر دیگر بسازند، و در عین حال ممکن است به بهینهسازیهای کامپایلر کمک کند.
Forwarded from Reza Jafari
نگاهی به مدل تازه سامسونگ به اسم Tiny Recursive Model
وقتی مقاله مربوط به «مدل بازگشتی کوچیک» یا همون Tiny Recursive Model (TRM) از سامسونگ رو خوندم، واقعاً ذهنم سوت کشید. باورم نمیشد یه مدل با فقط ۷ میلیون پارامتر تونسته باشه تو تستهای استدلالی مثل ARC-AGI-1 و ARC-AGI-2 از مدلهای بزرگ و گرونقیمتی مثل DeepSeek-R1، Gemini 2.5 Pro و o3-mini بهتر عمل کنه. این مدل رو تیم تحقیقاتی Samsung SAIL Montreal ساخته و عملاً نشون داده که برای باهوش بودن، الزاماً نیازی به مدلهای غولپیکر و هزینههای میلیاردی نیست؛ گاهی طراحی هوشمندانه از هر چیز دیگهای مهمتره.
کاری که TRM میکنه با مدلهای زبانی معمولی خیلی فرق داره. به جای اینکه مثل یه LLM معمولی، کلمهبهکلمه جمله بسازه، اول یه پیشنویس کامل از جواب تولید میکنه — یه جور حدس اولیه از راهحل. بعد وارد مرحلهای میشه که خودش یه فضای فکری جدا به اسم «اسکرچپد ذهنی» درست میکنه. اینجا جاییه که مدل با خودش فکر میکنه، منطقش رو زیر سؤال میبره و شروع میکنه به اصلاح اشتباههاش. طبق مقاله، این چرخه تا شش بار تکرار میشه؛ هر بار از خودش میپرسه: «منطقم درسته؟ ایرادم کجاست؟» بعد دوباره جواب رو بازنویسی میکنه. این فرایند «پیشنویس، فکر کردن، اصلاح» تا ۱۶ بار پشتسر هم انجام میشه تا به جوابی برسه که از نظر خودش منطقی و درست باشه.
جالبتر اینه که معماری مدل خیلی سادهست. فقط از دو لایه تشکیل شده و میتونه یا بهصورت یه شبکهی ساده (MLP) یا با ساختار self-attention کار کنه. در واقع، سامسونگ پیچیدگیهای اضافی مثل سلسلهمراتب یا نظریههای سنگین ریاضی رو کنار گذاشته و تمرکزش رو گذاشته روی اینکه مدل بتونه واقعاً فکر کنه. هر بار که TRM به مسئلهای نگاه میکنه، حالت ذهنی خودش رو بهروزرسانی میکنه، یعنی یاد میگیره چطور بهتر فکر کنه، بعد با اون تفکر تازه پاسخ رو بازنویسی میکنه — درست مثل آدمی که چند بار به یه موضوع فکر میکنه تا بالاخره راه درست رو پیدا کنه.
نتایجش هم واقعاً قابل توجهه. تو پازلهای سختی مثل Sudoku-Extreme و Maze-Hard دقتش بالای ۸۵٪ بوده، و تو تستهای استدلالی ARC-AGI-1 و ARC-AGI-2 بهترتیب حدود ۴۵٪ و ۸٪ دقت گرفته — عددهایی که از بعضی مدلهای خیلی بزرگتر هم بالاترن. برای مقایسه، مدل HRM با ۲۷ میلیون پارامتر عملکرد ضعیفتری داشته. این یعنی TRM تونسته با یه دهم یا حتی یکهزارم اندازهی اونها، نتیجهی بهتری بده.
اهمیت این پیشرفت فقط در اعداد نیست، بلکه در تفکریه که پشتش قرار داره. برای مدیران و کسبوکارها، این یعنی برتری الگوریتمی — یعنی بهجای خرج کردن میلیونها دلار برای قدرت پردازشی، میشه با طراحی هوشمندتر، نتیجهی بهتری گرفت. برای محققها هم این یه تأیید جدی روی ایدهی مدلهای عصبی-نمادینه؛ مدلهایی که قبل از اینکه پاسخ بدن، چندبار در موردش فکر میکنن.
البته نویسندگان مقاله خودشونم اشاره کردن که TRM هنوز یه مدل نسبتاً ساده و آزمایشیه. فعلاً فقط تو تسکهای نظارتشده تست شده و هنوز وارد دنیای متن و گفتار نشده. تازه، هنوز دقیق مشخص نیست چرا بازگشت درونی (recursion) تا این حد مؤثره — آیا به خاطر یادگیری عمیقتره، یا شاید فقط نوع خاصی از دادهها این تأثیر رو نشون میده. با این حال، نتایج فعلیش نشون میده که آیندهی هوش مصنوعی فقط توی «بزرگتر شدن» نیست، بلکه توی «باهوشتر فکر کردن»ه.
در کل، TRM فقط یه مدل کوچیکتر نیست؛ یه طرز فکر جدیده دربارهی حل مسئله. مدلی که بهجای اینکه عجولانه جواب بده، چند بار فکر میکنه، خودش رو نقد میکنه، و از اشتباههاش یاد میگیره. اگه بخوایم ساده بگیم، سامسونگ داره نشون میده هوش مصنوعی واقعی اونیه که بهجای بیشتر گفتن، بیشتر فکر کنه.
🔤 🔤 🔤 🔤 🔤 🔤 🔤
🥇 اهورا اولین اپراتور هوش مصنوعی راهبردی ایران در حوزه ارائه خدمات و سرویسهای زیرساخت هوش مصنوعی
🌐 لینک ارتباط با اهورا
@reza_jafari_ai
وقتی مقاله مربوط به «مدل بازگشتی کوچیک» یا همون Tiny Recursive Model (TRM) از سامسونگ رو خوندم، واقعاً ذهنم سوت کشید. باورم نمیشد یه مدل با فقط ۷ میلیون پارامتر تونسته باشه تو تستهای استدلالی مثل ARC-AGI-1 و ARC-AGI-2 از مدلهای بزرگ و گرونقیمتی مثل DeepSeek-R1، Gemini 2.5 Pro و o3-mini بهتر عمل کنه. این مدل رو تیم تحقیقاتی Samsung SAIL Montreal ساخته و عملاً نشون داده که برای باهوش بودن، الزاماً نیازی به مدلهای غولپیکر و هزینههای میلیاردی نیست؛ گاهی طراحی هوشمندانه از هر چیز دیگهای مهمتره.
کاری که TRM میکنه با مدلهای زبانی معمولی خیلی فرق داره. به جای اینکه مثل یه LLM معمولی، کلمهبهکلمه جمله بسازه، اول یه پیشنویس کامل از جواب تولید میکنه — یه جور حدس اولیه از راهحل. بعد وارد مرحلهای میشه که خودش یه فضای فکری جدا به اسم «اسکرچپد ذهنی» درست میکنه. اینجا جاییه که مدل با خودش فکر میکنه، منطقش رو زیر سؤال میبره و شروع میکنه به اصلاح اشتباههاش. طبق مقاله، این چرخه تا شش بار تکرار میشه؛ هر بار از خودش میپرسه: «منطقم درسته؟ ایرادم کجاست؟» بعد دوباره جواب رو بازنویسی میکنه. این فرایند «پیشنویس، فکر کردن، اصلاح» تا ۱۶ بار پشتسر هم انجام میشه تا به جوابی برسه که از نظر خودش منطقی و درست باشه.
جالبتر اینه که معماری مدل خیلی سادهست. فقط از دو لایه تشکیل شده و میتونه یا بهصورت یه شبکهی ساده (MLP) یا با ساختار self-attention کار کنه. در واقع، سامسونگ پیچیدگیهای اضافی مثل سلسلهمراتب یا نظریههای سنگین ریاضی رو کنار گذاشته و تمرکزش رو گذاشته روی اینکه مدل بتونه واقعاً فکر کنه. هر بار که TRM به مسئلهای نگاه میکنه، حالت ذهنی خودش رو بهروزرسانی میکنه، یعنی یاد میگیره چطور بهتر فکر کنه، بعد با اون تفکر تازه پاسخ رو بازنویسی میکنه — درست مثل آدمی که چند بار به یه موضوع فکر میکنه تا بالاخره راه درست رو پیدا کنه.
نتایجش هم واقعاً قابل توجهه. تو پازلهای سختی مثل Sudoku-Extreme و Maze-Hard دقتش بالای ۸۵٪ بوده، و تو تستهای استدلالی ARC-AGI-1 و ARC-AGI-2 بهترتیب حدود ۴۵٪ و ۸٪ دقت گرفته — عددهایی که از بعضی مدلهای خیلی بزرگتر هم بالاترن. برای مقایسه، مدل HRM با ۲۷ میلیون پارامتر عملکرد ضعیفتری داشته. این یعنی TRM تونسته با یه دهم یا حتی یکهزارم اندازهی اونها، نتیجهی بهتری بده.
اهمیت این پیشرفت فقط در اعداد نیست، بلکه در تفکریه که پشتش قرار داره. برای مدیران و کسبوکارها، این یعنی برتری الگوریتمی — یعنی بهجای خرج کردن میلیونها دلار برای قدرت پردازشی، میشه با طراحی هوشمندتر، نتیجهی بهتری گرفت. برای محققها هم این یه تأیید جدی روی ایدهی مدلهای عصبی-نمادینه؛ مدلهایی که قبل از اینکه پاسخ بدن، چندبار در موردش فکر میکنن.
البته نویسندگان مقاله خودشونم اشاره کردن که TRM هنوز یه مدل نسبتاً ساده و آزمایشیه. فعلاً فقط تو تسکهای نظارتشده تست شده و هنوز وارد دنیای متن و گفتار نشده. تازه، هنوز دقیق مشخص نیست چرا بازگشت درونی (recursion) تا این حد مؤثره — آیا به خاطر یادگیری عمیقتره، یا شاید فقط نوع خاصی از دادهها این تأثیر رو نشون میده. با این حال، نتایج فعلیش نشون میده که آیندهی هوش مصنوعی فقط توی «بزرگتر شدن» نیست، بلکه توی «باهوشتر فکر کردن»ه.
در کل، TRM فقط یه مدل کوچیکتر نیست؛ یه طرز فکر جدیده دربارهی حل مسئله. مدلی که بهجای اینکه عجولانه جواب بده، چند بار فکر میکنه، خودش رو نقد میکنه، و از اشتباههاش یاد میگیره. اگه بخوایم ساده بگیم، سامسونگ داره نشون میده هوش مصنوعی واقعی اونیه که بهجای بیشتر گفتن، بیشتر فکر کنه.
@reza_jafari_ai
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Linuxor ?
دوستان اگه کار قشنگی کردین توی کامپیوتر، یا ریپازیتوری و کانال خاصی دارین برای من بفرستین که توی کانال معرفیش کنم.
علت اینکه بعضی ریپو هایی که میفرستین رو نمیذارم بخاطر ضعیف بودن محتواش نیست بخاطر اینه که گذاشتن توی کانال یه قانون داره، اونم این که یه "چیزی برای ارائه و نمایش داشته باشه" و این فکر میکنم مهم ترین قانون طبیعت و زندگی هم هست.
@Linuxor
علت اینکه بعضی ریپو هایی که میفرستین رو نمیذارم بخاطر ضعیف بودن محتواش نیست بخاطر اینه که گذاشتن توی کانال یه قانون داره، اونم این که یه "چیزی برای ارائه و نمایش داشته باشه" و این فکر میکنم مهم ترین قانون طبیعت و زندگی هم هست.
@Linuxor
Forwarded from Gopher Academy
🔵 عنوان مقاله
Building a Coding Agent in Go from Scratch
🟢 خلاصه مقاله:
این مجموعه سه مطلب عملی برای توسعهدهندگان Go را کنار هم میگذارد: ساخت یک coding agent از صفر در Go، استفاده از Timing Wheels برای انقضای کارآمد ۱۰ میلیون کلید بدون اسکنهای O(n)، و مروری دقیق بر sync شامل Mutex، RWMutex، WaitGroup، Once، Cond و Pool. بخش agent بر معماری ماژولار، هماهنگی goroutine و channel، sandbox امن و حلقه بازخورد برای اجرای کد و بهبود تدریجی تأکید دارد. نوشته Bill Kennedy نشان میدهد چگونه با سطلبندی زمانسنجها و حرکت چرخ، سربار و نوسان تأخیر کاهش مییابد و حتی در مقیاس بزرگ پایدار میماند. در نهایت، مرور sync توصیههای عملی برای انتخاب درست بین primitives و channel، کاهش contention، و ارزیابی با benchmark، pprof و race detector ارائه میکند تا سامانههای Go هم هوشمند و هم سریع باشند.
#Go #Golang #Concurrency #TimingWheels #sync #SystemsProgramming #GoInternals #Performance
🟣لینک مقاله:
https://golangweekly.com/link/175365/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Building a Coding Agent in Go from Scratch
🟢 خلاصه مقاله:
این مجموعه سه مطلب عملی برای توسعهدهندگان Go را کنار هم میگذارد: ساخت یک coding agent از صفر در Go، استفاده از Timing Wheels برای انقضای کارآمد ۱۰ میلیون کلید بدون اسکنهای O(n)، و مروری دقیق بر sync شامل Mutex، RWMutex، WaitGroup، Once، Cond و Pool. بخش agent بر معماری ماژولار، هماهنگی goroutine و channel، sandbox امن و حلقه بازخورد برای اجرای کد و بهبود تدریجی تأکید دارد. نوشته Bill Kennedy نشان میدهد چگونه با سطلبندی زمانسنجها و حرکت چرخ، سربار و نوسان تأخیر کاهش مییابد و حتی در مقیاس بزرگ پایدار میماند. در نهایت، مرور sync توصیههای عملی برای انتخاب درست بین primitives و channel، کاهش contention، و ارزیابی با benchmark، pprof و race detector ارائه میکند تا سامانههای Go هم هوشمند و هم سریع باشند.
#Go #Golang #Concurrency #TimingWheels #sync #SystemsProgramming #GoInternals #Performance
🟣لینک مقاله:
https://golangweekly.com/link/175365/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
YouTube
Building a coding agent from scratch - Bill Kennedy
In this talk, Bill will share how AI agents fundamental work and interact with LLMs to perform basic tasks like listing, reading, and editing files. During the talk, Bill will live code an agent and explain all the parts of the code needed to make this work.…
Forwarded from DevTwitter | توییت برنامه نویسی
ایجنت رایگان با گراک 4 !
اخیراً گروک 4 رایگان شده و منم رفتم تستش کنم. ولی توی این مسیر یه حرکت باحال زدم!
اول بگم گروک 4 چیه و چرا باحاله:
- مدل جدید xAI با پنجره زمینه ۲ میلیون توکن
- سرعت پردازش بالا
- رایگان! (الان حداقل اینطوریه)
- برای تحلیل کد و حل مسائل پیچیده عالیه
یه افزونه VS Code به اسم Roo Code پیدا کردم!
( توی کرسر و اینا هم میشه نصبش کرد دیگه )
این افزونه مثل یه agent هوشمند عمل میکنه:
- فایلهاتو ایندکس میکنه و میشناسه
- میتونی تسکهای مشخص براش تعریف کنی و انجام بده
- از OpenRouter API پشتیبانی میکنه
- میتونی از مدلهای مختلف مثل همون گروک 4 توش استفاده کنی
بهترین بخش اینجاست که Roo Code از OpenRouter API پشتیبانی میکنه و گروک 4 هم توش هست.
یعنی میتونی توی IDE خودت یه agent هوشمند و رایگان داری که فایلهاتو میشناسه و میتونی براش تسک تعریف کنی!
من تست کردم باحال بود .کار راه بندازه و رایگان بدون محدودیت .
تستش ضرر نداره کامنت کنید اگر حال کردید
https://openrouter.ai/
https://roocode.com/
@DevTwitter | <Ali Arghyani/>
اخیراً گروک 4 رایگان شده و منم رفتم تستش کنم. ولی توی این مسیر یه حرکت باحال زدم!
اول بگم گروک 4 چیه و چرا باحاله:
- مدل جدید xAI با پنجره زمینه ۲ میلیون توکن
- سرعت پردازش بالا
- رایگان! (الان حداقل اینطوریه)
- برای تحلیل کد و حل مسائل پیچیده عالیه
یه افزونه VS Code به اسم Roo Code پیدا کردم!
( توی کرسر و اینا هم میشه نصبش کرد دیگه )
این افزونه مثل یه agent هوشمند عمل میکنه:
- فایلهاتو ایندکس میکنه و میشناسه
- میتونی تسکهای مشخص براش تعریف کنی و انجام بده
- از OpenRouter API پشتیبانی میکنه
- میتونی از مدلهای مختلف مثل همون گروک 4 توش استفاده کنی
بهترین بخش اینجاست که Roo Code از OpenRouter API پشتیبانی میکنه و گروک 4 هم توش هست.
یعنی میتونی توی IDE خودت یه agent هوشمند و رایگان داری که فایلهاتو میشناسه و میتونی براش تسک تعریف کنی!
من تست کردم باحال بود .کار راه بندازه و رایگان بدون محدودیت .
تستش ضرر نداره کامنت کنید اگر حال کردید
https://openrouter.ai/
https://roocode.com/
@DevTwitter | <Ali Arghyani/>
Forwarded from a pessimistic researcher (Kc)
PhD, Master, and Intern in Software Testing @ Monash University
————————————————
توی اعلامیه بیشتر به دکتری اشاره کرده ولی توی لینک در مورد اینترن و مستر هم توضیح داده
🚀 Join My Research Group at Monash Information Technology!
I’m looking for motivated PhD students who are passionate about software testing and debugging — particularly in LLM-aided testing/debugging and testing AI systems.
Learn more about my research here 👉 https://yqtian.com/openings.html
Feel free to contact me via [email protected].
————————————————
توی اعلامیه بیشتر به دکتری اشاره کرده ولی توی لینک در مورد اینترن و مستر هم توضیح داده
🚀 Join My Research Group at Monash Information Technology!
I’m looking for motivated PhD students who are passionate about software testing and debugging — particularly in LLM-aided testing/debugging and testing AI systems.
Learn more about my research here 👉 https://yqtian.com/openings.html
Feel free to contact me via [email protected].
Forwarded from DevTwitter | توییت برنامه نویسی
دیگه CSS هم داره میشه زبان برنامه نویسی
آیا میدونستید که CSS به تازگی داره قابلیت شرطیسازی به سبک زبانهای برنامهنویسی رو به خودش اضافه میکنه؟
با معرفی تابع if() در CSS (در نسخههای جدید Chrome) میتونیم شرایط داخل خود CSS تعریف کنیم، با کمترین نیاز به JavaScript برای تغییر استایل!
این ویژگی، CSS رو بیشتر از همیشه به یک زبان برنامهنویسیِ Declarative نزدیکتر میکنه و این یعنی مجبور نیستیم برای “اگر فلان بود فلان کن” به JavaScript رجوع کنیم، بلکه منطق ساده را مستقیماً در خود CSS بنویسیم.
البته فعلاً پشتیبانی مرورگرها محدود هستش، پس برای پروژههای تولیدی باید با احتیاط بهش رجوع کرد.
اگه دوست داری خودت این مثال رو امتحان کن تو کدپن گذاشتم:
https://codepen.io/Ali-Nazari-Uzman/pen/MYKmWxQ
@DevTwitter | <Ali Nazari/>
آیا میدونستید که CSS به تازگی داره قابلیت شرطیسازی به سبک زبانهای برنامهنویسی رو به خودش اضافه میکنه؟
با معرفی تابع if() در CSS (در نسخههای جدید Chrome) میتونیم شرایط داخل خود CSS تعریف کنیم، با کمترین نیاز به JavaScript برای تغییر استایل!
این ویژگی، CSS رو بیشتر از همیشه به یک زبان برنامهنویسیِ Declarative نزدیکتر میکنه و این یعنی مجبور نیستیم برای “اگر فلان بود فلان کن” به JavaScript رجوع کنیم، بلکه منطق ساده را مستقیماً در خود CSS بنویسیم.
البته فعلاً پشتیبانی مرورگرها محدود هستش، پس برای پروژههای تولیدی باید با احتیاط بهش رجوع کرد.
اگه دوست داری خودت این مثال رو امتحان کن تو کدپن گذاشتم:
https://codepen.io/Ali-Nazari-Uzman/pen/MYKmWxQ
@DevTwitter | <Ali Nazari/>
Forwarded from code2 - تکنولوژی و فناوری
This media is not supported in your browser
VIEW IN TELEGRAM
مدیرعاملی که بدون هیچ تلاشی احترام را جلب کرد
در گرند پری چین ۲۰۱۸، مارتین براندل، مفسر فرمول یک، پرسید: «آیا انگلیسی صحبت میکنید؟» - بدون اینکه متوجه شود با دکتر لیزا سو، مدیرعامل AMD، صحبت میکند.
او آرام، خونسرد و با اعتماد به نفس، ثابت کرد که نفوذ واقعی ربطی به ظاهر ندارد - بلکه به بینش، تخصص و قدرت حضور در لحظه مربوط میشود.
@code2_ir
در گرند پری چین ۲۰۱۸، مارتین براندل، مفسر فرمول یک، پرسید: «آیا انگلیسی صحبت میکنید؟» - بدون اینکه متوجه شود با دکتر لیزا سو، مدیرعامل AMD، صحبت میکند.
او آرام، خونسرد و با اعتماد به نفس، ثابت کرد که نفوذ واقعی ربطی به ظاهر ندارد - بلکه به بینش، تخصص و قدرت حضور در لحظه مربوط میشود.
@code2_ir
Forwarded from Accio
Microrizz | A simple proxy protocol meant to be used on cheap Nodejs application services (works over websocket and webrtc). This is one of my older repos but I find it useful from time to time. You can deploy it on a serverless provider and get a local socks5 proxy with its client
https://github.com/Keivan-sf/microrizz
https://github.com/Keivan-sf/microrizz
Forwarded from Gopher Academy
🔵 عنوان مقاله
How to Reproduce and Fix an I/O Data Race with Go and DTrace
🟢 خلاصه مقاله:
در این مقاله نویسنده با یک باگ مبهم روبهرو میشود که فقط در CI رخ میدهد: یک data race در سطح I/O فایلها که باعث شکست گهگاه تستها میشود. چون این رقابت در مرز فایلسیستم رخ میدهد و نه در حافظه مشترک، ابزار race detector در Go آن را تشخیص نمیدهد. برای بازتولید محلی، نویسنده شرایط شبیه CI را ایجاد میکند: اجرای تکراری تستها، افزایش همزمانی، و ایجاد تنوع زمانی تا ترتیبهای نادری که خطا را میسازند آشکار شوند. با استفاده از DTrace و رصد فراخوانیهای سیستمی مانند open، write، fsync و rename، الگوی واقعی آشکار میشود: خواندن فایل همزمان با نوشتن/حذف جزئی یا قبل از تحویل اتمی محتوا.
راهکار با اتمیسازی و هماهنگسازی است: نوشتن در فایل موقت و سپس os.Rename برای تحویل اتمی، افزودن fsync در نقاط لازم، و در صورت نیاز قفل/کانال برای سریالسازی دسترسی به مسیرهای مشترک. در تستها نیز از t.TempDir() برای جداسازی حالت، پرهیز از تکیه بر mtime، و اتکا به سیگنالهای قطعی بهجای تأخیرهای زمانی استفاده میشود. نتیجه، حذف flaky بودن در CI و همگرایی رفتار محلی و CI است؛ و درس اصلی اینکه برای رقابتهای I/O باید به ابزارهای ردیابی سطح سیستم تکیه کرد و پروتکل I/O را صریح و اتمی طراحی نمود.
#Go #DTrace #Concurrency #CI #Filesystem #Testing #Debugging #RaceCondition
🟣لینک مقاله:
https://golangweekly.com/link/175360/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
How to Reproduce and Fix an I/O Data Race with Go and DTrace
🟢 خلاصه مقاله:
در این مقاله نویسنده با یک باگ مبهم روبهرو میشود که فقط در CI رخ میدهد: یک data race در سطح I/O فایلها که باعث شکست گهگاه تستها میشود. چون این رقابت در مرز فایلسیستم رخ میدهد و نه در حافظه مشترک، ابزار race detector در Go آن را تشخیص نمیدهد. برای بازتولید محلی، نویسنده شرایط شبیه CI را ایجاد میکند: اجرای تکراری تستها، افزایش همزمانی، و ایجاد تنوع زمانی تا ترتیبهای نادری که خطا را میسازند آشکار شوند. با استفاده از DTrace و رصد فراخوانیهای سیستمی مانند open، write، fsync و rename، الگوی واقعی آشکار میشود: خواندن فایل همزمان با نوشتن/حذف جزئی یا قبل از تحویل اتمی محتوا.
راهکار با اتمیسازی و هماهنگسازی است: نوشتن در فایل موقت و سپس os.Rename برای تحویل اتمی، افزودن fsync در نقاط لازم، و در صورت نیاز قفل/کانال برای سریالسازی دسترسی به مسیرهای مشترک. در تستها نیز از t.TempDir() برای جداسازی حالت، پرهیز از تکیه بر mtime، و اتکا به سیگنالهای قطعی بهجای تأخیرهای زمانی استفاده میشود. نتیجه، حذف flaky بودن در CI و همگرایی رفتار محلی و CI است؛ و درس اصلی اینکه برای رقابتهای I/O باید به ابزارهای ردیابی سطح سیستم تکیه کرد و پروتکل I/O را صریح و اتمی طراحی نمود.
#Go #DTrace #Concurrency #CI #Filesystem #Testing #Debugging #RaceCondition
🟣لینک مقاله:
https://golangweekly.com/link/175360/web
➖➖➖➖➖➖➖➖
👑 @gopher_academy
Forwarded from linuxtnt(linux tips and tricks) (hosein seilany https://seilany.ir/)
⭐️لینوکس پیشرفته
⭐️مفهوم Copy-on-Write (COW) در لینوکس
🔸در سیستمعامل لینوکس، زمانی که چند پردازش (Process) از یک ناحیه حافظه یا فایل مشترک استفاده میکنند ، کرنل در ابتدا فقط یک نسخهی مشترک از دادهها را در حافظه نگه میدارد.
در این حالت، تمام پردازش ها بهصورت همزمان به همان دادهها دسترسی دارند، اما هیچیک تا زمانی که داده را تغییر ندادهاند، مالک واقعی آن کپی نیستند.
🔸به محض اینکه یکی از پردازش ها تلاش کند بخشی از داده را تغییر دهد (Write)، مکانیزم Copy-on-Write (COW) فعال میشود.
در این لحظه، کرنل یک کپی مستقل از همان صفحهی حافظه (Memory Page) را فقط برای همان پردازش میسازد و سایر پردازهها همچنان به نسخهی اصلی دسترسی دارند.
ربه این ترتیب، عملیات نوشتن باعث میشود دادهها از حالت اشتراک خارج شوند، در حالی که خواندن همچنان بدون تکرار حافظه انجام میشود.
🔸این روش باعث صرفهجویی چشمگیر در حافظه میشود، بهویژه زمانی که چند پردازه از یک برنامه واحد ایجاد شده باشند (مانند فرآیندهای متعدد سرورهای وب یا برنامههای چندرشتهای).
🔹 درون کرنل لینوکس:
پیادهسازی اصلی این رفتار در فایل زیر قرار دارد:
mm/memory.c
در این بخش از کرنل، مکانیزم COW هنگام بروز page fault مدیریت میشود.
مشاهدهی رفتار حافظهی اشتراکی و صفحههای COW
با این ابزارها میتونی بفهمی چند صفحهی حافظه واقعاً فیزیکی مشترک است و کجاها COW رخ داده.
نمونه:
نویسنده: حسین سیلانی.اموزش بیشتر در:
https://learninghive.ir
⭐️مفهوم Copy-on-Write (COW) در لینوکس
🔸در سیستمعامل لینوکس، زمانی که چند پردازش (Process) از یک ناحیه حافظه یا فایل مشترک استفاده میکنند ، کرنل در ابتدا فقط یک نسخهی مشترک از دادهها را در حافظه نگه میدارد.
در این حالت، تمام پردازش ها بهصورت همزمان به همان دادهها دسترسی دارند، اما هیچیک تا زمانی که داده را تغییر ندادهاند، مالک واقعی آن کپی نیستند.
🔸به محض اینکه یکی از پردازش ها تلاش کند بخشی از داده را تغییر دهد (Write)، مکانیزم Copy-on-Write (COW) فعال میشود.
در این لحظه، کرنل یک کپی مستقل از همان صفحهی حافظه (Memory Page) را فقط برای همان پردازش میسازد و سایر پردازهها همچنان به نسخهی اصلی دسترسی دارند.
ربه این ترتیب، عملیات نوشتن باعث میشود دادهها از حالت اشتراک خارج شوند، در حالی که خواندن همچنان بدون تکرار حافظه انجام میشود.
🔸این روش باعث صرفهجویی چشمگیر در حافظه میشود، بهویژه زمانی که چند پردازه از یک برنامه واحد ایجاد شده باشند (مانند فرآیندهای متعدد سرورهای وب یا برنامههای چندرشتهای).
🔹 درون کرنل لینوکس:
پیادهسازی اصلی این رفتار در فایل زیر قرار دارد:
mm/memory.c
در این بخش از کرنل، مکانیزم COW هنگام بروز page fault مدیریت میشود.
مشاهدهی رفتار حافظهی اشتراکی و صفحههای COW
با این ابزارها میتونی بفهمی چند صفحهی حافظه واقعاً فیزیکی مشترک است و کجاها COW رخ داده.
نمونه:
pmap -x <PID>
نویسنده: حسین سیلانی.اموزش بیشتر در:
https://learninghive.ir
Forwarded from DevTwitter | توییت برنامه نویسی
آپدیت اکستنشن تقویم فارسی در صف انتشار قرار گرفت.
در این آپدیت روز های تقویم رو روی آیکون اکستنشن نشون میدیم و میتونید بدون نیاز به باز کردن اکستنشن عدد روز ها رو مشاهده کنید، این قابلیت در هیچ اکستنشن خارجی ای تابحال وجود نداشته و برای اولین بار در اکستنشن تقویم فارسی ایجاد شده.
قابلیت ها:
- نمایش تمامی مناسبت ها
- قابلیت ایجاد یادداشت و یاددآوری برای روز های دلخواه
- رابط کاربری زیبا و حرفه ای
- باز شدن از طریق منوی ساید بار
- نمایش روز های ماه روی ایکون اکستنشن
لینک اکستنشن
@DevTwitter | <امید زاهدی/>
در این آپدیت روز های تقویم رو روی آیکون اکستنشن نشون میدیم و میتونید بدون نیاز به باز کردن اکستنشن عدد روز ها رو مشاهده کنید، این قابلیت در هیچ اکستنشن خارجی ای تابحال وجود نداشته و برای اولین بار در اکستنشن تقویم فارسی ایجاد شده.
قابلیت ها:
- نمایش تمامی مناسبت ها
- قابلیت ایجاد یادداشت و یاددآوری برای روز های دلخواه
- رابط کاربری زیبا و حرفه ای
- باز شدن از طریق منوی ساید بار
- نمایش روز های ماه روی ایکون اکستنشن
لینک اکستنشن
@DevTwitter | <امید زاهدی/>
Forwarded from کانال مهرداد لینوکس
🔔 انتشار Python 3.14.0
✨ پشتیبانی از حالت Free-Threaded (بدون GIL)
در برنامهای محاسباتی، میتوانید در چند نخ به صورت واقعی روی چند هسته اجرا شود
پیشفرض فعال نیست.هنگام ساخت یا با تنظیمات
✨ رشتههای Template یا t-strings
مشابه f-strings با امکان کنترل بیشتر و ارزیابی دلخواه در زمان اجرا
✨ ارزیابی تنبلی برای annotationها (Deferred Annotations)
به جای اینکه annotationها بلافاصله در زمان تعریف تابع/کلاس ارزیابی شوند، ذخیره و زمان لازم پردازش میشن
✨ دیباگر خارجی امن (Zero-overhead external debugger interface)
اتصال دیباگر به فرایند Python در حال اجرا بدون افزودن سربار زیاد
باید محیط اجرا اجازه اتصال بدهد
✨ ماژول compression.zstd
پشتیبانی از الگوریتم فشردهسازی Zstandard در کتابخانه استاندارد
✨ پشتیبانی از چند مفسر (Multiple Interpreters)
ماژول concurrent.interpreters در کتابخانه استاندارد امکان ایجاد چند مفسر در یک فرآیند
✨بهبود پیامهای خطا و پیشنهاد اصلاحات
اگر کد اشتباه بنویسی، گاهی خطا بهصورت «آیا منظور شما … بود؟» پیشنهاد میدهد
@MehrdadLinuxchannel
#Linux #لینوکس
#news
✨ پشتیبانی از حالت Free-Threaded (بدون GIL)
در برنامهای محاسباتی، میتوانید در چند نخ به صورت واقعی روی چند هسته اجرا شود
پیشفرض فعال نیست.هنگام ساخت یا با تنظیمات
✨ رشتههای Template یا t-strings
مشابه f-strings با امکان کنترل بیشتر و ارزیابی دلخواه در زمان اجرا
✨ ارزیابی تنبلی برای annotationها (Deferred Annotations)
به جای اینکه annotationها بلافاصله در زمان تعریف تابع/کلاس ارزیابی شوند، ذخیره و زمان لازم پردازش میشن
✨ دیباگر خارجی امن (Zero-overhead external debugger interface)
اتصال دیباگر به فرایند Python در حال اجرا بدون افزودن سربار زیاد
باید محیط اجرا اجازه اتصال بدهد
✨ ماژول compression.zstd
پشتیبانی از الگوریتم فشردهسازی Zstandard در کتابخانه استاندارد
✨ پشتیبانی از چند مفسر (Multiple Interpreters)
ماژول concurrent.interpreters در کتابخانه استاندارد امکان ایجاد چند مفسر در یک فرآیند
✨بهبود پیامهای خطا و پیشنهاد اصلاحات
اگر کد اشتباه بنویسی، گاهی خطا بهصورت «آیا منظور شما … بود؟» پیشنهاد میدهد
@MehrdadLinuxchannel
#Linux #لینوکس
#news
Forwarded from Milwad Khosravi | میلاد خسروی
🎯 فولاستک یعنی چی؟
وقتی از Full-Stack Developer صحبت میکنیم، منظور کسیه که هم دنیای Front-End رو بلده، هم Back-End رو — یعنی از طراحی رابط کاربری تا معماری سرور و فضای ابری!
تصویر بالا خیلی خلاصه نشون میده که فولاستک بودن یعنی تسلط روی مجموعهای از مهارتها:
📐 Layout → ساختاردهی و سازمانبندی صفحات وب
💡 Front-End → طراحی و پیادهسازی رابط کاربری (UI/UX)
⚙️ Logic → ساخت منطق برنامه و ارتباط بین اجزا
🖥 Server → مدیریت سرور و APIها
🏗 Architecture → طراحی ساختار سیستم و دیتابیس
☁️ Cloud → کار با سرویسهای ابری و دیپلوی پروژهها
🧠 Knowledge → یادگیری مداوم و درک کلی از چرخهی توسعه
🧪 Testing → اطمینان از عملکرد درست کد و رفع باگها
🖌 UI/UX → طراحی تجربه و رابط کاربری
به زبان ساده:
اگر تازه شروع کردی، پیشنهاد من اینه که اول روی Front-End تمرکز کن و بعد کمکم به Back-End و Cloud برو.
📱 @MilwadKhosravi
وقتی از Full-Stack Developer صحبت میکنیم، منظور کسیه که هم دنیای Front-End رو بلده، هم Back-End رو — یعنی از طراحی رابط کاربری تا معماری سرور و فضای ابری!
تصویر بالا خیلی خلاصه نشون میده که فولاستک بودن یعنی تسلط روی مجموعهای از مهارتها:
📐 Layout → ساختاردهی و سازمانبندی صفحات وب
💡 Front-End → طراحی و پیادهسازی رابط کاربری (UI/UX)
⚙️ Logic → ساخت منطق برنامه و ارتباط بین اجزا
🖥 Server → مدیریت سرور و APIها
🏗 Architecture → طراحی ساختار سیستم و دیتابیس
☁️ Cloud → کار با سرویسهای ابری و دیپلوی پروژهها
🧠 Knowledge → یادگیری مداوم و درک کلی از چرخهی توسعه
🧪 Testing → اطمینان از عملکرد درست کد و رفع باگها
🖌 UI/UX → طراحی تجربه و رابط کاربری
به زبان ساده:
یک فولاستک دیولوپر باید بتونه از طراحی صفحه تا تحویل نهایی اپلیکیشن، همه مراحل رو درک کنه و اجرا کنه.
اگر تازه شروع کردی، پیشنهاد من اینه که اول روی Front-End تمرکز کن و بعد کمکم به Back-End و Cloud برو.
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from کانال مهرداد لینوکس
🔔 انتشار نسخه جدید اوبونتو Ubuntu 25.10 🎉
✅ با اسم Questing Quokka
✨کرنل Linux 6.17
پشتیبانی از سختافزارهای جدید، بهبود در عملکرد و درایورهای گرافیکی
✨حذف GNOME روی Xorg
گزینه “Ubuntu on Xorg” در صفحه ورود حذف و GNOME بر بستر Wayland
✨ترمینال جدید: Ptyxis
ترمینال Ptyxis جایگزین GNOME Terminal
✨تصویرنمای جدید Loupe
Loupe به عنوان تصویرنمای پیشفرض جایگزین Eye of GNOME
✨ سوئیچ به sudo-rs
جایگزینی نسخه sudo در C، با sudo-rs
✨ استفاده از Dracut برای initramfs
به جای initramfs-tools، از Dracut به عنوان ابزار تولید initial RAM filesystem
✨بهبود در رمزگذاری کامل دیسک با پشتیبانی TPM
امکان استفاده از TPM برای رمزگذاری کامل دیسک
✨تغییرات در Coreutils → Rust Coreutils
انتقال اجزای پایهای مانند Coreutils به نسخههای نوشتهشده در Rust
✨تغییرات دیگر قابل توجه
– حذف ابزار Startup Applications؛ مدیریت برنامههای خودکار در بخش Settings
– پشتیبانی RISC-V محدود به شبیهساز QEMU
– تقویت پشتیبانی NVIDIA روی Wayland و بهینهسازی تجربه دسکتاپ
@MehrdadLinuxchannel
#Linux #لینوکس
#linux_command
✅ با اسم Questing Quokka
✨کرنل Linux 6.17
پشتیبانی از سختافزارهای جدید، بهبود در عملکرد و درایورهای گرافیکی
✨حذف GNOME روی Xorg
گزینه “Ubuntu on Xorg” در صفحه ورود حذف و GNOME بر بستر Wayland
✨ترمینال جدید: Ptyxis
ترمینال Ptyxis جایگزین GNOME Terminal
✨تصویرنمای جدید Loupe
Loupe به عنوان تصویرنمای پیشفرض جایگزین Eye of GNOME
✨ سوئیچ به sudo-rs
جایگزینی نسخه sudo در C، با sudo-rs
✨ استفاده از Dracut برای initramfs
به جای initramfs-tools، از Dracut به عنوان ابزار تولید initial RAM filesystem
✨بهبود در رمزگذاری کامل دیسک با پشتیبانی TPM
امکان استفاده از TPM برای رمزگذاری کامل دیسک
✨تغییرات در Coreutils → Rust Coreutils
انتقال اجزای پایهای مانند Coreutils به نسخههای نوشتهشده در Rust
✨تغییرات دیگر قابل توجه
– حذف ابزار Startup Applications؛ مدیریت برنامههای خودکار در بخش Settings
– پشتیبانی RISC-V محدود به شبیهساز QEMU
– تقویت پشتیبانی NVIDIA روی Wayland و بهینهسازی تجربه دسکتاپ
@MehrdadLinuxchannel
#Linux #لینوکس
#linux_command