COMPΞZ 🧬
میبینم که دونه دونه حسابهای Claude ایرانیها به چوخ میره! خب چند تا توصیه دارم! اول اینکه تا روشن شدن تکلیف این موضوعِ احراز هویتش کاری باهاش نداشته باشید! هزینه نکنید، نخریدش! دوم اینکه، به هیچ عنوان از داخل سیستم خودتون حتی با VPN ورود نزنید، چون هر…
این Fable 5 هم اونطور که میگن غولِ نمیدونم چیچیه... نه والا شما پرامپتت خوب باشه بفهمی چی مینویسی همون اپوس هم خوبه.
تنها مزیتش اینه که به خاطر بهتر بودن درکش نسبتاً توکن کمتری مصرف میکنه.
ولی اینکه میگن به جای کلاد از Antigravity یا امثالش استفاده کنید، خداشون هم فرق میکنه چه برسه کیفیت درک و شعورشون.
کلاد ساخته شده برای برنامهسازی، تحلیل، ممیزی، شخم زدن یه پروژه!
بقیه موارد مونده تا به پای این برسن.
تنها مزیتش اینه که به خاطر بهتر بودن درکش نسبتاً توکن کمتری مصرف میکنه.
ولی اینکه میگن به جای کلاد از Antigravity یا امثالش استفاده کنید، خداشون هم فرق میکنه چه برسه کیفیت درک و شعورشون.
کلاد ساخته شده برای برنامهسازی، تحلیل، ممیزی، شخم زدن یه پروژه!
بقیه موارد مونده تا به پای این برسن.
COMPΞZ 🧬
میبینم که دونه دونه حسابهای Claude ایرانیها به چوخ میره! خب چند تا توصیه دارم! اول اینکه تا روشن شدن تکلیف این موضوعِ احراز هویتش کاری باهاش نداشته باشید! هزینه نکنید، نخریدش! دوم اینکه، به هیچ عنوان از داخل سیستم خودتون حتی با VPN ورود نزنید، چون هر…
پنجم اینکه از GenyConnect استفاده کنید تا کامروا شوید حتی با خرابترین اینترنت که برای من 3g هست پایداری بالایی داره. 😝 البته این نسخه رو به زودی منتشر میکنم! هنوز کار داره.
COMPΞZ 🧬
اول اینکه تا روشن شدن تکلیف این موضوعِ احراز هویتش کاری باهاش نداشته باشید! هزینه نکنید، نخریدش!
خب بله! برای اطمینان یه حساب جدید ساختم؛
احراز هویت میخواد.
اما یه نکتهٔ جالب داشت! نام Iran توی فهرست هست و خیلیها فکر میکنن این یعنی تحریم نیست! انجامش که بدی میگه:
We cannot accept this ID type. Please choose an accepted ID.
حالا یه سوأل از اونی که فکر میکنه اینا دوست مردم ایرانن؟ اینو زمان جنگ وقتی اون کله زرد میگفت عنگانی در راه است به یه سریها گفتم که ببین اینا حرفه! دارن با احساسات مردم بدبخت بازی میکنن هدف اصلی منافع خودشونه نه ما! برگرد به ۵۰ سال پیش ببین کیا بودن که پشت کردن به این جماعت و کیا بودن که هم از آخوور خوردن هم از ناخور!
اینکه یه سیستم بذاره کارت ملی مردم رو اسکن کنه ببینه که من یه شهروند عادی هستم یا یه نظامی؟! تو کک من نمیره این حرفا.
با توجه به تحقیقاتم همچین چیزی متوجه شدم:
تفکیک فردی شدنی است. KYC دقیقاً برای همین ساخته شده: سند هویتی، چهره، شماره، محل اقامت، ریسک حقوقی، لیست تحریم، PEP، watchlist و سابقهٔ رسانهای/حقوقی. حتی خود OFAC ابزار Sanctions List Search دارد که برای تطبیق نام با لیستهای تحریمی استفاده میشود.
اما شرکتهایی مثل Anthropic معمولاً یک لایهٔ بالاتر تصمیم میگیرند: کشور پشتیبانیشده یا پشتیبانینشده در صفحهٔ رسمی Anthropic، ایران جزو کشورهای پشتیبانیشدهٔ Claude نیست؛ و خود Claude هم احراز هویت را از طریق Persona انجام میدهد، یعنی از نظر فنی ابزار شناسایی فردی وجود دارد، ولی سیاست نهایی میتواند همچنان country-level باشد.
خب اینجاست که باید بپرسم از همانهایی که میگفتند:
«اینها با مردم ایران مشکلی ندارند.»
«اینها دوست ما هستند.»
«اینها آمدهاند مردم را نجات بدهند.»
خب اگر دوست مردماند، چرا همین تفکیک ساده را انجام نمیدهند؟
اگر میتوانند با دقت نظامی بفهمند چه کسی کجاست، چه کسی وابسته به کجاست، چه کسی هدف است و چه کسی نیست، چطور نمیتوانند بفهمند من یک شهروند عادیام یا یک فرد سیاسی و نظامی؟
سخت است؟ نه.
غیرممکن است؟ قطعاً نه.
فقط برایشان بهصرفهتر است که فرق نگذارند.
چون در نگاه آنها، شهروند عادی ایرانی هم بخشی از همان ریسک کلی است.
نه به خاطر کاری که کرده؛ فقط به خاطر جایی که به دنیا آمده.
پس مسئله فقط تحریم نیست! مسأله رو توی شبکههای اونور آبی اگه چشتو باز کنی درست ببینی گوش کنی میبینی که چپی هیچوقت حاضر نیست ایرانی آسوده باشه! به خاطر منافع خودش هر کاری بتونه میکنه.
مسئله اینه که جهان قراردادی در پس زمینهٔ همهٔ اینها بسته که ترجیح میدهد ما دسترسی نداشته باشیم، ابزار نداشته باشیم، رقابت نکنیم، رشد نکنیم و همیشه پشت در بمانیم تا مبادا ... 😝
احراز هویت میخواد.
اما یه نکتهٔ جالب داشت! نام Iran توی فهرست هست و خیلیها فکر میکنن این یعنی تحریم نیست! انجامش که بدی میگه:
We cannot accept this ID type. Please choose an accepted ID.
حالا یه سوأل از اونی که فکر میکنه اینا دوست مردم ایرانن؟ اینو زمان جنگ وقتی اون کله زرد میگفت عنگانی در راه است به یه سریها گفتم که ببین اینا حرفه! دارن با احساسات مردم بدبخت بازی میکنن هدف اصلی منافع خودشونه نه ما! برگرد به ۵۰ سال پیش ببین کیا بودن که پشت کردن به این جماعت و کیا بودن که هم از آخوور خوردن هم از ناخور!
اینکه یه سیستم بذاره کارت ملی مردم رو اسکن کنه ببینه که من یه شهروند عادی هستم یا یه نظامی؟! تو کک من نمیره این حرفا.
با توجه به تحقیقاتم همچین چیزی متوجه شدم:
تفکیک فردی شدنی است. KYC دقیقاً برای همین ساخته شده: سند هویتی، چهره، شماره، محل اقامت، ریسک حقوقی، لیست تحریم، PEP، watchlist و سابقهٔ رسانهای/حقوقی. حتی خود OFAC ابزار Sanctions List Search دارد که برای تطبیق نام با لیستهای تحریمی استفاده میشود.
اما شرکتهایی مثل Anthropic معمولاً یک لایهٔ بالاتر تصمیم میگیرند: کشور پشتیبانیشده یا پشتیبانینشده در صفحهٔ رسمی Anthropic، ایران جزو کشورهای پشتیبانیشدهٔ Claude نیست؛ و خود Claude هم احراز هویت را از طریق Persona انجام میدهد، یعنی از نظر فنی ابزار شناسایی فردی وجود دارد، ولی سیاست نهایی میتواند همچنان country-level باشد.
خب اینجاست که باید بپرسم از همانهایی که میگفتند:
«اینها با مردم ایران مشکلی ندارند.»
«اینها دوست ما هستند.»
«اینها آمدهاند مردم را نجات بدهند.»
خب اگر دوست مردماند، چرا همین تفکیک ساده را انجام نمیدهند؟
اگر میتوانند با دقت نظامی بفهمند چه کسی کجاست، چه کسی وابسته به کجاست، چه کسی هدف است و چه کسی نیست، چطور نمیتوانند بفهمند من یک شهروند عادیام یا یک فرد سیاسی و نظامی؟
سخت است؟ نه.
غیرممکن است؟ قطعاً نه.
فقط برایشان بهصرفهتر است که فرق نگذارند.
چون در نگاه آنها، شهروند عادی ایرانی هم بخشی از همان ریسک کلی است.
نه به خاطر کاری که کرده؛ فقط به خاطر جایی که به دنیا آمده.
پس مسئله فقط تحریم نیست! مسأله رو توی شبکههای اونور آبی اگه چشتو باز کنی درست ببینی گوش کنی میبینی که چپی هیچوقت حاضر نیست ایرانی آسوده باشه! به خاطر منافع خودش هر کاری بتونه میکنه.
مسئله اینه که جهان قراردادی در پس زمینهٔ همهٔ اینها بسته که ترجیح میدهد ما دسترسی نداشته باشیم، ابزار نداشته باشیم، رقابت نکنیم، رشد نکنیم و همیشه پشت در بمانیم تا مبادا ... 😝
COMPΞZ 🧬
سوألی هست که وقتی دراگون هست چرا ازش استفاده نمیکنی برای ساختن CMSات؟
چون من تمایلی ندارم وابستگی چینی توی قلب سیستمم باشه. همشونو من قبلاً آزمایش کردم به دلم نمیشینن.
بهترین ویژگی فریمورک وب دراگون اینه که non-blocking I/O هست که تگرا مشابه همون مکانیزم و حتی بهترشو پشتیبانی میکنه غیر اون مابقی مواردش کار سختی نیست!
تگرا الآن هم از multi-thread پشتیبانی میکنه و روی پردازندههای چند هستهای کار میکنه هم از non-blocking I/O پشتیبانی میکنه.
به زبان سادهتر بخوام بگم این یعنی چی؟
یعنی در مدل blocking، اگر یک درخواست منتظر پاسخ دیتابیس بماند، همان thread (رشته) عملاً معطل میشود.
اما در مدل non-blocking، سیستم میگوید:
«تو منتظر بمان؛ من در همین فاصله کارهای دیگر را انجام میدهم.»
این یعنی مصرف بهتر CPU، توان پاسخگویی بالاتر، latency کمتر، و معماری مناسبتر برای ترافیک زیاد.
وقتی multi-threading و non-blocking I/O کنار هم قرار میگیرند، نتیجه این میشود که سیستم هم از قدرت چند هستهٔ CPU استفاده میکند، هم رشتهها را با انتظارهای بیهوده هدر نمیدهد. این دقیقاً همان چیزی است که برای یک CMS مدرن، سریع، کممصرف و مقیاسپذیر نیاز داریم.
چون من تمایلی ندارم وابستگی چینی توی قلب سیستمم باشه. همشونو من قبلاً آزمایش کردم به دلم نمیشینن.
بهترین ویژگی فریمورک وب دراگون اینه که non-blocking I/O هست که تگرا مشابه همون مکانیزم و حتی بهترشو پشتیبانی میکنه غیر اون مابقی مواردش کار سختی نیست!
تگرا الآن هم از multi-thread پشتیبانی میکنه و روی پردازندههای چند هستهای کار میکنه هم از non-blocking I/O پشتیبانی میکنه.
به زبان سادهتر بخوام بگم این یعنی چی؟
یعنی در مدل blocking، اگر یک درخواست منتظر پاسخ دیتابیس بماند، همان thread (رشته) عملاً معطل میشود.
اما در مدل non-blocking، سیستم میگوید:
«تو منتظر بمان؛ من در همین فاصله کارهای دیگر را انجام میدهم.»
این یعنی مصرف بهتر CPU، توان پاسخگویی بالاتر، latency کمتر، و معماری مناسبتر برای ترافیک زیاد.
وقتی multi-threading و non-blocking I/O کنار هم قرار میگیرند، نتیجه این میشود که سیستم هم از قدرت چند هستهٔ CPU استفاده میکند، هم رشتهها را با انتظارهای بیهوده هدر نمیدهد. این دقیقاً همان چیزی است که برای یک CMS مدرن، سریع، کممصرف و مقیاسپذیر نیاز داریم.
COMPΞZ 🧬
سوألی هست که وقتی دراگون هست چرا ازش استفاده نمیکنی برای ساختن CMSات؟ چون من تمایلی ندارم وابستگی چینی توی قلب سیستمم باشه. همشونو من قبلاً آزمایش کردم به دلم نمیشینن. بهترین ویژگی فریمورک وب دراگون اینه که non-blocking I/O هست که تگرا مشابه همون مکانیزم…
و البته خاصیت Native I/O بکاند که مهمه!
این رو من برای هر سیستمعامل به صورت بومی ساختم! یعنی نه شبیهسازیه نه اداشو در میاره! روی هر پلتفرمی همون مکانیزم خودش رو داره و کاملاً پرفرمنس خالصه.
یعنی همچین چیزی:
Linux
macOS / BSD
Windows
Portable fallback
Tegra uses a native I/O backend per platform:
This is not a simulated async layer; it is built on each operating system's real event notification mechanism.
این رو من برای هر سیستمعامل به صورت بومی ساختم! یعنی نه شبیهسازیه نه اداشو در میاره! روی هر پلتفرمی همون مکانیزم خودش رو داره و کاملاً پرفرمنس خالصه.
یعنی همچین چیزی:
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.
COMPΞZ 🧬
و البته خاصیت Native I/O بکاند که مهمه! این رو من برای هر سیستمعامل به صورت بومی ساختم! یعنی نه شبیهسازیه نه اداشو در میاره! روی هر پلتفرمی همون مکانیزم خودش رو داره و کاملاً پرفرمنس خالصه. یعنی همچین چیزی: Linux → epoll macOS / BSD → kqueue Windows…
نحو (سینتکس) کدش چطور میشه؟ شاهد همچین چیزی خواهیم بود.
COMPΞZ 🧬
نحو (سینتکس) کدش چطور میشه؟ شاهد همچین چیزی خواهیم بود.
میدونم تو ذهنتون این هست که بگین یه ORM هم بهش اضافه کن! ولی فعلاً نیازی نیست بذارید به کارمون برسیم. 😄😁😎
سؤالی مطرح بود که چرا محصولاتی مثل 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 باشند، فوقالعاده قدرتمند طراحی شده.
جواب فقط در قدرت سختافزار نیست؛ بخشی از جواب در ریشهٔ سیستمعامل و فلسفهٔ طراحی آن است. 😉
خیلیها فکر میکنند 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 باشند، فوقالعاده قدرتمند طراحی شده.
امروز راجع به شبیهسازهای نوستالژی تحقیق میکنم، که برخوردم به این! اصلا سیگنال رو میگیره کائنات به هرچی فکر کنی!
خبری که اومده اینه که سونی اعلام کرده از ژانویه ۲۰۲۸ تولید دیسک فیزیکی برای بازیهای جدید PlayStation رو قطع میکنه و همهچیز دیجیتالی میشه.
گیتهاب هم در جواب این موج «مرگ مدیای فیزیکی»، یه کمپین شوخی ولی واقعی راه انداخته:
کدت رو روی CD داشته باش!
مجموعهای برای برنامهنویسها:
کد من، روی دیسک، مثل یه یادگاری از زمانی که نرمافزار هنوز لمسکردنی بود.
البته فقط برای مخازن عمومی و احتمالاً خیلی محدود؛ ولی ایدهش جالبه.
https://gh.io/cd
خبری که اومده اینه که سونی اعلام کرده از ژانویه ۲۰۲۸ تولید دیسک فیزیکی برای بازیهای جدید PlayStation رو قطع میکنه و همهچیز دیجیتالی میشه.
گیتهاب هم در جواب این موج «مرگ مدیای فیزیکی»، یه کمپین شوخی ولی واقعی راه انداخته:
کدت رو روی CD داشته باش!
مجموعهای برای برنامهنویسها:
کد من، روی دیسک، مثل یه یادگاری از زمانی که نرمافزار هنوز لمسکردنی بود.
البته فقط برای مخازن عمومی و احتمالاً خیلی محدود؛ ولی ایدهش جالبه.
https://gh.io/cd
forms.cloud.microsoft
Please fill out this form
خب از امروز برای همیشه با هدر گاردها و سرآیندهای سنتی سی++ خداحافظی میکنم.
یه پچ نوشتم که با کامپایلرهای جدید بسیار تمیز استاندارد STL رو هم وارد پروژه میکنه بدون نیاز به سبک سنتی include و سرآیندهای سنتی.
تصویر مربوط به کد رو ببینید! یکیش به سبک استاندارد قبل از ۲۰ هست، یکیش به سبک ۲۰ به بعد.
یعنی کلاً سرآیندهای سنتی حذف و با یه خط import std چیزی که لازم هست فراخوانی میشه.
استفاده از ماژولهای مدرن سی++ یعنی:
- کد تمیزتر
- مراحل ساختِ قابلکنترلتر
- وابستگیهای شفافتر
- آلودگی کمتر در توسعه
و در بسیاری از پروژهها سرعت کامپایل بسیار بیشتر!
از این مثال gist برای آزمایش و تجربهٔ سی++ جدید استفاده کنید:
https://gist.github.com/thecompez/2bceb35bfb80107bb51d2c38fee2a4af
یه پچ نوشتم که با کامپایلرهای جدید بسیار تمیز استاندارد STL رو هم وارد پروژه میکنه بدون نیاز به سبک سنتی include و سرآیندهای سنتی.
تصویر مربوط به کد رو ببینید! یکیش به سبک استاندارد قبل از ۲۰ هست، یکیش به سبک ۲۰ به بعد.
یعنی کلاً سرآیندهای سنتی حذف و با یه خط import std چیزی که لازم هست فراخوانی میشه.
استفاده از ماژولهای مدرن سی++ یعنی:
- کد تمیزتر
- مراحل ساختِ قابلکنترلتر
- وابستگیهای شفافتر
- آلودگی کمتر در توسعه
و در بسیاری از پروژهها سرعت کامپایل بسیار بیشتر!
از این مثال gist برای آزمایش و تجربهٔ سی++ جدید استفاده کنید:
https://gist.github.com/thecompez/2bceb35bfb80107bb51d2c38fee2a4af
COMPΞZ 🧬
خب از امروز برای همیشه با هدر گاردها و سرآیندهای سنتی سی++ خداحافظی میکنم. یه پچ نوشتم که با کامپایلرهای جدید بسیار تمیز استاندارد STL رو هم وارد پروژه میکنه بدون نیاز به سبک سنتی include و سرآیندهای سنتی. تصویر مربوط به کد رو ببینید! یکیش به سبک استاندارد…
این مثال ترکیبی مدیریت سرآیندها به سبک سنتی هست. یعنی کلی سرآیند باید include بشن.
خب در پروژههای بزرگتر پیچیدگی میاره.
مزیتش میشه نمونهٔ بعدی 👇🏼
خب در پروژههای بزرگتر پیچیدگی میاره.
مزیتش میشه نمونهٔ بعدی 👇🏼
COMPΞZ 🧬
این مثال ترکیبی مدیریت سرآیندها به سبک سنتی هست. یعنی کلی سرآیند باید include بشن. خب در پروژههای بزرگتر پیچیدگی میاره. مزیتش میشه نمونهٔ بعدی 👇🏼
به جای کلی سرآیند سنتی از کتابخانهٔ استاندارد همین یه دستور خط کافیست.
تعریف و خلاصهٔ کلام اینه که، کامپایلر به جای اینکه چندین سرآیند (header) را مثل متن خام وارد فایل کند، از یک رابط، interface ماژولشدهٔ آماده برای کتابخانهٔ استاندارد استفاده میکند.
در این روش،
تعریف و خلاصهٔ کلام اینه که، کامپایلر به جای اینکه چندین سرآیند (header) را مثل متن خام وارد فایل کند، از یک رابط، interface ماژولشدهٔ آماده برای کتابخانهٔ استاندارد استفاده میکند.
در این روش،
std::vector، std::string و std::println همه از طریق همین import std در دسترساند.
COMPΞZ 🧬
به جای کلی سرآیند سنتی از کتابخانهٔ استاندارد همین یه دستور خط کافیست. تعریف و خلاصهٔ کلام اینه که، کامپایلر به جای اینکه چندین سرآیند (header) را مثل متن خام وارد فایل کند، از یک رابط، interface ماژولشدهٔ آماده برای کتابخانهٔ استاندارد استفاده میکند. …
از ویژگیهای جالبتر اینه که شما میتونی بخشی از کدی که نوشتی رو فقط قابل دسترس در بیرون از اون حوزه قرار بدی!
در این مثال تابع
یعنی خارج از اون هرجا صداش بزنی ممکن نیست کامپایل بشه، خطا خواهد داد.
برای همین وقتی به یه تابع یاکلاس یا حتی فضای نام (namespace) کلمهٔ کلیدی export قبل از اون بدی، به معنای این هست که این بخش از کد و زیر مجموعههاش در دسترس از این فایل هم باشه.
یعنی قبل از C++ Modules به این صورت ما نمیتونستیم چیزی رو مخفی یا مطمئن مدیریتش کنیم؛ یعنی تعاریف یا همون (implementation) رو باید از هم جدا میکردیم؛ مثلاً با جدا کردن
اما حالا، هر جای فایل، هر جای کد خواستی چیزی رو خارج از حوزهٔ خودش کنی کافیه قبلش بگی export.
این فقط تمیزتر سازی کد نیست؛ معماری رو قابلکنترلتر میکنه.
در این مثال تابع
sayHello میتونه از بیرون در دسترس باشه، اما تابع secretMessage فقط داخل کلاس و همون فایل در دسترسه.یعنی خارج از اون هرجا صداش بزنی ممکن نیست کامپایل بشه، خطا خواهد داد.
برای همین وقتی به یه تابع یاکلاس یا حتی فضای نام (namespace) کلمهٔ کلیدی export قبل از اون بدی، به معنای این هست که این بخش از کد و زیر مجموعههاش در دسترس از این فایل هم باشه.
یعنی قبل از C++ Modules به این صورت ما نمیتونستیم چیزی رو مخفی یا مطمئن مدیریتش کنیم؛ یعنی تعاریف یا همون (implementation) رو باید از هم جدا میکردیم؛ مثلاً با جدا کردن
.hpp و .cpp، استفاده از namespace ناشناس، static، یا الگوهایی مثل PIMPL گزینههای کاربردی بودن که پیچیدگی خاصی هم ایجاد میکرد.اما حالا، هر جای فایل، هر جای کد خواستی چیزی رو خارج از حوزهٔ خودش کنی کافیه قبلش بگی export.
این فقط تمیزتر سازی کد نیست؛ معماری رو قابلکنترلتر میکنه.
COMPΞZ 🧬
از ویژگیهای جالبتر اینه که شما میتونی بخشی از کدی که نوشتی رو فقط قابل دسترس در بیرون از اون حوزه قرار بدی! در این مثال تابع sayHello میتونه از بیرون در دسترس باشه، اما تابع secretMessage فقط داخل کلاس و همون فایل در دسترسه. یعنی خارج از اون هرجا صداش…
جالبه بدونی توی منبع کد GenyConnect هم از همین ویژگیها استفاده کردم.
یعنی هرچیزی که طی این چند ماههٔ اخیر من ساختم همشون بامعماری و سبک جدیده! بعد بگین کمالگرایی همیشه بده! نه کمالگرایی بعضی جاها لازمه چون تا آیندهٔ توسعه و معماری رو تضمین میکنی که فردا روزی هرچقدر که پروژه یا برنامت بزرگتر شد دیگه چه کنم چه کنم نکنی که ای وای من نمیتونم معماری رو بشکنم!
خلاصهٔ اینم مسائل باعث شده من دیگه با خطاها و باگهای قدیمی روبرو نشم! وقتم رو صرف حل کردن مشکلات حین کامپایل نکنم. پروژه هم اینطوری از معماری پویا و قابل کنترل تبعیت میکنه.
برای همینه همش میگم اگه روی استاندارد ۱۱ موندی و همون مدل داری پیش میری، باید بهت بگم که متأسفانه داری به خودت ظلم میکنی! با این سرعت پیشروی فناوری باید بهروز باشی و اگرنه شدید عقب مونده خواهی شد.
یعنی هرچیزی که طی این چند ماههٔ اخیر من ساختم همشون بامعماری و سبک جدیده! بعد بگین کمالگرایی همیشه بده! نه کمالگرایی بعضی جاها لازمه چون تا آیندهٔ توسعه و معماری رو تضمین میکنی که فردا روزی هرچقدر که پروژه یا برنامت بزرگتر شد دیگه چه کنم چه کنم نکنی که ای وای من نمیتونم معماری رو بشکنم!
خلاصهٔ اینم مسائل باعث شده من دیگه با خطاها و باگهای قدیمی روبرو نشم! وقتم رو صرف حل کردن مشکلات حین کامپایل نکنم. پروژه هم اینطوری از معماری پویا و قابل کنترل تبعیت میکنه.
برای همینه همش میگم اگه روی استاندارد ۱۱ موندی و همون مدل داری پیش میری، باید بهت بگم که متأسفانه داری به خودت ظلم میکنی! با این سرعت پیشروی فناوری باید بهروز باشی و اگرنه شدید عقب مونده خواهی شد.
Media is too big
VIEW IN TELEGRAM
وقتی میزنه تو سرت برداری یه CRT شبیهسازی کنی واسه بازسازی نوشتالژی خودت. 😒
روی نسخهٔ CPU رندر فریم به فریم انجام شده! اگه با Vulkan رندر بگیرم روان و عین آب خوردن خواهد شد.
چرا اینو ساختم؟
چون مانیتورهای امروزی رندر و سبک تصویرسازی بازیهای قدیمی رو پشتیبانی نمیکنن.
در واقع من مانتیور CRT رو شبیه سازی کردم که به کمک این برنامه میتونه خروجی رندر شبیهسازها رو به نسخهٔ بومی تبدیل کنه.
روی نسخهٔ CPU رندر فریم به فریم انجام شده! اگه با Vulkan رندر بگیرم روان و عین آب خوردن خواهد شد.
چرا اینو ساختم؟
چون مانیتورهای امروزی رندر و سبک تصویرسازی بازیهای قدیمی رو پشتیبانی نمیکنن.
در واقع من مانتیور CRT رو شبیه سازی کردم که به کمک این برنامه میتونه خروجی رندر شبیهسازها رو به نسخهٔ بومی تبدیل کنه.
Please open Telegram to view this post
VIEW IN TELEGRAM
حالا یه سوأل از اونهایی که چپ و راست میان میگن چرا باید سی++ رو یاد بگیرم!
همچین چیزی رو با کدوم زبان میتونی بسازی؟ 😂 نکنه میخوای با پایتون انجامش بدی؟ یا با راست یا گو که ۲ فریم بر ثانیه برات بده؟ 😁😒
همچین چیزی رو با کدوم زبان میتونی بسازی؟ 😂 نکنه میخوای با پایتون انجامش بدی؟ یا با راست یا گو که ۲ فریم بر ثانیه برات بده؟ 😁😒
COMPΞZ 🧬
وقتی میزنه تو سرت برداری یه CRT شبیهسازی کنی واسه بازسازی نوشتالژی خودت. 😒 روی نسخهٔ CPU رندر فریم به فریم انجام شده! اگه با Vulkan رندر بگیرم روان و عین آب خوردن خواهد شد. چرا اینو ساختم؟ چون مانیتورهای امروزی رندر و سبک تصویرسازی بازیهای قدیمی رو…
خیلی خلاصه مثال بزنم برنامههایی مثل OBS همچین کاری میکنن.
فریم به فریم تصویر رو میگیرن. البته کاری که من به عنوان شبیهسازی CRT انجام دادم مقداری هم کار با Shader بود که روی GPU اجرا میشه و اون حالت بازسازی تصویر پیکسلی رو بهینهسازی میکنه.
اگه به نسخهٔ CRT شده دقت کنی، افکتها و گرافیک بدِ پیکسلی نسبت به نسخهٔ خام بسیار بهینهتر هست.
البته این صرفاً یک نسخهٔ آزمایشی ۱ روزست که ساختم، هدف این بود جواب بگیرم ازش.
فریم به فریم تصویر رو میگیرن. البته کاری که من به عنوان شبیهسازی CRT انجام دادم مقداری هم کار با Shader بود که روی GPU اجرا میشه و اون حالت بازسازی تصویر پیکسلی رو بهینهسازی میکنه.
اگه به نسخهٔ CRT شده دقت کنی، افکتها و گرافیک بدِ پیکسلی نسبت به نسخهٔ خام بسیار بهینهتر هست.
البته این صرفاً یک نسخهٔ آزمایشی ۱ روزست که ساختم، هدف این بود جواب بگیرم ازش.
یک سؤال خیلی تکراری که خیلیها وقتی تازه ++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 هم استانداردهاش اینا هستن که از سال ۱۹۸۹ آغاز میشه:
واسهٔ همین هم وقتی میبینی یکی میاد زیر پست این توسعهدهدههای این دو تا غول مسخرهبازی میکنه اصلاً اهمیت نمیدن چی میگه! چون تو باغ نیست که اصلاً صنعت چی میگه! صنعت دست بزرگان هست نه من برنامهنویس ساده که نباشم هم واسشون مهم نیست.
وقتی میگی 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
واسهٔ همین هم وقتی میبینی یکی میاد زیر پست این توسعهدهدههای این دو تا غول مسخرهبازی میکنه اصلاً اهمیت نمیدن چی میگه! چون تو باغ نیست که اصلاً صنعت چی میگه! صنعت دست بزرگان هست نه من برنامهنویس ساده که نباشم هم واسشون مهم نیست.
Please open Telegram to view this post
VIEW IN TELEGRAM
COMPΞZ 🧬
واسهٔ همین هم وقتی میبینی یکی میاد زیر پست این توسعهدهدههای این دو تا غول مسخرهبازی میکنه اصلاً اهمیت نمیدن چی میگه! چون تو باغ نیست که اصلاً صنعت چی میگه! صنعت دست بزرگان هست نه من برنامهنویس ساده که نباشم هم واسشون مهم نیست.
یک ارجاع به گواهی استاندارد ایزو با عنوان ISO/IEC 14882:2024 از زبان که در سال ۲۰۲۳ استانداردسازی شده و در سال ۲۰۲۴ گواهیش صادر شده.
کلاً پیشنهاد میکنم وقتی چیزیرو یاد میگیرید یا ازش استفاده میکنید بهش علاقه نشون بدین؛ و اگرنه، نه درکش خواهید کرد و نه اون ابزار مناسبی برای نحوهٔ تفکر شما خواهد بود.
بخشهای مربوط به هر کتاب که هست مقدمه، یه توضیحی میدن که تاریخچه چی بوده واسهٔ چی بوده اینا برای ورق زدن نیست، برای خوندنه! برای درک کردنه.
این لینک اشارهٔ مستقیم به نقشهٔ راه استاندارد در حال حاضر رو نشون میده:
https://isocpp.org/std/status
و گواهی استاندارد که هر ۵ سال یه بازبینی میشه.
https://www.iso.org/standard/83626.html
کلاً پیشنهاد میکنم وقتی چیزیرو یاد میگیرید یا ازش استفاده میکنید بهش علاقه نشون بدین؛ و اگرنه، نه درکش خواهید کرد و نه اون ابزار مناسبی برای نحوهٔ تفکر شما خواهد بود.
بخشهای مربوط به هر کتاب که هست مقدمه، یه توضیحی میدن که تاریخچه چی بوده واسهٔ چی بوده اینا برای ورق زدن نیست، برای خوندنه! برای درک کردنه.
این لینک اشارهٔ مستقیم به نقشهٔ راه استاندارد در حال حاضر رو نشون میده:
https://isocpp.org/std/status
و گواهی استاندارد که هر ۵ سال یه بازبینی میشه.
https://www.iso.org/standard/83626.html