COMPΞZ 🧬
رفتن به کانال در Telegram
متخصص کامپیوتر و نرمافزار • سازنده • هنرمند و طراح • مجموعهدار • نویسنده • تحلیلگر • مشاور استارتاپی و ایدهپرداز 𐎲𐎴𐎠𐎼𐎴𐎫𐎹 𐏃𐎢𐎶𐎠𐎫𐎹 We create because the world deserves better code. https://linktr.ee/compez
نمایش بیشترکشور مشخص نشده استدسته بندی مشخص نشده است
369
مشترکین
+424 ساعت
+237 روز
+3930 روز
آرشیو پست ها
369
جیسون وایتزمن، پژوهشگر امنیت سایبری، پس از نصب افزونهای که به Claude متصل بود متوجه شد یک ایجنت با استفاده از کیف پول دیجیتال او، ۳۱۵ دلار خرید اینترنتی غیرمجاز انجام داده است. سناریویی که در آن یک فایل متنی ساده هم میتواند به بردار حمله تبدیل شود.
https://abc7news.com/post/anthropic-ai-hack-martinez-california-man-says-fraudulent-charges-racked-euros-claude-account/19366402/
خلاصه که اینطوریاست. 😉
369
بعضی از دوستان میرن فارکستر، وارپلت رو باز میکنن میبینن جنیهاشون نیست زهره ترک میشن! 😄
نترسید قبلاً که گفتم باگ فارکستره! همه چیز جاشه فقط وارپلته که مشکل نمایشی داره.
کافیه کیف فارکستر رو کلیدواژههاش رو بدین به Rabby یا Metamask خواهید دید جنیهای نازنینتون سر جاشونه! کسی نه بهشون دست زده نه جرأت داره دست بزنه. دیگه هرچی دزد و پدر سوخته بود رو توی این چند ماه شوت کردم بیرون! تنها خودم به خزانه دسترسی دارم که اونم زیر چند متر خاک چالش کردم برای توزیعهای آینده!
هیچ کس نمیتونه تا زمانی که خودتون کیفتون رو لو ندادین به جنیهاتون دسترسی داشته باشه نگران نباشید. 👌
ولی من باز هم پیگیرم تااین مشکل نمایشی رو هم حل کنن.
https://farcaster.xyz/compez.eth/0xab6f7a6a
369
این هم یک قالب آماده برای تنبلوفهایی که هنوز با AI کار نکردن، یا حداقل نمیدونن چطور باید هوش مصنوعی رو برای پروژههای ++C تنظیم کنن.
هدفش اینه که وقتی Claude Code، Codex، Copilot یا هر AI Agent دیگهای وارد یک پروژه ++C میشه، مثل یک برنامهنویس بیقانون رفتار نکنه! من این مثال رو تنظیم کردم مطابق آخرین چیزهایی که خودم روی تجربه میکنم.
این یعنی AI از همون اول بدونه چهارچوب استاندارد چیه:
- باید با C++20/23/26 کار کنه
- ساختار پروژه باید module-based باشه
- اعلانها داخل cppm باشه
- تعاریف داخل cpp باشه
- از مفاهیم (concepts) و ویژگیهای مهمی چون compile-time برای ارزیابی استفاده کنه
- از CMake مدرن استفاده کنه
- تستهای واقعی اجرا کنه
- نتیجه build/test رو الکی ادعا نکنه
- اگر جایی مجبور شد از raw pointer، manual memory، macro یا header استفاده کنه، دلیل مهندسیای باید داشته باشه.
داخل مخزن نمونههایی گذاشتم برای:
AGENTS.md CLAUDE.md Claude slash commands MCP config Modern CMake C++ module structure Unit tests GitHub Actions Review checklistاین پروژه قرار نیست یک library بزرگ باشه؛ بیشتر یک قالب (مثال) استاندارد برای اینه که AI داخل پروژههای ++C درست، مدرن و قابل کنترل کار کنه. چون واقعیت اینه که AI اگر بدون قانون وارد کد شما بشه، خیلی راحت میتونه پروژه رو تبدیل کنه به مخلوطی از سبکهای قدیمی، تصمیمهای نصفهنیمه و کدی که ظاهراً کار میکنه ولی قابل اعتماد نیست. برای همین، قبل از اینکه از AI بخوایم کد بنویسه، باید بهش بگیم دقیقاً با چه استانداردی باید باشه. https://github.com/thecompez/ai-for-modern-cpp #cpp #cplusplus #moderncpp #cpp20 #cpp23 #cpp26 #ai #codex #claudecode #cmake #softwareengineering
369
اینم واسه شما فارسی دوستها. 😄 با این زبان میتونی فارسی برنامهنویسی کنی! بعد میگن چقدر سخته! 😂😝
369
+2
یک ارجاع به گواهی استاندارد ایزو با عنوان ISO/IEC 14882:2024 از زبان که در سال ۲۰۲۳ استانداردسازی شده و در سال ۲۰۲۴ گواهیش صادر شده.
کلاً پیشنهاد میکنم وقتی چیزیرو یاد میگیرید یا ازش استفاده میکنید بهش علاقه نشون بدین؛ و اگرنه، نه درکش خواهید کرد و نه اون ابزار مناسبی برای نحوهٔ تفکر شما خواهد بود.
بخشهای مربوط به هر کتاب که هست مقدمه، یه توضیحی میدن که تاریخچه چی بوده واسهٔ چی بوده اینا برای ورق زدن نیست، برای خوندنه! برای درک کردنه.
این لینک اشارهٔ مستقیم به نقشهٔ راه استاندارد در حال حاضر رو نشون میده:
https://isocpp.org/std/status
و گواهی استاندارد:
https://www.iso.org/standard/83626.html
369
یک سؤال خیلی تکراری که خیلیها وقتی تازه ++C رو شروع میکنن ازم میپرسن اینه:
وقتی میگی C++26، یعنی نسخهٔ ۲۶ام سیپلاسپلاس؟!
نه!
اون عددی که کنار عنوان میاد، شمارهٔ نسخه نیست؛ سالِ استاندارد سازیه.
مثلاً:
C++11 یعنی استاندارد ۲۰۱۱
C++14 یعنی استاندارد ۲۰۱۴
C++17 یعنی استاندارد ۲۰۱۷
C++20 یعنی استاندارد ۲۰۲۰
C++23 یعنی استاندارد ۲۰۲۳
C++26 یعنی استاندارد ۲۰۲۶
از C++11 به بعد، تقریباً هر سه سال یک استاندارد جدید منتشر میشه. یعنی بین C++11 تا C++14 سه سال فاصله بود، بعد C++17، بعد C++20، بعد C++23 و بعد C++26 و بعدیش هم احتمال بسیار قوی ۲۹ در سال ۲۰۲۹ خواهد بود.
اهمیت ISO هم دقیقاً همینه؛ چون سیپلاسپلاس بر خلاف بقیهٔ زبانهای برنامهنویسی دست یک شرکت خاص نیست که هر وقت خواست یه چیزی اضافه کنه و اسمش رو بذاره نسخهٔ جدید.
استاندارد زبان به عنوان STL شناختهمیشه که زیر نظر ISO/IEC جلو میره؛ یعنی پیشنهادها بررسی میشن، دربارهشون بحث میشه، رأیگیری میشه، کامپایلرسازها و آدمهای فنی بزرگ دنیا درگیرش میشن و بعد از چند سال، خروجی تبدیل میشه به استاندارد رسمی.
پس C++26 یعنی بیست و ششمین نسخهٔ زبان نیست.
دلیل اینکه یک ابزار اینقدر روی استاندارد حساسه، فقط بحث فنی نیست؛ بحث ریسک صنعتی هم هست که هیچ جا اینو به کسی نمیگن معمولاً.
شرکتهای بزرگ و هزاران زیرساخت نرمافزاری حیاتی به این زبان وابستهان. هیچکس نمیاد روی زبانی سرمایهگذاری سنگین کنه که مسیرش دست سلیقهٔ یک نفر یا تصمیم لحظهای یک شرکت باشه.
یکی از دلایلی که خیلی از محصولات جدی و سطحبالا با این ابزار ساخته میشن همین استاندارد بودنه.
چون زبان دیمی جلو نمیره، و هر قابلیت باید از مسیر پیشنهاد، بررسی، بحث فنی، پیادهسازی، رأیگیری و استانداردسازی عبور کنه. مثل همین موضوع Reflection که خیلیها مسخره میکنن میگن عه برای سالهاست که اینو سیشارپ داره، پیاچپی داره ولی سی++ چرا نداره برای خاطر همین استاندارد بودنشه! خب کمیتهٔ استاندارد سازی اینطور تصمیم میگیره که چه چیزی اضافه بشه چه چیزی نشه! با هوای من برنامهنویس بازی نمیکنه که مهم آیندهٔ صنعته.
اصلاً قرار نیست امروز یک نفر بگه «از این خوشم اومد، اضافهاش کنیم» و فردا میلیونها خط کد درگیر تصمیمش بشن! توی لینکدین از این صحبتها زیاده به خصوص راستچیها یا طرفداران زبانهای اسکریپتی! خب اصلاً موضوع شوخی بردار نیست واقعاً؛ با کوچیکترین تغییر صنعت دنیای نرمافزار اینور اونور میشه! نمونش یه مثال ساده و قابل فهم بزنم:
پادشاه بیتکوین! 💸فکر میکنی الکیه یه کد رو توش تغییر بدی بعد اثر جانبی و کلی موارد درگیرش نشه؟ خب کمیته همه چیرو باید در نظر بگیره! اسباب بازی نیست که مرد حسابی! پایتونه مگه مارمولک بازی کنی باهاش بگی طوری نمیشه! 😂
این زبان در توسعه کندتر از خیلی زبانها حرکت میکنه، ولی همین کندی همیشه ضعف نیست. برای زیرساخت، موتور بازی، دیتابیس، سیستمعامل، مرورگر، نرمافزار مالی، صنعتی و امبد؛ پایداری بلند مدتی از هیجانهای زودگذر تبلیغاتی مهمتره.
برای همین استاندارد فقط یک سند رسمی نیست؛ قرارداد اعتماد بین زبان، کامپایلرسازها، شرکتها، توسعهدهندهها و میلیاردها خط کده.
از قلم نیفته که زبان C هم همینطوره! یعنی این دو زبان C و ++C همیشه طبق استاندارد پیش میرن و غیر این هم نیست. با ساز من و شما هم نمیرقصن. 😉
برای C هم استانداردهاش اینا هستن که از سال ۱۹۸۹ آغاز میشه:
C89 / C90 C95 C99 C11 C17 / C18 C23واسهٔ همین هم وقتی میبینی یکی میاد زیر پست این توسعهدهدههای این دو تا غول مسخرهبازی میکنه اصلاً تحویلش اهمیت نمیدن چی میگه! چون تو باغ نیست که اصلاً صنعت چی میگه! صنعت دست بزرگان هست نه من برنامهنویس ساده که نباشم هم واسشون مهم نیست.
369
خیلی خلاصه مثال بزنم برنامههایی مثل OBS همچین کاری میکنن.
فریم به فریم تصویر رو میگیرن. البته کاری که من به عنوان شبیهسازی CRT انجام دادم مقداری هم کار با Shader بود که روی GPU اجرا میشه و اون حالت بازسازی تصویر پیکسلی رو بهینهسازی میکنه.
اگه به نسخهٔ CRT شده دقت کنی، افکتها و گرافیک بدِ پیکسلی نسبت به نسخهٔ خام بسیار بهینهتر هست.
البته این صرفاً یک نسخهٔ آزمایشی ۱ روزست که ساختم، هدف این بود جواب بگیرم ازش.
369
حالا یه سوأل از اونهایی که چپ و راست میان میگن چرا باید سی++ رو یاد بگیرم!
همچین چیزی رو با کدوم زبان میتونی بسازی؟ 😂 نکنه میخوای با پایتون انجامش بدی؟ یا با راست یا گو؟ 😁😒
369
وقتی میزنه تو سرت برداری یه CRT شبیهسازی کنی واسه بازسازی نوشتالژی خودت. 😒
روی نسخهٔ CPU رندر فریم به فریم انجام شده! اگه با Vulkan رندر بگیرم روان و عین آب خوردن خواهد شد.
چرا اینو ساختم؟
چون مانیتورهای امروزی رندر و سبک تصویرسازی بازیهای قدیمی رو پشتیبانی نمیکنن.
در واقع من مانتیور CRT رو شبیه سازی کردم که به کمک این برنامه میتونه خروجی رندر شبیهسازها رو به نسخهٔ بومی تبدیل کنه.
369
جالبه بدونی توی منبع کد GenyConnect هم از همین ویژگیها استفاده کردم.
یعنی هرچیزی که طی این چند ماههٔ اخیر من ساختم همشون بامعماری و سبک جدیده! بعد بگین کمالگرایی همیشه بده! نه کمالگرایی بعضی جاها لازمه چون تا آیندهٔ توسعه و معماری رو تضمین میکنی که فردا روزی هرچقدر که پروژه یا برنامت بزرگتر شد دیگه چه کنم چه کنم نکنی که ای وای من نمیتونم معماری رو بشکنم!
369
+1
از ویژگیهای جالبتر اینه که شما میتونی بخشی از کدی که نوشتی رو فقط قابل دسترس در بیرون از اون حوزه قرار بدی!
در این مثال تابع
sayHello میتونه از بیرون در دسترس باشه، اما تابع secretMessage فقط داخل کلاس و همون فایل در دسترسه.
یعنی خارج از اون هرجا صداش بزنی ممکن نیست کامپایل بشه، خطا خواهد داد.
برای همین وقتی به یه تابع یاکلاس یا حتی فضای نام (namespace) کلمهٔ کلیدی export قبل از اون بدی، به معنای این هست که این بخش از کد و زیر مجموعههاش در دسترس از این فایل هم باشه.
یعنی قبل از C++ Modules به این صورت ما نمیتونستیم چیزی رو مخفی یا مطمئن مدیریتش کنیم؛ یعنی تعاریف یا همون (implementation) رو باید از هم جدا میکردیم؛ مثلاً با جدا کردن .hpp و .cpp، استفاده از namespace ناشناس، static، یا الگوهایی مثل PIMPL گزینههای کاربردی بودن که پیچیدگی خاصی هم ایجاد میکرد.
اما حالا، هر جای فایل، هر جای کد خواستی چیزی رو خارج از حوزهٔ خودش کنی کافیه قبلش بگی export.
این فقط تمیزتر سازی کد نیست؛ معماری رو قابلکنترلتر میکنه.369
این مثال ترکیبی مدیریت سرآیندها به سبک سنتی هست. یعنی کلی سرآیند باید include بشن.
خب در پروژههای بزرگتر پیچیدگی میاره.
مزیتش میشه نمونهٔ بعدی 👇🏼
369
+1
خب از امروز برای همیشه با هدر گاردها و سرآیندهای سنتی سی++ خداحافظی میکنم.
یه پچ نوشتم که با کامپایلرهای جدید بسیار تمیز استاندارد STL رو هم وارد پروژه میکنه بدون نیاز به سبک سنتی include و سرآیندهای سنتی.
تصویر مربوط به کد رو ببینید! یکیش به سبک استاندارد قبل از ۲۰ هست، یکیش به سبک ۲۰ به بعد.
یعنی کلاً سرآیندهای سنتی حذف و با یه خط import std چیزی که لازم هست فراخوانی میشه.
استفاده از ماژولهای مدرن سی++ یعنی:
- کد تمیزتر
- مراحل ساختِ قابلکنترلتر
- وابستگیهای شفافتر
- آلودگی کمتر در توسعه
و در بسیاری از پروژهها سرعت کامپایل بسیار بیشتر!
از این مثال gist برای آزمایش و تجربهٔ سی++ جدید استفاده کنید:
https://gist.github.com/thecompez/2bceb35bfb80107bb51d2c38fee2a4af
369
امروز راجع به شبیهسازهای نوستالژی تحقیق میکنم، که برخوردم به این! اصلا سیگنال رو میگیره کائنات به هرچی فکر کنی!
خبری که اومده اینه که سونی اعلام کرده از ژانویه ۲۰۲۸ تولید دیسک فیزیکی برای بازیهای جدید PlayStation رو قطع میکنه و همهچیز دیجیتالی میشه.
گیتهاب هم در جواب این موج «مرگ مدیای فیزیکی»، یه کمپین شوخی ولی واقعی راه انداخته:
کدت رو روی CD داشته باش!
مجموعهای برای برنامهنویسها:
کد من، روی دیسک، مثل یه یادگاری از زمانی که نرمافزار هنوز لمسکردنی بود.
البته فقط برای مخازن عمومی و احتمالاً خیلی محدود؛ ولی ایدهش جالبه.
https://gh.io/cd
369
سؤالی مطرح بود که چرا محصولاتی مثل Apple و Sony اینقدر پایدارند، با سختافزار نسبتاً محدود راندمان بالایی میدهند، کمتر هنگ میکنند و معمولاً عمر فنی خوبی دارند.
جواب فقط در قدرت سختافزار نیست؛ بخشی از جواب در ریشهٔ سیستمعامل و فلسفهٔ طراحی آن است. 😉
خیلیها فکر میکنند Linux یعنی همان UNIX؛ خب این اشتباهه!
درستش اینه:
شبیه به یونیکس (Unix-like) یعنی سیستمعاملی که از نظر طراحی، رفتار، APIها و فلسفهٔ کاری شبیه UNIX است؛ به فارسی میشود گفت «شبهیونیکس».
اما UNIX با حروف بزرگ، فقط یک اسم تاریخی نیست؛ یک استاندارد و نشان تجاری رسمی هم هست.
یعنی سیستمعاملی که توسط The Open Group با استانداردهای UNIX سازگار تشخیص داده شده و گواهی رسمی گرفته باشد.
ولینوکس یک سیستمعامل Unix-like است؛ یعنی شبیه UNIX طراحی شده، اما از نظر ریشهٔ تاریخی و کدهای واقعی، خود UNIX نیست.
در طرف دیگر، macOS واقعاً UNIX-certified است. ریشهٔ آن از Darwin، XNU، BSD و NeXTSTEP میآید؛ یعنی به خانوادهٔ UNIX/BSD نزدیک است و ربطی به Linux ندارد.
در مورد محصولات آیفون، سیستمعامل iOS هم مثل macOS از همان خانوادهٔ Darwin/XNU میآید، اما بهتر است آن را Unix-like یا Unix-derived بدانیم.
همین تفاوت ریشهای مهم است!
وقتی یک شرکت مثل Apple کل زنجیره را کنترل میکند — از سختافزار تا kernel، درایورها، security model، sandbox، API و تجربهٔ کاربری نتیجه میشود محصولی که با منابع کمتر، پایداری و راندمان بیشتری میدهد.
یا شرکت سونی هم در دنیای PlayStation شاید به گوشتون نخورده، ولی نام سیستمعاملش اوربیس (ORBIS) هست؛ سیستم بسته، کنترلشده، نزدیک به سختافزار، و مبتنی بر خانوادهٔ BSD/Unix-like.
سیستمعامل لینوکس حقیقتاً عالیه، مخصوصاً در سرور، cloud، container و اکوسیستم متنباز و اندروید هم یک مثال دیگه مبتنی بر این کرنل هست.
اما خانوادهٔ UNIX/BSD یک چیز دیگست! تاریخچشرو هم بخونید خواهید دید چطور شکل گرفته.
چون محافظهکارتر، منظمتر، عمیقتر و برای محصولاتی که باید پایدار، بسته، کنترلشده و high-end باشند، فوقالعاده قدرتمند طراحی شده.
369
میدونم تو ذهنتون این هست که بگین یه ORM هم بهش اضافه کن! ولی فعلاً نیازی نیست بذارید به کارمون برسیم. 😄😁😎
369
و البته خاصیت Native I/O بکاند که مهمه!
این رو من برای هر سیستمعامل به صورت بومی ساختم! یعنی نه شبیهسازیه نه اداشو در میاره! روی هر پلتفرمی همون مکانیزم خودش رو داره و کاملاً پرفرمنس خالصه.
یعنی همچین چیزی:
Linux
→ epollmacOS / BSD
→ kqueueWindows
→ IOCP / I/O Completion PortsPortable fallback
→ poll/selectTegra uses a native I/O backend per platform:
epoll on Linux, kqueue on macOS/BSD, and IOCP on Windows.This is not a simulated async layer; it is built on each operating system's real event notification mechanism.
