کتاب Systems Programming with Zig-2026

کتاب Systems Programming with Zig-2026

اثر Mihalis Tsoukalos

category

نوع محتوای کتاب

مطالعه موردی

category

هدف یادگیری

تقویت مهارت‌های موجود

category

نوع مسیر

پروژه محور

category

بر اساس تکنولوژی

لینوکس

category

مورد استفاده

بک اند

category

بر اساس سطح علمی

پیشرفته

info نکات مهم قبل از خرید:

  • نسخه کتاب فعلی به زبان لاتین می‌باشد.
  • کتاب به صورت محصول می‌باشد و پس از خرید بلافاصله در دسترس شما قرار می‌گیرد.
  • قبل از خرید، قسمت توضیحات تکمیلی مربوط به هر کتاب را مطالعه کنید.
  • در صورت هرگونه سؤال با ایمیل و یا شماره پشتیبانی سایت در تماس باشید.
  • درگاه پرداخت رمزارز نیز برای هموطنان خارج از کشور فعال است.

درباره این کتاب

کتاب Systems Programming with Zig: Build Real Tools with No Hidden Cost (برنامه‌نویسی سیستمی با زیگ: ساخت ابزارهای واقعی بدون هزینه‌های پنهان) نوشتهٔ گریسون هینسون-هیستی، یک راهنمای عملی و پروژه‌محور برای برنامه‌نویسی سیستمی با زبان زیگ است. این کتاب با فرض آشنایی مقدماتی با زیگ، به شما می‌آموزد که چگونه ابزارهای واقعی و کاربردی مانند ابزارهای خط فرمان یونیکس، سرویس‌های شبکه، و برنامه‌های هم‌روند (concurrent) را بدون تکیه بر کتابخانه‌ها…

۸۰,۰۰۰ تومان

کتاب‌های پیشنهادی این تخصص:

کتاب‌های پیشنهادی این تخصص:

نظرات کاربران

تجربیات خود را از خواندن این کتاب با دیگران به اشتراک بگذارید.

امتیاز کل
star star star star star
از 0 نظر

ثبت نظر جدید

دیدگاهتان را بنویسید

هنوز دیدگاهی ثبت نشده است.

کتاب Systems Programming with Zig: Build Real Tools with No Hidden Cost (برنامه‌نویسی سیستمی با زیگ: ساخت ابزارهای واقعی بدون هزینه‌های پنهان) نوشتهٔ گریسون هینسون-هیستی، یک راهنمای عملی و پروژه‌محور برای برنامه‌نویسی سیستمی با زبان زیگ است. این کتاب با فرض آشنایی مقدماتی با زیگ، به شما می‌آموزد که چگونه ابزارهای واقعی و کاربردی مانند ابزارهای خط فرمان یونیکس، سرویس‌های شبکه، و برنامه‌های هم‌روند (concurrent) را بدون تکیه بر کتابخانه‌ها یا فریم‌ورک‌های سنگین، از صفر بسازید.

رویکرد کتاب Systems Programming with Zig بر ساخت پروژه‌های ملموس مانند مفسر زبان، موتور گرافیکی، یا یک سرور کش حافظه‌ای استوار است و مفاهیم کلیدی زیگ مانند مدیریت صریح حافظه با تخصیص‌دهنده‌ها (allocators)، برنامه‌نویسی عمومی در زمان کامپایل (comptime)، مدیریت خطا، و تعامل با زبان C را پوشش می‌دهد. این کتاب که توسط یکی از مشارکت‌کنندگان پروژه زیگ نوشته شده، با زبانی روان و مثال‌های سرگرم‌کننده، برنامه‌نویسی سیستمی را از یک موضوع خشک به تجربه‌ای لذت‌بخش تبدیل می‌کند.

در ادامه مقدمه‌ای از کتاب Systems Programming with Zig را از زبان نویسنده شرح خواهیم داد.

مقدمه‌ای بر کتاب Systems Programming with Zig:

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

زیگ آن سنت را ادامه می‌دهد، اما کاری می‌کند که سی هرگز نتوانست به‌خوبی انجام دهد: مسیر صادقانه را به مسیری آسان‌ نیز تبدیل می‌کند. هیچ جریان کنترلی پنهانی وجود ندارد. هیچ تخصیص‌دهندهٔ سراسری (global allocator) وجود ندارد که بی‌صدا به جای شما کار کند. هیچ زمان اجرایی (runtime) وجود ندارد که بدون خواست شما تصمیم بگیرد. آنچه می‌نویسید همان چیزی است که اجرا می‌شود و کامپایلر — با صدای بلند، در زمان ساخت (build time) — به شما خواهد گفت که نوشته‌تان با آنچه ماشین نیاز دارد، مطابقت ندارد. همین ویژگی، یعنی امتناع از پنهان‌کردن پیچیدگی در گوشه‌وکنارها، چیزی است که زیگ را به زبانی واقعاً جذاب برای کارهای سیستمی تبدیل می‌کند، نه صرفاً یک گزینهٔ دیگر.

کتاب Systems Programming with Zig برای برنامه‌نویسانی نوشته شده که می‌خواهند سیستم‌ها را درک کنند، نه اینکه صرفاً از آنها استفاده کنند. فرض ما این است که می‌توانید کد زیگ بخوانید و با ترمینال یونیکس کار کنید. اما فرض نمی‌کنیم که از قبل می‌دانید چرا یک سرور بازتاب‌دهندهٔ TCP (echo server) روی تابع `accept()` مسدود (block) می‌شود، یا زمانیکه نویسندهٔ بافر (buffered writer) شما بایت‌ها را جمع می‌کند، زمان‌بند (scheduler) ورودی/خروجی هسته چه می‌کند، یا چرا انتخاب تخصیص‌دهندهٔ اشتباه در یک حلقهٔ پرمصرف (hot loop) می‌تواند هزینهٔ توان عملیاتی (throughput) شما را یک مرتبهٔ بزرگی (order of magnitude) افزایش دهد. این‌ها سوالاتی هستند که این کتاب حول محور آنها ساخته شده است.

ما در سراسر کتاب Systems Programming with Zig ابزارهای واقعی می‌سازیم. یک کپی از دستور `tee(1)`، یک فهرست‌گیرندهٔ فایل‌های Zip، یک پایشگر فایل (file watcher) مبتنی بر اولیه‌های هستهٔ مختص هر پلتفرم، یک زمان‌بند وظایف هم‌روند (concurrent job scheduler)، یک حافظهٔ نهان درون‌حافظه‌ای (in-memory cache) در سطح تولید با پروتکل دودویی سفارشی، یک سرویس یادداشت‌برداری مبتنی بر SQLite3، و در نهایت، یک مفسر کاری برای یک زبان برنامه‌نویسی کوچک که کاملاً از صفر ساخته شده است. این‌ها نمونه‌های آموزشی ساده‌ای نیستند که در قالب پروژه ارائه شده باشند. آنها از آن دسته برنامه‌هایی هستند که شما را مجبور می‌کنند تصمیمات معماری بگیرید، عواقب آن تصمیمات را در خروجی بنچمارک حس کنید، و بفهمید چرا جامعهٔ سیستم‌ها به الگوهای کنونی رسیده است.

در سنت متون بنیادینی مانند «محیط برنامه‌نویسی یونیکس» و «زبان برنامه‌نویسی سی»، ما مرتباً برای بررسی «چرا» توقف می‌کنیم. وقتی یک قفل (mutex) را معرفی می‌کنیم، توضیح می‌دهیم که بدون آن چه مشکلی پیش می‌آید. وقتی یک تخصیص‌دهندهٔ آرنا (arena allocator) را انتخاب می‌کنیم، گزینهٔ جایگزین را بنچمارک می‌کنیم. وقتی یک پروتکل دودویی طراحی می‌کنیم، نشان می‌دهیم که برنامه‌نویسی در زمان کامپایل (`comptime`) چه چیزی را می‌تواند اعمال کند که یک بررسی در زمان اجرا (runtime) نمی‌تواند. کد وسیله‌ای برای درک مصالحه‌های مهندسی است و آن مصالحه‌ها خود برنامهٔ درسی اصلی هستند.

نسخهٔ Zig 0.16.x با تغییرات قابل‌توجهی عرضه شده است — انتزاعات جدید ورودی/خروجی، یک تخصیص‌دهندهٔ تغییر نام‌یافته، یک API شبکه‌ای بازنویسی‌شده — و این کتاب در تمام طول خود بر اساس همین نسخه نوشته شده است. تمام کدهای ارائه‌شده با Zig 0.16.0 کامپایل و اجرا می‌شوند. هر جا زبان انتخاب جالبی داشته یا با قراردادهای قدیمی‌تر شکسته است، صریحاً به آن اشاره می‌کنیم، زیرا درک دلیل تکامل یک زبان، بخشی از درک خود زبان است.

برنامه‌نویسی سیستمی یک دورهٔ تکمیلی برای برنامه‌نویسانی نیست که بر هر چیز دیگری مسلط شده‌اند. این یک طرز فکر است — دربارهٔ منابع، دربارهٔ زمان، دربارهٔ فاصلهٔ بین آنچه از ماشین خواسته‌اید و آنچه واقعاً انجام داده است. زیگ یک لنز فوق‌العاده شفاف برای پرورش آن طرز فکر است، زیرا از محو کردن تصویر امتناع می‌ورزد.

از شما که کتاب «برنامه‌نویسی سیستمی با زیگ» را انتخاب و مطالعه کردید، سپاسگزاریم. بیایید شیرجه بزنیم و پتانسیل کامل زیگ را با هم آزاد کنیم! کدنویسی مبارک!

Soli Deo gloria

این کتاب برای چه کسانی است؟

کتاب Systems Programming with Zig برای برنامه‌نویسانی است که از قبل زیگ را در سطح پایه می‌شناسند و می‌خواهند از آن برای کارهای جدی سیستمی استفاده کنند، و همچنین برای برنامه‌نویسان سیستمی با تجربهٔ متوسط تا پیشرفته در زبان‌های Go، Python، Java، C، C++ یا Rust که کنجکاوند بدانند زیگ چه چیزی به این رشته اضافه می‌کند. نیازی به کارشناس زیگ بودن ندارید — آشنایی کاری با نحو (سینتکس)، سیستم نوع‌ها و کتابخانهٔ استاندارد پایه برای دنبال‌کردن تمام فصل‌ها از ابتدا کافی است.

اگر کدهای کاربردی در زبان‌های سطح بالاتر نوشته‌اید و اولین تماس جدی‌تان با برنامه‌نویسی سیستمی است، برخی بخش‌ها برایتان چالش‌برانگیز خواهند بود. فصل‌های مربوط به تخصیص‌دهنده‌های حافظه، ساختارهای داده و تجزیهٔ پروتکل دودویی به‌ویژه فرض را بر تمایل به مواجهه با ایده‌های ناآشنا پیش از حل کامل آنها می‌گذارند. خواندن دوبارهٔ یک بخش دشوار، اغلب جزئیاتی را آشکار می‌کند که در بار اول نامرئی بودند. این نشانهٔ شکست در درک نیست — اینگونه است که دانش سیستمی انباشته می‌شود. در سراسر کتاب، برنامه‌های کاری، نتایج بنچمارک و تمرین‌های مبتنی بر مسائل واقعی را خواهید یافت. ابزارهایی که می‌سازیم — یک زمان‌بند وظایف، یک نمایه‌ساز فایل، یک سرور حافظه‌نهان، یک مفسر — تصاویر ساده‌شده از مفاهیم نیستند. آنها خود مفاهیم هستند که در کدی قابل کامپایل و اجرا بیان شده‌اند. آنها را بخوانید، اجرا کنید، تغییر دهید، بشکنید و ببینید چه تغییری می‌کند! مطالعهٔ منفعلانه در برنامه‌نویسی سیستمی شما را فقط تا حدی جلو می‌برد.

در نهایت، آماده باشید که کامپایلر با شما جرّوبحث کند، بنچمارک‌ها اعداد شگفت‌آوری تولید کنند، و اشکالات در جاهایی پنهان شوند که به نظر بی‌ربط به تغییری که داده‌اید می‌رسند. این نشانهٔ اشتباه‌کردن شما نیست. این ذات این رشته است. برنامه‌نویسی سیستمی مذاکره‌ای مداوم بین نیت‌های شما و واقعیت ماشین است، و زیگ به طور غیرمعمولی در مورد محل شکاف‌ها صادق است. این صداقت در ابتدا ناخوشایند است و پس از آن بی‌نهایت ارزشمند می‌شود.

آنچه کتاب Systems Programming with Zig پوشش می‌دهد:

فصل ۱، ساخت ابزارهای اساسی یونیکس، زیگ را به عنوان یک زبان سیستمی مدرن معرفی می‌کند که بر پایهٔ کنترل کامل برنامه‌نویس بنا شده است — بدون جریان کنترلی پنهان، بدون تخصیص‌های ضمنی، و بدون بارگذاری اپراتورهای غافلگیرکننده. به جای توضیح نحوهٔ زیگ از صفر، این فصل مسلط‌بودن به کار با آن را مفروض می‌گیرد و بلافاصله زبان را به کار می‌گیرد تا سه ابزار واقعی یونیکس بسازد: `ztee` (یک کلون از `tee(1)`)، `zwhich` (یک کلون از `which(1)`)، و `zpass` که فراخوانی مستقیم کد C از زیگ را از طریق `@cImport()` نشان می‌دهد.

فصل ۲، زیرساخت‌های سیستمی: ساخت، تست و توزیع، فرآیند ساخت را به عنوان دغدغه‌ای درجه‌یک در برنامه‌نویسی سیستمی در نظر می‌گیرد. فایل `build.zig` زیگ، گراف ساخت پروژه را با همان نحوی تعریف می‌کند که کد برنامه‌نویسی می‌شود، که امکان کامپایل متقابل و مدیریت وابستگی‌ها را بدون ابزارهای جداگانه فراهم می‌کند. این فصل به قالب‌بندی رشته‌ها با `std.fmt`، تخصیص‌دهنده‌های حافظه، تست‌های واحد با `std.testing`، توسعهٔ `zuuid` و انتشار پکیج‌ها با استفاده از سیستم ساخت زیگ می‌پردازد.

فصل ۳، دسترسی مستقیم به حافظه و قالب‌های دودویی، شکاف بین متغیرهای انتزاعی و ماشین فیزیکی را با بررسی عمیق مکانیک اشاره‌گرها و استراتژی‌های مدیریت حافظه در زیگ پر می‌کند. این فصل محاسبهٔ اشاره‌گر، طراحی تخصیص‌دهندهٔ سفارشی، مدیریت ترتیب بایت‌ها (اندینس) و تجزیهٔ فایل‌های دودویی را پوشش می‌دهد که با ساخت `zunzip`، یک فهرست‌گیرندهٔ کاملاً کاربردی فایل‌های Zip که از بایت‌های خام ساخته شده است، به اوج می‌رسد. فصل با بنچمارک‌گیری از استراتژی‌های مختلف تخصیص حافظه بسته می‌شود تا تصمیمات معماری را به عملکرد دنیای واقعی متصل کند.

فصل ۴، پردازش جریان‌ها، بافرها و رمزگذاری داده‌ها، تمرکز را به کارایی ورودی/خروجی و پردازش جریان معطوف می‌کند. با کار بر روی مجموعه‌ای از ابزارهای کلاسیک یونیکس — `zcat`، `zwc` و `z64` برای رمزگذاری و رمزگشایی Base64 — این فصل به بررسی استراتژی‌های بافرینگ، هزینهٔ فراخوانی‌های سیستمی، پردازش داده‌های شتاب‌یافته با SIMD و منطق رمزگذاری بیتی می‌پردازد و با بنچمارک‌هایی بسته می‌شود که مصالحه‌های بین روش‌های مختلف خواندن و نوشتن را کمّی می‌سازند.

فصل ۵، پیمایش دایرکتوری‌ها و رویدادهای سیستم فایل، مکانیک تعامل با سیستم فایل را در سطح اولیه‌های سیستمعامل بررسی می‌کند. این فصل `ztree` را می‌سازد، یک نمایش‌دهندهٔ درختی بازگشتی دایرکتوری که به‌درستی پیوندهای نمادین و موارد مرزی را مدیریت می‌کند، و سپس `zwatch` را می‌سازد، یک ابزار پایش بیدرنگ فایل که پشت آن از `inotify` لینوکس یا `kqueue` بی‌اس‌دی بسته به پلتفرم استفاده می‌کند. فصل با پیاده‌سازی قابلیت اصلی دستورات `chmod(1)` و `chown(8)` به پایان می‌رسد.

فصل ۶، برنامه‌نویسی پشتهٔ شبکه، از سوکت‌های خام TCP/IP تا یک API کامل پایش سیستم را پوشش می‌دهد و در طول مسیر یک سرور و مشتری بازتاب‌دهندهٔ TCP، یک سرور و مشتری بازتاب‌دهندهٔ UDP، تصاویر داکر برای سرویس‌های شبکه، و یک سرور و مشتری حداقلی HTTP می‌سازد. این فصل پشتهٔ شبکه را به عنوان دنباله‌ای از انتزاعات به‌طور فزاینده‌ای ساختاریافته — بایت‌ها، فریم‌ها، پروتکل، سرویس — در نظر می‌گیرد و با نشان‌دادن اینکه چگونه `comptime` می‌تواند صحت پروتکل را در زمان کامپایل به جای زمان اجرا اعمال کند، به پایان می‌رسد.

فصل ۷، مدیریت ریسه‌ها، پردازش‌ها و سیگنال‌ها، از طریق لایهٔ هم‌عملیاتی زیگ با C، دسترسی مستقیم به مدل پردازش سیستمعامل می‌دهد. این فصل به مدیریت سیگنال‌های یونیکس با `signal(3)` و `sigaction(2)`، ایجاد پردازش با `fork(2)` و `exec(3)`، اجرای دستورات شل، و نوشتن یک سرور و مشتری هم‌روند TCP می‌پردازد. همهٔ این مفاهیم در `zcron` گرد هم می‌آیند، یک زمان‌بند وظایف به سبک `cron(8)` که از ترمینال جدا می‌شود، پردازش‌های فرزند را مدیریت می‌کند، و به‌درستی به `SIGTERM`، `SIGHUP` و `SIGCHLD` پاسخ می‌دهد.

فصل ۸، هماهنگی هم‌روندی و همگام‌سازی، به تمایز بین هم‌روندی (concurrency) و موازی‌سازی (parallelism) و پیامدهای عملی اشتباه‌گرفتن آنها می‌پردازد. این فصل قفل‌ها (mutex)، عملیات اتمیک و متغیرهای شرطی را از طریق مثال‌هایی با تقاضای فزاینده — اجتناب از شرایط رقابتی، جلوگیری از فساد داده، مجموعهٔ ریسه‌ها، بافرهای حلقوی و الگوی تولیدکننده-مصرف‌کننده — پوشش می‌دهد و سپس این ابزارها را در `zlocate` به کار می‌گیرد، یک نمایه‌ساز هم‌روند فایل که پیمایش سیستم فایل را با استفاده از الگوی پراکنده-جمع‌آوری (Scatter-Gather) در میان یک مجموعهٔ ریسه کارگر توزیع می‌کند.

فصل ۹، پیاده‌سازی ورودی/خروجی ناهمگام، به مسئلهٔ اساسی مقیاس‌پذیری ورودی/خروجی همگام در شرایط هم‌روندی بالا می‌پردازد. این فصل تمایز بین ناهمگامی (asynchrony) و هم‌روندی را برقرار می‌کند، مدل `async` و `await` زیگ ۰.۱۶ را معرفی می‌کند، یک پراکسی TCP ناهمگام می‌سازد، و آن را با استفاده از حلقهٔ رویداد `std.Io` بازنویسی می‌کند. فصل با مقایسهٔ مستقیم عملکرد بین پیاده‌سازی‌های همگام و ناهمگام به پایان می‌رسد و برای خوانندگانی که می‌خواهند مستقیماً سازوکار هسته را ببینند، پوشش مختص پلتفرم از `io_uring` در لینوکس و `kqueue` در مک‌اواس را شامل می‌شود.

فصل ۱۰، ساخت یک سرور حافظه‌نهان درون‌حافظه‌ای با کارایی بالا، `zcache` را می‌سازد، یک حافظهٔ نهان درون‌حافظه‌ای در سطح تولید که حول سه لایهٔ کاملاً مجزا ساخته شده است: یک موتور ذخیره‌سازی LRU که یک جدول درهم‌سازی را با یک لیست پیوندی دوگانهٔ مزاحم (intrusive) ترکیب می‌کند، یک پروتکل سیمی دودویی سفارشی (ZEMP) با تجزیهٔ فریم با عرض ثابت، و یک سرور به‌ازای هر ریسه (thread-per-connection). این فصل سه ابزار مشتری — یک مشتری آزمایشی، یک مشتری خط‌فرمان، و یک بنچمارک — را توسعه می‌دهد که با هم صحت را تأیید، قابلیت استفاده را نشان می‌دهند و اعداد عینی توان عملیاتی و تأخیر را در برابر ادعاهای معماری قرار می‌دهند.

فصل ۱۱، ماندگارکردن داده‌های ساختیافته با SQLite3، از حافظهٔ درون‌حافظه‌ای به سمت ذخیره‌سازی پایدار حرکت می‌کند. این فصل به خواندن و نوشتن JSON، تجزیهٔ داده‌های ساختیافته به انواع زیگ، و تولید JSON از ساختارهای درون‌حافظه می‌پردازد. سپس از طریق لایهٔ هم‌عملیاتی زیگ با C به SQLite3 متصل می‌شود و یک سرویس کامل یادداشت‌برداری با یک API HTTP و یک مشتری اختصاصی می‌سازد و نشان می‌دهد که چگونه کتابخانه‌های C آزمایش‌شده را می‌توان بدون قربانی‌کردن ایمنی زمان کامپایل در برنامه‌های زیگ ادغام کرد.

فصل ۱۲، توسعهٔ یک زبان خاص‌دامنه (Domain-Specific Language)، کتاب را با ساختن یک زبان برنامه‌نویسی مفسری کوچک به نام `zcalc` از صفر در زیگ به پایان می‌رساند. این فصل هر سه ستون یک مفسر — یک تحلیل‌گر واژگانی (Lexer) که متن خام را به توکن تبدیل می‌کند، یک تحلیل‌گر نحوی (Parser) که آن توکن‌ها را به درخت نحو انتزاعی (AST) ساختار می‌دهد، و یک ارزیاب (Evaluator) که درخت را اجرا می‌کند — پیاده‌سازی می‌کند و آنها را در یک REPL تعاملی می‌پیچد. ساختن یک زبان از صفر در زیگ نشان می‌دهد که چگونه `comptime`، مدیریت صریح حافظه و کتابخانهٔ استاندارد با هم ترکیب می‌شوند تا یکی از چالش‌برانگیزترین مسائل ذهنی در نرم‌افزار را حل کنند.

سرفصل‌های کتاب Systems Programming with Zig:

  • Preface
  • Part 1: Zig Foundations
  • Chapter 1: Building Essential UNIX Tools
  • Chapter 2: Systems Infrastructure: Builds, Testing, and Distribution
  • Chapter 3: Direct Memory Access and Binary Formats
  • Chapter 4: Processing Streams, Buffers, and Data Encoding
  • Part 2: Systems Programming in Practice
  • Chapter 5: Navigating Directories and Filesystem Events
  • Chapter 6: Programming the Network Stack
  • Chapter 7: Managing Threads, Processes, and Signals
  • Chapter 8: Orchestrating Concurrency and Synchronization
  • Chapter 9: Implementing Asynchronous I/O
  • Chapter 10: Building a High-Performance In-Memory Cache Server
  • Chapter 11: Persisting Structured Data with SQLite3
  • Chapter 12: Developing a Domain-Specific Language
  • Chapter 13: Unlock Your Exclusive Benefits
  • Other Books You May Enjoy
  • Index

جهت دانلود کتاب Systems Programming with Zig می‌توانید پس از پرداخت، دریافت کنید.