uz
Feedback
COMPΞZ 🧬

COMPΞZ 🧬

Kanalga Telegram’da o‘tish

متخصص کامپیوتر و نرم‌افزار • سازنده • هنرمند و طراح • مجموعه‌دار • نویسنده • تحلیل‌گر • مشاور استارتاپی و ایده‌پرداز 𐎲𐎴𐎠𐎼𐎴𐎫𐎹 𐏃𐎢𐎶𐎠𐎫𐎹 We create because the world deserves better code. https://linktr.ee/compez

Ko'proq ko'rsatish
Mamlakat belgilanmaganToif belgilanmagan
369
Obunachilar
+324 soatlar
+117 kunlar
+4330 kunlar
Postlar arxiv
جیسون وایتزمن، پژوهشگر امنیت سایبری، پس از نصب افزونه‌ای که به Claude متصل بود متوجه شد یک ایجنت با استفاده از کیف پول دیجیتال او، ۳۱۵ دلار خرید اینترنتی غیرمجاز انجام داده است. سناریویی که در آن یک فایل متنی ساده هم می‌تواند به بردار حمله تبدیل شود. https://abc7news.com/post/anthropic-ai-hack-martinez-california-man-says-fraudulent-charges-racked-euros-claude-account/19366402/ خلاصه که اینطوریاست. 😉

بعضی از دوستان میرن فارکستر، وارپلت رو باز می‌کنن می‌بینن جنی‌هاشون نیست زهره ترک می‌شن! 😄 نترسید قبلاً که گفتم باگ فارکستره! همه چیز جاشه فقط وارپلته که مشکل نمایشی داره. کافیه کیف فارکستر رو کلیدواژه‌هاش رو بدین به Rabby یا Metamask خواهید دید جنی‌های نازنینتون سر جاشونه! کسی نه بهشون دست زده نه جرأت داره دست بزنه. دیگه هرچی دزد و پدر سوخته بود رو توی این چند ماه شوت کردم بیرون! تنها خودم به خزانه دسترسی دارم که اونم زیر چند متر خاک چالش کردم برای توزیع‌های آینده! هیچ کس نمی‌تونه تا زمانی که خودتون کیفتون رو لو ندادین به جنی‌هاتون دسترسی داشته باشه نگران نباشید. 👌 ولی من باز هم پیگیرم تااین مشکل نمایشی رو هم حل کنن. https://farcaster.xyz/compez.eth/0xab6f7a6a

این هم یک قالب آماده برای تنبلوف‌هایی که هنوز با 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

اینم واسه شما فارسی دوست‌ها. 😄 با این زبان می‌تونی فارسی برنامه‌نویسی کنی! بعد می‌گن چقدر سخته! 😂😝
اینم واسه شما فارسی دوست‌ها. 😄 با این زبان می‌تونی فارسی برنامه‌نویسی کنی! بعد می‌گن چقدر سخته! 😂😝

یک ارجاع به گواهی استاندارد ایزو با عنوان ISO/IEC 14882:2024 از زبان که در سال ۲۰۲۳ استاندارد‌سازی شده و در سال ۲۰۲۴ گواهیش ص
+2
یک ارجاع به گواهی استاندارد ایزو با عنوان ISO/IEC 14882:2024 از زبان که در سال ۲۰۲۳ استاندارد‌سازی شده و در سال ۲۰۲۴ گواهیش صادر شده. کلاً پیشنهاد می‌کنم وقتی چیزیرو یاد می‌گیرید یا ازش استفاده می‌کنید بهش علاقه نشون بدین؛ و اگرنه، نه درکش خواهید کرد و نه اون ابزار مناسبی برای نحوهٔ تفکر شما خواهد بود. بخش‌های مربوط به هر کتاب که هست مقدمه، یه توضیحی میدن که تاریخچه چی بوده واسهٔ چی بوده اینا برای ورق زدن نیست، برای خوندنه! برای درک کردنه. این لینک اشارهٔ مستقیم به نقشهٔ راه استاندارد در حال حاضر رو نشون میده: https://isocpp.org/std/status و گواهی استاندارد: https://www.iso.org/standard/83626.html

یک سؤال خیلی تکراری که خیلی‌ها وقتی تازه ++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
واسهٔ همین هم وقتی می‌بینی یکی میاد زیر پست این توسعه‌دهده‌های این دو تا غول مسخره‌بازی می‌کنه اصلاً تحویلش اهمیت نمیدن چی میگه! چون تو باغ نیست که اصلاً صنعت چی می‌گه! صنعت دست بزرگان هست نه من برنامه‌نویس ساده که نباشم هم واسشون مهم نیست.

خیلی خلاصه مثال بزنم برنامه‌هایی مثل OBS همچین کاری می‌کنن. فریم به فریم تصویر رو می‌گیرن. البته کاری که من به عنوان شبیه‌سازی CRT انجام دادم مقداری هم کار با Shader بود که روی GPU اجرا میشه و اون حالت باز‌سازی تصویر پیکسلی رو بهینه‌سازی می‌کنه. اگه به نسخهٔ CRT شده دقت کنی، افکت‌ها و گرافیک بدِ پیکسلی نسبت به نسخهٔ خام بسیار بهینه‌تر هست. البته این صرفاً یک نسخهٔ آزمایشی ۱ روزست که ساختم، هدف این بود جواب بگیرم ازش.

حالا یه سوأل از اون‌هایی که چپ و راست میان می‌گن چرا باید سی++ رو یاد بگیرم! همچین چیزی رو با کدوم زبان می‌تونی بسازی؟ 😂 نکنه می‌خوای با پایتون انجامش بدی؟ یا با راست یا گو؟ 😁😒

وقتی می‌زنه تو سرت برداری یه CRT شبیه‌سازی کنی واسه بازسازی نوشتالژی خودت. 😒 روی نسخهٔ CPU رندر فریم به فریم انجام شده! اگه با Vulkan رندر بگیرم روان و عین آب خوردن خواهد شد. چرا اینو ساختم؟ چون مانیتور‌های امروزی رندر و سبک تصویر‌سازی بازی‌های قدیمی رو پشتیبانی نمی‌کنن. در واقع من مانتیور CRT رو شبیه سازی کردم که به کمک این برنامه می‌تونه خروجی رندر شبیه‌ساز‌ها رو به نسخهٔ بومی تبدیل کنه.

جالبه بدونی توی منبع کد GenyConnect هم از همین ویژگی‌ها استفاده کردم. یعنی هرچیزی که طی این چند ماههٔ اخیر من ساختم همشون بام
جالبه بدونی توی منبع کد GenyConnect هم از همین ویژگی‌ها استفاده کردم. یعنی هرچیزی که طی این چند ماههٔ اخیر من ساختم همشون بامعماری و سبک جدیده! بعد بگین کمال‌گرایی همیشه بده! نه کمال‌گرایی بعضی جاها لازمه چون تا آیندهٔ توسعه و معماری رو تضمین می‌کنی که فردا روزی هرچقدر که پروژه یا برنامت بزرگتر شد دیگه چه کنم چه کنم نکنی که ای وای من نمی‌تونم معماری رو بشکنم!

از ویژگی‌های جالب‌تر اینه که شما می‌تونی بخشی از کدی که نوشتی رو فقط قابل دسترس در بیرون از اون حوزه قرار بدی! در این مثال تا
+1
از ویژگی‌های جالب‌تر اینه که شما می‌تونی بخشی از کدی که نوشتی رو فقط قابل دسترس در بیرون از اون حوزه قرار بدی! در این مثال تابع sayHello می‌تونه از بیرون در دسترس باشه، اما تابع secretMessage فقط داخل کلاس و همون فایل در دسترسه. یعنی خارج از اون هرجا صداش بزنی ممکن نیست کامپایل بشه، خطا خواهد داد. برای همین وقتی به یه تابع یاکلاس یا حتی فضای نام (namespace) کلمهٔ کلیدی export قبل از اون بدی، به معنای این هست که این بخش از کد و زیر مجموعه‌هاش در دسترس از این فایل هم باشه. یعنی قبل از C++ Modules به این صورت ما نمی‌تونستیم چیزی رو مخفی یا مطمئن مدیریتش کنیم؛ یعنی تعاریف یا همون (implementation) رو باید از هم جدا می‌کردیم؛ مثلاً با جدا کردن .hpp و .cpp، استفاده از namespace ناشناس، static، یا الگوهایی مثل PIMPL گزینه‌های کاربردی بودن که پیچیدگی خاصی هم ایجاد می‌کرد. اما حالا، هر جای فایل، هر جای کد خواستی چیزی رو خارج از حوزهٔ خودش کنی کافیه قبلش بگی export. این فقط تمیزتر سازی کد نیست؛ معماری رو قابل‌کنترل‌تر می‌کنه.

به جای کلی سرآیند سنتی از کتابخانهٔ استاندارد همین یه دستور خط کافیست.
به جای کلی سرآیند سنتی از کتابخانهٔ استاندارد همین یه دستور خط کافیست.

این مثال ترکیبی مدیریت سرآیند‌ها به سبک سنتی هست. یعنی کلی سرآیند باید include بشن. خب در پروژه‌های بزرگتر پیچیدگی میاره. مزی
این مثال ترکیبی مدیریت سرآیند‌ها به سبک سنتی هست. یعنی کلی سرآیند باید include بشن. خب در پروژه‌های بزرگتر پیچیدگی میاره. مزیتش میشه نمونهٔ بعدی 👇🏼

خب از امروز برای همیشه با هدر گارد‌ها و سرآیند‌های سنتی سی++ خداحافظی می‌کنم. یه پچ نوشتم که با کامپایلر‌های جدید بسیار تمیز
+1
خب از امروز برای همیشه با هدر گارد‌ها و سرآیند‌های سنتی سی++ خداحافظی می‌کنم. یه پچ نوشتم که با کامپایلر‌های جدید بسیار تمیز استاندارد STL رو هم وارد پروژه می‌کنه بدون نیاز به سبک سنتی include و سرآیند‌های سنتی. تصویر مربوط به کد رو ببینید! یکیش به سبک استاندارد قبل از ۲۰ هست، یکیش به سبک ۲۰ به بعد. یعنی کلاً سرآیند‌های سنتی حذف و با یه خط import std چیزی که لازم هست فراخوانی می‌شه. استفاده از ماژول‌های مدرن سی++ یعنی: - کد تمیزتر - مراحل ساختِ قابل‌کنترل‌تر - وابستگی‌های شفاف‌تر - آلودگی کمتر در توسعه و در بسیاری از پروژه‌ها سرعت کامپایل بسیار بیشتر! از این مثال gist برای آزمایش و تجربهٔ سی++ جدید استفاده کنید: https://gist.github.com/thecompez/2bceb35bfb80107bb51d2c38fee2a4af

وقتی با جیبِ خالی اینقدر پولدار به نظر میام؛ تصور کن وقتی پولدار شم چی می‌شه.

امروز راجع به شبیه‌ساز‌های نوستالژی تحقیق می‌کنم، که برخوردم به این! اصلا سیگنال رو می‌گیره کائنات به هرچی فکر کنی! خبری که اومده اینه که سونی اعلام کرده از ژانویه ۲۰۲۸ تولید دیسک فیزیکی برای بازی‌های جدید PlayStation رو قطع می‌کنه و همه‌چیز دیجیتالی می‌شه. گیت‌هاب هم در جواب این موج «مرگ مدیای فیزیکی»، یه کمپین شوخی ولی واقعی راه انداخته: کدت رو روی CD داشته باش! مجموعه‌ای برای برنامه‌نویس‌ها: کد من، روی دیسک، مثل یه یادگاری از زمانی که نرم‌افزار هنوز لمس‌کردنی بود. البته فقط برای مخازن عمومی و احتمالاً خیلی محدود؛ ولی ایده‌ش جالبه. https://gh.io/cd

سؤالی مطرح بود که چرا محصولاتی مثل Apple و Sony این‌قدر پایدارند، با سخت‌افزار نسبتاً محدود راندمان بالایی می‌دهند، کمتر هنگ
سؤالی مطرح بود که چرا محصولاتی مثل 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 باشند، فوق‌العاده قدرتمند طراحی شده.

می‌دونم تو ذهنتون این هست که بگین یه ORM هم بهش اضافه کن! ولی فعلاً نیازی نیست بذارید به کارمون برسیم. 😄😁😎

نحو (سینتکس) کدش چطور میشه؟ شاهد همچین چیزی خواهیم بود.
نحو (سینتکس) کدش چطور میشه؟ شاهد همچین چیزی خواهیم بود.

و البته خاصیت Native I/O بک‌اند که مهمه! این رو من برای هر سیستم‌عامل به صورت بومی ساختم! یعنی نه شبیه‌سازیه نه اداشو در میاره! روی هر پلتفرمی همون مکانیزم خودش رو داره و کاملاً پرفرمنس خالصه. یعنی همچین چیزی: Linux
→ epoll
macOS / BSD
→ kqueue
Windows
→ IOCP / I/O Completion Ports
Portable fallback
→ poll/select 
Tegra 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.