مبانی کامپیوتر · آزمایشگاه کد
بخش خوانده‌شده۰/ ۳
آزمایشگاه کد · C++ را بنویسید و همان‌جا اجرا کنید

کدنویسی

میز تمرین این کتاب: برنامهٔ C++ را می‌نویسید، ورودی می‌دهید و خروجی را می‌بینید. هیچ برنامه‌ای نصب نمی‌شود و هیچ‌چیز جایی فرستاده نمی‌شود — هر دو موتور داخل مرورگر خودتان اجرا می‌شوند.

دو موتور: یک مفسر سریع برای شروع، و کامپایلر واقعی clang (استاندارد C++17) برای برنامه‌های کامل — همراه با ۱۹ مثال از فصل‌های 06.a و 06.b.

۱۹مثال۲موتور۰ارسال داده≈۰٫۳ ثانیهاجرای گرم
CPP-LAB · ساخت و اجرا
یک پنجره: کد شما، پاسخ موتور، خروجی برنامه.
۰۱
بخش ۰۱

محیط کد

Write · Run · Read

کد C++ را در کادر پایین بنویسید و «اجرا» را بزنید: خروجی برنامه همان پایین می‌آید. Ctrl+Enter هم همین کار را می‌کند. هر چه در مثال‌های فصل‌های 06.a و 06.b دیده‌اید، اینجا می‌توانید امتحان کنید.

main.cpp حالت سریعموتور: JSCPP
هر مقدار در یک خط
کنسول آماده
خروجی برنامه

«اجرا» را بزنید — خروجی همین‌جا می‌آید.

هیچ‌چیز از این صفحه بیرون نمی‌رود

هیچ فراخوان سروری و هیچ آمارگیری‌ای وجود ندارد. کد شما فقط در حافظهٔ محلی همین مرورگر نگه داشته می‌شود تا بار بعد هم در دسترس باشد.

برنامهٔ بی‌پایان متوقف می‌شود

حالت سریع پس از ۳ ثانیه و حالت کامل پس از ۲۵ ثانیه رها می‌شود؛ در حالت کامل برنامه در یک کارگر جداگانه اجرا می‌شود تا حلقهٔ بی‌پایان بدون قفل‌شدن صفحه متوقف شود.

۰۲
بخش ۰۲

مثال‌های دو فصل C++

Click to load · then press Run

هر مثال همان کد یک اسلاید از فصل‌های 06.a یا 06.b است (ورودی و خروجی هم آمده است). روی کارت بزنید تا در ویرایشگر بار شود، بعد «اجرا» را بزنید. مثال‌های حالت سریع با using namespace std; نوشته شده‌اند تا مفسر هم آن‌ها را بفهمد؛ کد کتاب با std:: بی‌تغییر در حالت کامل اجرا می‌شود.

گام‌های نخست — مبانی، عملگرها و شرط

حلقه‌ها، آرایه‌ها و توابع

‏C++ امروز — این سه به حالت کامل نیاز دارند

۰۳
بخش ۰۳

راهنما، موتورها و محدودیت‌ها

What runs, what does not, and why

دو موتور پیشنهاد می‌شود چون دو نیاز متفاوت دارند: یکی در همان لحظه و همیشه در دسترس است، دیگری کامپایلری واقعی است و برنامه‌های کامل C++17 را می‌سازد.

کدام موتور را انتخاب کنم؟

حالت سریع (مفسر)حالت کامل (کامپایلر C++17)
موتور‏JSCPP — یک مفسر C++ نوشته‌شده به JavaScript‏clang + lld (LLVM 8.0.1) کامپایل‌شده به WebAssembly
آغاز کارهمان لحظه، بدون بارگیرییک‌بار ≈۶۰ مگابایت، سپس در حافظهٔ نهان مرورگر
سرعتکندتر — کد خط‌به‌خط تفسیر می‌شودسریع — کد ماشین واقعی WebAssembly، ساخته‌شده با -O2
پوشش C++زیرمجموعه‌ای به سبک C: بدون کلاس و بدون STL‏C++17 با کتابخانهٔ استاندارد: struct، class، string، vector، map، sort، قالب‌ها
سقف زمان اجرا۳ ثانیه، سپس متوقف می‌شود۲۵ ثانیه، سپس کارگر از بین می‌رود
کجا کار می‌کندهمه‌جا، حتی اگر فایل با دوبار کلیک باز شود (file://)فقط روی http/https — مرورگر بار کردن WebAssembly از file:// را نمی‌پذیرد
محل اجرامرورگر شما، همین زبانهمرورگر شما، یک رشتهٔ کارگر جداگانه

حالت سریع از چه چیزی پشتیبانی می‌کند

یک تفاوت، پای همهٔ خوانندگان کتاب را می‌گیرد: مفسر سریع عملگر دامنه را نمی‌شناسد، پس std::cout تجزیهٔ برنامه را با پیامی دربارهٔ همان خط متوقف می‌کند. زیر فایل‌های سرآمد using namespace std; را بنویسید و سپس cout خالی — برنامه هنوز C++17 معتبر است، و کد خودِ کتاب با std:: بی‌تغییر در حالت کامل اجرا می‌شود.

کار می‌کند

  • ‏cin / cout، printf / scanf
  • همهٔ عملگرها، از جمله ++ / -- و %
  • ‏if / else، switch، عملگر ?:
  • ‏for، while، do-while، break، continue
  • توابع: تعریف، اعلان، مقدار بازگشتی، آرگومان پیش‌فرض، بازگشت، void
  • بارگذاری بیش‌ازحد بر پایهٔ فهرست آرگومان‌ها
  • آرایه‌های یک‌بعدی و دوبعدی، آرایه‌های سراسری
  • رشته‌های char[] با توابع cstring
  • اشاره‌گرها و &، sizeof، #define
  • ‏cmath، cstdlib، iomanip

کار نمی‌کند — از حالت کامل استفاده کنید

  • ‏struct و class
  • ‏std::string، std::vector، std::sort و بقیهٔ STL
  • عملگر دامنهٔ :: — ‏std::cout اینجا خطای تجزیه می‌دهد
  • ‏static_cast<…> — به‌جایش (double)x بنویسید
  • ‏new و delete
  • حلقهٔ بازه‌ای (for (int x : v))
  • پارامترهای مرجع (int &x)
  • فراخوانی تابع هم‌نام با آرگومانی که دقیقاً هم‌نوع پارامتر نیست (Multiply(4)) — بنویسید Multiply(4.0)

حالت کامل از چه چیزی پشتیبانی می‌کند

کار می‌کند — همهٔ موارد بالا، به‌علاوهٔ

  • ‏struct و class با سازنده و متد
  • ‏string، vector، map، pair، sstream
  • ‏sort و سرآمد algorithm، همراه با توابع مقایسه
  • قالب‌ها، lambda، auto، حلقهٔ بازه‌ای
  • ‏new / delete و اشاره‌گرها
  • ‏iomanip، cmath، cstdlib، long long

کار نمی‌کند و اینجا روشن‌شدنی نیست

  • استثناها: try، catch و throw. این ساخت clang با استثناهای خاموش ساخته شده است؛ کامپایلر خودش همین را می‌گوید.
  • ورودی/خروجی فایل (fstream) و گرافیک: درون این جعبهٔ شنی فایل‌سیستم یا پردهٔ تصویر واقعی وجود ندارد.

یک تفاوت دیگر: خودِ C++ محدودهٔ آرایه را بررسی نمی‌کند. در حالت کامل، a[9] روی آرایهٔ سه‌خانه‌ای هر چه در حافظه باشد می‌خواند (مثل هر کامپایلر واقعی)؛ مفسر معمولاً آن را می‌گیرد و خطا گزارش می‌کند.

پرسش‌های پرتکرار

چرا صفحه پس از بار اول بدون اینترنت هم کار می‌کند؟

همهٔ این کتاب — قلم‌ها، سبک‌ها، اسکریپت‌ها و کل زنجیرهٔ ابزار — از همین سایت سرو می‌شود. هیچ‌چیز از نشانی بیرونی گرفته نمی‌شود، پس هر صفحه پس از بار نخست آفلاین هم کار می‌کند (حالت کامل هم، چون مرورگر آن ۶۰ مگابایت را در حافظهٔ نهان نگه می‌دارد).

فایل ذخیره‌شده را مستقیم باز کردم و حالت کامل بار نمی‌شود. چرا؟

صفحه‌ای که با file:// باز شده باشد اجازهٔ گرفتن ماژول‌های WebAssembly ندارد — این یک قاعدهٔ امنیتی مرورگر است، نه محدودیت این سایت. حالت سریع در همان شرایط بی‌مشکل کار می‌کند. برای حالت کامل، سایت را از نشانی خودش باز کنید یا در پوشه یک سرور محلی یک‌خطی راه بیندازید (python3 -m http.server).

کد من جایی ذخیره می‌شود؟

فقط در مرورگر خودتان (حافظهٔ محلی) — تا آنچه نوشته‌اید بار بعد هم بماند. هیچ‌چیز به سروری فرستاده نمی‌شود، بدون حساب کاربری و بدون ردیابی. دکمهٔ «بازنشانی نمونه» آن را پاک می‌کند.

حالت سریع می‌گوید برنامه از سقف زمان گذشت.

مفسر برنامه‌ای را که در ۳ ثانیه تمام نشود متوقف می‌کند؛ این معمولاً یعنی حلقه‌ای که شرط پایانش هرگز درست نمی‌شود. شمارندهٔ حلقه و حد آن را بررسی کنید — بخش ۶.۴ کتاب.

چرا عدد من ۳ چاپ می‌شود و نه ۳٫۰؟

تقسیم صحیح. اگر دو طرف / از نوع int باشند، C++ بخش اعشاری را دور می‌ریزد — همان هشدار ⚠ اسلایدها، و دلیل اینکه مثال‌ها static_cast<double>(sum) / n می‌نویسند.

صفحه‌کلید

  • Ctrl / ⌘ + Enter — اجرای برنامه
  • Tab — تورفتگی خط‌های انتخاب‌شده
  • Ctrl / ⌘ + Z — بازگردانی
  • Esc — توقف برنامهٔ در حال اجرا در حالت کامل