Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
530 - Telegram Web
Telegram Web
Packt.Clang.Compiler.Frontend.pdf
10.2 MB
Clang Compiler Frontend: Get to grips with the internals of a C/C++ compiler frontend and create your own tools (2024) by Ivan Murashko

خوندمش تموم شد. ولی ۵ درصد هم به دانشم اضافه نکرد.
انگار کمپلت هیچ مطلبی توش نبود🤕
👍1
Writing_a_C_Compiler_Build_a_Real_Programming_Language_from_Scratch.pdf
26 MB
Writing a C Compiler: Build a Real Programming Language from Scratch (2023)

پ.ن: این محتوای مفیدی داره. داره یه کامپایلر C رو با کامپایل کردنش بطور مستقیم به اسمبلی میسازه. برای کسب دانش اسمبلی و compiler design خیلی خوبه. ولی بازم بدرد من نمیخوره /: اینکه یه همچین پروژه ای استیبل بشه ادم نابود میشه. کامپایل کردن به اسمبلی برای studying purposes بهتره.
👾3🔥1
زبان موجو (Modular) اخیرا دستاورد های بی نظیری داشته که خالی از لطف نیست کمی راجبش حرف بزنیم :) منم هرچقدر که راجبش میفهمم همینجا میگم.

درواقع موجو یک زبان برنامه نویسی جدید هست که شباهت زیادی به پایتون داره. ولی هدفش اینه که پرفرمنس C/C++ و کنترل روی سخت افزار ارائه بده. برای Machine Learning و high-performance computing (HPC) و در زمینه محاسبات علمی کاربرد داره. پرفرمنس قابل مقایسه ای با Rust و ++C داره. لازم به ذکره که دیتا تایپ های قدرتمند و ownership model ای که از راست الهام گرفته شده رو ارائه میده.

از همون ابتدا ساپورت parallelism هم داره! از فیچر هایی مثل autotuning و multithreading و SIMD support به خوبی پشتیبانی میکنه.

یه نقطه جالبی هم که فهمیدم اینه که گویا بر پایه MLIR ساخته شده کامپایلرش :) اگه براتون جالبه... سازنده ش Chris Lattner معروف هست! همان سازنده کامپایلر LLVM و همچنین زبان Swift. و MLIR هم یک Intermediate Represntation ای هست شبیه به LLVM-IR ولی با این تفاوت که ساپورت بیشتری از انتزاعات و فیچر های high level داره. البته لازم به ذکره که ما هنوز به خوبی تسلط روی LLVM-IR نداریم :) و MLIR هم تازگی داره... و کمبود داکیومنت و این ها به خوبی احساس میشود.

جمع بندی کاربرد های Mojo :

- Writing ML models and kernels (alternative to CUDA or C++)

- Optimizing data pipelines and numeric computations

- Systems-level programming where Python is too slow

- High-performance scientific computing

یوتیوب شون:

https://www.youtube.com/watch?v=FSBnDzMwOKs

پ.ن: رقیب سر سخت پایتون از راه رسیده :)
👾6🔥41
توی V کیوورد nil رو unsafe در نظر گرفتن چون مستعد پنیک و UB هستش‌. در عوض معادلش که یه صفر (zero) هست رو safe تلقی میکنه و کاملا اوکیه😂🤦

Strangely, nil requires unsafe, but the equivalent 0 literal in a pointer context does not. This suggests very primitive reasoning by the compiler: an "evil" keyword is forbidden, but completely equivalent code without the keyword is allowed.

یه آرتیکل برای نقد زبان برنامه نویسی V 

https://justinas.org/the-bizarre-world-of-v

همچنین اینم هست که بیشتر تکنیکال بررسیش کرده (اپدیت ۲۰۲۳) :

https://n-skvortsov-1997.github.io/reviews

و اینکه تا دلتون بخواد داره برای ایده های V ایراد میگیره. همین emit C و در کنارش کامپایل کردن به machine code روی معماری x64 کافی نبود؟ رفتن emit Go و emit JS هم نوشتن😂 توی آرتیکل به وضوح نشون میده چطوری مدل کانکارنسی ش تبدیل به Promise توی جاوا اسکریپت میشه و این totally does not make sense😂🤦.

از مموری منیجمنت ش هم که نگم. دیدگاه م کلا به V تغییر کرد بعد از خوندن این مقاله ها! توی وی اومدن یه فلگ گذاشتن به اسم autofree. در واقع نه GC هست و نه RC. و حتی شبیه Rust هم نیست. در واقع میگه ما میتونیم مموری روی توی compilation time بیایم مدیریت بکنیم. ینی میاد خودش free() اضافه می کنه.
ایا لازمه بگم که این نمیشه و چقد UB میخوره؟😂
اخه جدا ازین... اومدن با GC شون هم ترکیب کردن! یعنی اگر خودش فری نمیشه... GC مسعولیت شو به عهده میگیره😂🤦
اینم بگم که از BoehmGC بعنوان مموری منیجمنت دیفالت استفاده میکنن.

دیگه بقیش تو دوتا آرتیکل هست میتونید چکش کنید :)

We can conclude that autofree is a very crude technology.
👍8
اگه از hyprland استفاده میکنید، حتما این کانفیگ رو ببینید که میتونه زیباترین و پرکاربرد ترین دسکتاپ عمرتون رو بسازه!
من هرچی خودم کانفیگ کرده بودم ریختم دور...
https://github.com/end-4/dots-hyprland

@DevTwitter | <Mohsen Khodabakhshi/>
6👎2🗿1
رفرنس کانتینگ یا به اصطلاح RC چیه؟

یک روش مدیریت مموری هست که توی بک گراند شامل یک‌ counter میشه. کامپایلر بطور هوشمندانه میاد پوینتر ها و رفرنس هایی که به آبجکت مورد نظر هست رو شناسایی میکنه (در پروسه کامپایل)، و بعد به ازای هر رفرنس میاد counter رو یک واحد increment میکنه. و زمانی که از اسکوپ مورد نظر خارج میشه، counter رو یک واحد decrement میکنه.

و اگر counter به صفر برسه ینی هیچ رفرنسی به این آبجکت وجود نداره و بی استفاده ست. پس بلافاصله free میشه allocation ش. همونطور که توی این سورس کد می‌بینید پیاده سازی ش راحته. یه Mutex Lock هم بهش اضافه میشه که توی محیط مولتی ترد هم مشکلی پیش نیاد.

مزایای RC اینه که وقفه یا به اصطلاح Stop the world ای که توی GC هست، توی RC بوجود نمیاد و ازاد سازی حافظه قابل پیش‌بینی تر هست.

معایبش :) در واقع اگر دوتا آبجکت به همدیگه رفرنس بدن که به اصطلاح Reference Cycling گفته میشه، درین صورت هیچ یک ازین دو آبجکت free نخواهند شد. معایب دیگه ش اینه که مخصوصا در محیط های مولتی ترد overhead خیلی زیادی داره. البته اگر سینگل ترد باشه هم درکل خیلی مکانیزم بهینه ای نیست.

در نتیجه نسبت به GC مکانیزم سنتی تر و پرفرمنس کمتری داره.

زبان هایی که از Reference Counting استفاده میکنند:

- Swift (Automatic RC)
- ObjectiveC
- Python (
Combination of GC and RC.
)
- C++ (Smart Pointers)
👾8👍2
درسته از دات نت بدمون میاد... ولی به احتمال زیاد از coreclr/gc برای سایروس استفاده کنم. فعلا گزینه بهتر ازین پیدا نکردم (از BoehmGC خیلی بهتره)

https://github.com/dotnet/runwww.tgoop.com/tree/main/src/coreclr/gc
👍6👎1🔥1🤡1
تو این ویدیو یه درایور ساده برای کرنل ویندوز مینویسه با زبان C
(صرف نشون دادن kernel debugger).

باید بگم باحال بود :) تا حالا یه درایور ننوشتم...

https://www.youtube.com/watch?v=GTrekHE8A00
🫡5👍1
اینم یه درایور داره مینویسه برای کنترل کردن نور یه کیبورد مکانیکی.

چون خودمم بلد نیستم... فقط میتونم بگم سیستم پروگرمینگ خیلی باحاله. و خب سعی میکنم یاد بگیرم :)

https://www.youtube.com/watch?v=is9wVOKeIjQ
👾6👍1
اینا تلاش های من در برابر burn out شدن و افسردگی ناشی از دولوپ طولانی مدته. گرچه خیلی روم کار ساز نیست ولی فعلا همین از دستم بر میاد :)

https://www.youtube.com/watch?v=i7kh8pNRWOo

دولوپر گیم آمریکایی و سازنده زبان Jai شخص Jonathan Blow که حداقل ۳۰ سال سابقه برنامه نویسی و سیستم پروگرمینگ ش هست راجب کنترل افسردگی و عدم انگیزه برای ادامه دادن توضیح میده.
👾41
پارتنر Chris Lattner خانوم Tanya هم مثل کریس یه دولوپر کامپایلر هست. و در حال حاضر مدیر اجرایی LLVM میباشد. فارغ التحصیل دانشگاه Portland آمریکا.

https://github.com/tlattner

پ.ن: اصلا هم حسادت نکردم...🤦
🫡7🤣1
سرگذشت مرحوم Terry A. Davis و سیستم عامل و زبان برنامه نویسی که ساخته بود :)

https://templeos.org
https://holyc-lang.com

https://www.youtube.com/watch?v=LtlyeDAJR7A

https://www.youtube.com/watch?v=YMUhbIAA9-8

اولا. تری حدود ۱۲۱ هزار خط کد رو تنهایی توی حدود ۱۰ سال نوشته برای درست کردن سیستم عامل معبد.

دوما. اینکار رو با استفاده از زبانی که خودش ساخته بود ینی HolyC انجام داده بود. یک زبان برنامه نویسی سیستمی با شباهت زیاد به C.

سوما. سیستم عامل معبد یکی از پیچیده ترین پروگرام های نوشته شده توسط یک single developer هست. در همین حین ویندوز ۷ با هزاران مشارکت کننده و ساپورت مالی ساخته شد...

چهارم. دیگه حرفی ندارم |: فقط میتونم بگم باععععع💀🫡
🫡9🔥1
یه ایده خفن که پیشنهاد میکنم امتحانش کنید.
نوشتن یه لایبرری IO با اسمبلی (x86)

https://www.youtube.com/watch?v=LigH48lyJ0M

پ.ن: کلی چیز میشه یاد گرفت ازین پروژه :>
🫡10
ویدیو یک واکنش از ThePrimeagen به انتقادات جاناتان بلو نسبت به نرم‌افزار متن‌باز است. بلو درباره فرهنگ، خلاقیت و مدل مشارکت در پروژه‌های متن‌باز صحبت می‌کند.

https://youtu.be/kn59Yn55Pos?si=WiBYdIl_JpQvJXDF

موضوعات مهم مطرح شده:

۱. رکود و کمبود خلاقیت
جاناتان بلو می‌گوید نرم‌افزار متن‌باز بیش از ۲۰ سال است که درجا می‌زند و کار خلاقانه واقعی خیلی کم در آن دیده می‌شود و بیشتر پروژه‌ها فقط کپی هستند. ThePrimeagen تا حدی موافق است اما اشاره می‌کند که نوآوری هم وجود دارد، مخصوصاً در زمینه‌هایی مثل فریم‌ورک‌های جاوااسکریپت.

۲. مدل Pull Request و سلسله‌مراتب پروژه‌ها
بلو از مدل Pull Request انتقاد می‌کند و می‌گوید این مدل باعث ایجاد یک هرم قدرت می‌شود که در آن تعداد کمی (حافظان پروژه) قدرت اصلی را دارند و این با دموکراتیک بودن متن‌باز در تضاد است. ThePrimeagen موافق است که این فرایند می‌تواند بی‌پاداش و سلسله‌مراتبی باشد و مشارکت‌کنندگان معمولاً قدرت و شناخت کافی ندارند.

۳. مدل‌های جایگزین مشارکت
بلو پیشنهاد می‌دهد که مشارکت فقط به گروهی مورد اعتماد محدود شود، مثل روشی که بعضی شرکت‌های بزرگ (مثل گوگل) دارند. ThePrimeagen می‌گوید این کار می‌تواند کیفیت را بالا ببرد و اصطکاک را کم کند، اما الزاماً بهتر یا بدتر نیست، فقط متفاوت است.

۴. دینامیک اجتماعی و انتقاد
بحث درباره چالش‌های اجتماعی متن‌باز است، مثل موانع فرهنگی و زبانی و اینکه انتقاد از کد می‌تواند شخصی تلقی شود. هر دو موافق‌اند که قضاوت فنی قوی مهم است اما نحوه بیان بازخورد برای سلامت جامعه اهمیت دارد.

۵. نقش شخصیت‌های سخت‌گیر
بلو معتقد است بسیاری از مشارکت‌کنندگان عالی، کار کردن با آن‌ها سخت است چون به کارشان اهمیت زیادی می‌دهند و استانداردهای بالایی دارند. ThePrimeagen هم موافق است و می‌گوید این شدت علاقه می‌تواند باعث رفتار تند شود، اما همین باعث پیشرفت پروژه‌ها می‌شود.

۶. حمایت از متن‌باز
همچنین ThePrimeagen تأکید می‌کند که باید از پروژه‌های متن‌بازی که به آن‌ها وابسته هستید، مالی حمایت کنید چون نگهداری آن‌ها زحمت زیادی دارد و معمولاً بدون دستمزد انجام می‌شود.
👍5🔥1
جایگزین اوپن سورس Heroku اومده :)

وان کلیک دیپلویمنت و رول بک ساپورت میکنه. اینتگریشن خوبی هم با گیت هاب داره.

https://canine.sh

باید بگم واقعا فوق العاده ست!

فقط همین یه جمله رو هم از Jonathan تکرار بکنم که، نرم افزار اوپن سورس در اغلب موارد صرفا از نو سازی نرم افزار های تجاری هست :) خلاقیت و نوآوری کمتر چیزی ست که به چشم میخورد...
5
یک کامپایلر خیلی خیلی کوچولو برای C که codegen assembly داره. برای یادگیری و ساختن یک C-like programming language خیلی مفیده خوندن سورس کدش و حتی فورک گرفتنش

https://github.com/rui314/chibicc
🔥4
2025/07/14 17:47:02
Back to Top
HTML Embed Code: