👾 Geek Engineers
537 subscribers
51 photos
42 files
329 links
👾 Extremist software engineering guidance for Geeks.

Website:
https://geekengineers.netlify.app

Github:
https://github.com/geekengineers
https://github.com/tahadostifam

Community:
@geek_engineers_community
Download Telegram
👍61
گربه شرودینگر: زنده یا مرده؟

فرض کنید یک گربه داخل یک جعبه است، همراه با یک مکانیزم خطرناک که به شکل تصادفی عمل می‌کند، مثلا یک اتم رادیواکتیو:

اگر اتم واپاشی کند → مکانیزم فعال می‌شود → گربه کشته می‌شود.
اگر اتم واپاشی نکند → گربه زنده می‌ماند.

طبق قوانین مکانیک کوانتومی، تا وقتی جعبه را باز نکنیم و نگاه نکنیم، گربه نه زنده است نه مرده، بلکه در یک حالت ترکیبی از زنده و مرده (ابرپوزیشن) قرار دارد:

این آزمایش فکری نشان می‌دهد که قوانین عجیب مکانیک کوانتومی، وقتی روی اشیای بزرگ اعمال شوند، نتایج غیرمنتظره و فلسفی می‌دهند.

پیام شرودینگر: هدفش اثبات نبود، بلکه نشان دادن پارادوکس ابرپوزیشن و نقش مشاهده‌گر بود.
دنیای ذرات کوچک و بزرگ متفاوت عمل می‌کند، و ما هرگز گربه‌ای همزمان زنده و مرده نمی‌بینیم، چون با محیط تعامل دارد و حالت ابرپوزیشن سریع «می‌ریزد» (decoherence).

https://youtu.be/UjaAxUO6-Uw?si=insQYBA4dRBOMHD6
https://youtu.be/uVKMY-WTrVo?si=GmZC3ApbkB5DbMHK
🗿5
زبانی که Jonathan ساخته (Jai) میگه که همه چی complied time هست و runtime polymorphism نداریم =)

https://youtu.be/i6KVMGT5kRE?si=XFjkw-4_59Sjn73Y

درکل خود شخص جاناتان دیدگاه جالبی داره. دیدن ویدیو هاشو پیشنهاد میکنم.
👾3
C++ بد بود و با استاندارد 26 بدتر هم شده

https://isocpp.org/files/papers/P2996R4.html#emulating-typeful-reflection
template <class... Tags>
consteval auto make_named_tuple(std::meta::info type, Tags... tags) {
std::vector<std::meta::info> nsdms;
auto f = [&]<class Tag>(Tag tag){
nsdms.push_back(data_member_spec(
dealias(^typename Tag::type),
{.name=Tag::name()}));

};
(f(tags), ...);
return define_class(type, nsdms);
}

کلا طرز فکر ++c گرایش خاصی به ساختن پیچیدگی داره |: صد رحمت به Rust و Zig. حداقل ترید آف ش منطقی تره
👍6😱1
Polyhedral Model

Part 1:
https://www.youtube.com/watch?v=_TFrPGV_A-s

Part 2:
https://www.youtube.com/watch?v=irqg3L5Xpqk

Part 3:
https://www.youtube.com/watch?v=6WkIzH8LyGY

پارت های دیگه هم داره اگر علاقه مند بودید میتونید ببینید|:
فعلا نظرم اینه که اوضاع 1000x-خیلی خیطه!
نظری برا این مساله دارید؟ |:

الان مساله دیگه ای که توجهم رو جلب کرده. یک مقاله ای داشتم میخوندم راجب اینکه چطور میشود n-dimension loop رو روی معماری multiprocessor پارالل کرد؟ و خب خیلی خفنه :> میخواستم نظر شمارم بدونم تو این زمینه تا یه جمع بندی داشته باشم راجبش و...

ایده اصلی ش راجب اینه که تسک های مختلف رو بصورت tile (کاشی) در میاره و خیلی سعی میکنه که بین این ها bound هارو پیدا بکنه.

من خودم به Polyhedral Model داشتم فکر میکردم که میتونه تا حدی این کارو انجام بده ولی این اومده یه کار خفن تر کرده. از یه Modified Genetic Algorithm استفاده کردن تا درواقع توی رانتایم سعی میکنه به اصطلاح یادبگیره که سریعترین راه برای محاسبه و پارالل کردن تسک ها چطوریه؟
یه cluster میسازن و نسبت به وظیفه ش (weight ش) و اتصالاتش (یه گراف ساخته میشه ازش درواقع) یه score هم بهش میدیم.

بعد از روی این گرافی که supercompiler میسازه تلاش میشود که سریعترین path رو پیدا کنن و بین processor ها distribute میشه |:

منتها این همش نیست. تا جایی که من متوجه شدم از مقاله ش. بعد ازینکه اجرا میشه (یا شایدم از همون گراف آنالیز میکنه نمیدونم مطمن نیستم...) میاد یک سیستم penalty/reward درست میکنه تا بتونه شایستگی اون path رو مشخص بکنه.

بهش پاداش میده اگر سوپرکامپایلر ببینه که مسیرش bound کمتری دریافت کرده و سریعتر اجرا شده. این پاداشه ینی توی (رجیستری مون یا همون جدول شایستگی که ساختیم score ش افزایش پیدا میکنه و باعث میشه که پایدار تر باشه... ینی احتمالش کمتره که با یه path دیگه جایگزین بشوه).

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

فکر میکنم این مکانیزم رو LAGA (Learning-based Adaptive Genetic Algorithm) نامیده اند.

اینا چیزایی بود که من تقریبا تونستم از مقاله بفهمم. اینکه واقعا میشه در عمل همچین چیزی پیاده سازی کرد یا نه جای بحث داره.
👍2💊1