کتاب Modern C, Third Edition: Covers the C23 standard 3rd Edition (C مدرن، ویرایش سوم: پوششدهنده استاندارد C23) اثر ینس گوستدت (از اعضای کمیته استاندارد ISO C)، راهنمایی جامع و بهروز برای تسلط بر زبان برنامهنویسی C با تمرکز کامل بر جدیدترین استاندارد یعنی C23 است. این کتاب برای برنامهنویسانی طراحی شده که میخواهند از قابلیتهای مدرن C برای تولید کدهای سریع، کوچک، قابل اعتماد و امن استفاده کنند، چه در زمینههای برنامهنویسی سیستمهای سطح پایین، برنامههای کاربردی با عملکرد بالا و چه سیستمهای توکار (Embedded).
نویسنده ضمن مرور سریع اصول اولیه، به تفصیل ویژگیهای جدید C23 مانند بهبودهای امنیتی، قابلیت اطمینان، عملکرد، امکانات برنامهنویسی چند رشتهای (Multi-threading) با استفاده از اتمیکها (Atomics)، عبارات ترکیبی (Compound Expressions) و لامبداها (Lambdas) را پوشش میدهد تا خواننده بتواند کدی قابل حمل (Portable) و مستحکم بنویسد.
در ادامه مقدمهای از کتاب Modern C را از زبان نویسنده شرح خواهیم داد.
مقدمهای بر کتاب Modern C:
همانطور که از عنوان این کتاب پیداست، زبان C امروز با زبانی که در ابتدا توسط خالق آن طراحی شده بود، یکسان نیست. C از همان ابتدا در یک فرایند پیوسته از تعدیل و بهبود قرار داشته است. به طور معمول، به C اولیه، با توجه به اولین کتابی که این زبان را محبوب کرد، C کرنیگان و ریچی (K&R C) گفته میشود.
از آن زمان، این زبان تحت یک فرایند مهم استانداردسازی و توسعه قرار گرفته که اکنون توسط ISO (سازمان بینالمللی استانداردسازی) هدایت میشود. این امر منجر به انتشار مجموعهای از استانداردهای C در سالهای ۱۹۸۹، ۱۹۹۹، ۲۰۱۱، ۲۰۱۸ و ۲۰۲۴ شد که به ترتیب معمولاً با نامهای C89، C99، C11، C17 و C23 شناخته میشوند.
کمیته استاندارد C تلاش زیادی میکند تا سازگاری رو به عقب را تضمین کند؛ به طوری که کدی که برای ویرایشهای قبلی زبان، مثلاً C11، نوشته شده است، باید با کامپایلری که ویرایش جدیدتر را پیادهسازی میکند، به یک فایل اجرایی با معنای معادل کامپایل شود.
متأسفانه، این سازگاری رو به عقب یک عارضه جانبی ناخواسته داشته است: عدم ایجاد انگیزه در پروژههایی که میتوانستند از ویژگیهای جدید بهره زیادی ببرند، برای بهروزرسانی کدبیس خود. برای تأکید بر این پیشرفت ویرایشها، ما مشخص میکنیم که کدام ویژگیهای جدید توسط کدام ویرایش استاندارد معرفی شدهاند.
این ویرایش (از کتاب Modern C) یک بازنگری قابل توجه با توجه به آخرین ویرایش استاندارد C یعنی C23 را ارائه میدهد. مطالب جدید بسیاری اضافه شده و توضیحات زیادی اصلاح شدهاند تا قابلیتهای جدید زبان برنامهنویسی C را منعکس کنند. بنابراین، در این کتاب، ما عمدتاً به C23 ارجاع میدهیم، اما در زمان نگارش این متن، کامپایلرها هنوز این استاندارد را به طور کامل پیادهسازی نکردهاند.
اگر میخواهید مثالهای کتاب Modern C را کامپایل کنید، حداقل به کامپایلری نیاز دارید که بیشتر C17 را پیادهسازی کرده باشد. برای نوآوریهایی که C23 معرفی میکند، یک هدر سازگاری ارائه کردهایم و در پیوست ب (Appendix B) توضیح میدهیم که چگونه میتوان در سیستمهای POSIX یک بستر کامپایلر و کتابخانه C مناسب به عنوان پشتیبان (fallback) ایجاد کرد. توجه داشته باشید: این به معنای یک ابزار دائمی نیست، بلکه تنها یک عصا است تا پلتفرمها خود را تطبیق دهند.
برنامهنویسی به یک فعالیت فرهنگی و اقتصادی بسیار مهم تبدیل شده و C همچنان یک عنصر مهم در دنیای برنامهنویسی است. همانند تمام فعالیتهای بشری، پیشرفت در C توسط عوامل متعددی هدایت میشود: منافع شرکتی یا فردی، سیاست، زیبایی، منطق، شانس، نادانی، خودخواهی، خودپرستی، فرقهگرایی و غیره (انگیزه اصلی خود را اینجا اضافه کنید). بنابراین، توسعه C نه ایدهآل بوده و نه میتواند ایدهآل باشد. این زبان دارای نقصها و مصنوعاتی است که تنها در بستر تاریخی و اجتماعی خود قابل درک هستند.
C و C++: تمایز و تکامل
بخش مهمی از بستری که C در آن توسعه یافت، ظهور اولیه زبان خواهر آن، C++ بود. یک تصور غلط رایج این است که C++ از C با افزودن ویژگیهای خاص خود تکامل یافته است. اگرچه این زمینه از لحاظ تاریخی صحیح است (C++ از یک C بسیار اولیه تکامل یافت)، اما امروزه اهمیت چندانی ندارد. در واقع، C و C++ بیش از ۳۰ سال پیش از یک نیای مشترک جدا شدند و از آن زمان به طور جداگانه تکامل یافتهاند.
اما این تکامل دو زبان در انزوا رخ نداده است؛ آنها در طول سالها مفاهیم یکدیگر را مبادله کرده و پذیرفتهاند. برخی از ویژگیهای جدید، مانند افزودن اتمیکها (Atomics) و رشتهها (Threads)، در همکاری نزدیک بین کمیتههای استاندارد C و C++ طراحی شدهاند.
با این وجود، تفاوتهای زیادی باقی مانده است، و به طور کلی، تمام آنچه در کتاب Modern C نوشته شده، در مورد C است، نه C++. بسیاری از مثالهای کد با یک کامپایلر C++ کامپایل نخواهند شد. بنابراین، نباید سورسهای هر دو زبان را با هم ترکیب کنیم. به طور خلاصه، C و C++ متفاوت هستند: آنها را با هم مخلوط نکنید و آنها را با هم اشتباه نگیرید.
درباره کتاب Modern C
زبان برنامهنویسی C از اوایل دهه ۱۹۷۰ وجود داشته است. از آن زمان، C در تعداد باورنکردنی از برنامههای کاربردی استفاده شده است. برنامهها و سیستمهای نوشته شده با C در اطراف ما، در کامپیوترهای شخصی، تلفنها، دوربینها، ستاپباکسها، یخچالها، خودروها، مینفریمها و ماهوارهها—اساساً در هر دستگاه مدرنی که دارای یک رابط قابل برنامهریزی است—یافت میشوند.
در مقابل حضور فراگیر برنامهها و سیستمهای C، دانش خوب در مورد و درباره C بسیار کمیابتر است. حتی برنامهنویسان باتجربه C نیز اغلب به نظر میرسد در درجهای از نادانی خودتحمیلشده درباره تکامل مدرن زبان C گیر کردهاند. یک دلیل محتمل برای این امر آن است که C به عنوان یک زبان با یادگیری آسان دیده میشود، که به برنامهنویسی با تجربه کم اجازه میدهد تا به سرعت قطعات کدی را بنویسد یا کپی کند که حداقل به نظر میرسد کار مورد نظر را انجام میدهند. به نوعی، C در ایجاد انگیزه در کاربران خود برای صعود به سطوح بالاتر دانش شکست میخورد.
کتاب Modern C قصد دارد آن طرز تفکر عمومی را تغییر دهد، بنابراین بر اساس سطوحی سازماندهی شده است که نشاندهنده میزان آشنایی با زبان C و برنامهنویسی به طور کلی است. این ساختار ممکن است با برخی عادات خوانندگان کتاب مغایرت داشته باشد؛ به ویژه، برخی از موضوعات دشوار (مانند اشارهگرها) را در طول سطوح مختلف تقسیم میکند تا از غرق کردن زودهنگام خوانندگان با اطلاعات نامناسب جلوگیری شود. در ادامه به زودی سازماندهی کتاب را با جزئیات بیشتری توضیح خواهیم داد.
به طور کلی، اگرچه بسیاری از ایدههای قابل اجرا به صورت جهانی که برای سایر زبانهای برنامهنویسی (مانند جاوا، پایتون، روبی، سیشارپ یا سیپلاسپلاس) نیز معتبر هستند ارائه خواهد شد، اما کتاب Modern C در درجه اول به مفاهیم و شیوههایی میپردازد که منحصر به فرد C هستند یا هنگام برنامهنویسی با زبان C ارزش ویژهای دارند.
هنگامی که در حال مطالعه کتاب Modern C هستید، با بسیاری از نکات کلیدی (Takeaways) روبرو خواهید شد که ویژگیها، قوانین، توصیهها و موارد مشابه را خلاصه میکنند. فهرستی از این نکات کلیدی در انتهای کتاب Modern C ظاهر میشود که میتوانید از آن به عنوان یک برگه تقلب (cheat sheet) استفاده کنید.
کتاب Modern C برای چه کسانی مناسب است؟
برای اینکه بتوانید از این کتاب بهره ببرید، باید برخی از حداقل الزامات را برآورده کنید. اگر در مورد هر یک از این موارد مطمئن نیستید، لطفاً ابتدا آنها را به دست آورید یا یاد بگیرید؛ در غیر این صورت، ممکن است زمان زیادی را هدر دهید.
اول، شما نمیتوانید یک زبان برنامهنویسی را بدون تمرین آن یاد بگیرید، بنابراین باید یک محیط برنامهنویسی مناسب در اختیار داشته باشید (معمولاً روی یک کامپیوتر شخصی یا لپتاپ)، و باید تا حدی بر آن مسلط باشید. این محیط میتواند یکپارچه (یعنی IDE) یا مجموعهای از ابزارهای جداگانه باشد.
پلتفرمها در آنچه ارائه میدهند بسیار متفاوت هستند، بنابراین ارائه مشاوره در مورد جزئیات خاص دشوار است. در محیطهای شبیه یونیکس مانند لینوکس و macOS اپل، ویرایشگرهایی مانند emacs
و vim
و کامپایلرهایی مانند c99
، c17
، gcc
و clang
را خواهید یافت.
شما باید بتوانید کارهای زیر را انجام دهید:
- در سیستم فایل خود پیمایش کنید: سیستمهای فایل در کامپیوترها معمولاً به صورت سلسله مراتبی در دایرکتوریها سازماندهی میشوند. شما باید بتوانید برای پیدا کردن و دستکاری فایلها، در میان آنها حرکت کنید.
- متن برنامهنویسی را ویرایش کنید: ویرایش متن برنامهنویسی با ویرایش یک نامه در یک محیط پردازش کلمه متفاوت است. محیط، ویرایشگر، یا هر نام دیگری که دارد، باید درک اولیهای از زبان برنامهنویسی C داشته باشد. خواهید دید که اگر یک فایل C را باز کنید (که معمولاً دارای پسوند فایل .c است)، ممکن است برخی از کلمات کلیدی را برجسته کند یا به شما کمک کند تا کد خود را مطابق با تو در تو بودن براکتهای
{}
تورفتگی (indent) دهید. - یک برنامه را اجرا کنید: برنامههایی که در اینجا خواهید دید در ابتدا بسیار ساده هستند و هیچ ویژگی گرافیکی به شما ارائه نخواهند داد. آنها باید در خط فرمان اجرا شوند. یک نمونه از چنین برنامهای که به این روش اجرا میشود، کامپایلر است. در محیطهای شبیه یونیکس، خط فرمان معمولاً شل (shell) نامیده میشود و در یک (یا همان) کنسول یا ترمینال اجرا میشود.
- متن برنامهنویسی را کامپایل کنید: برخی از محیطها یک دکمه منو یا میانبر صفحه کلید برای کامپایل ارائه میدهند. یک جایگزین برای آن، اجرای کامپایلر در خط فرمان یک ترمینال است. این کامپایلر باید از استانداردهای اخیر پیروی کند؛ وقت خود را با کامپایلری که سازگار نیست هدر ندهید.
اگر قبلاً هرگز برنامهنویسی نکردهاید، کتاب Modern C برایتان سخت خواهد بود. دانستن برخی از موارد زیر کمک خواهد کرد: بیسیک، C (ویرایشهای تاریخی)، C++، فرترن، R، بش، جاوااسکریپت، جاوا، متلب، پرل، پایتون، سایلب و غیره.
اما شاید شما تجربه برنامهنویسی دیگری داشتهاید، شاید حتی بدون اینکه متوجه شوید. بسیاری از مشخصات فنی در واقع در نوعی زبان تخصصی ارائه میشوند که میتواند به عنوان یک قیاس مفید باشد—به عنوان مثال، HTML برای صفحات وب و LaTeX برای قالببندی اسناد.
شما باید ایدهای در مورد مفاهیم زیر داشته باشید، اگرچه ممکن است معانی دقیق آنها در C کمی متفاوت از زمینهای باشد که در آن یاد گرفتهاید:
- متغیرها: موجودیتهای نامگذاری شدهای که مقادیر را در خود نگه میدارند.
- شرطیها: انجام دادن کاری (یا ندادن) منوط به یک شرط دقیق.
- تکرار (Iteration): انجام دادن مکرر کاری برای تعداد مشخصی از دفعات یا تا زمانی که یک شرط خاص برآورده شود.
سازماندهی کتاب Modern C: یک نقشه راه
این کتاب به سطوحی با شماره ۰ تا ۳ سازماندهی شده است. (یکی از دیدگاههای خاص C این است که اندیسگذاری از ۰ شروع میشود و نه از ۱ مانند فرترن.)
- سطح ۰، «برخورد (Encounter)»: بسیار سادهترین مفاهیم برنامهنویسی با C را خلاصه میکند. نقش اصلی آن این است که مفاهیم اصلیای را که ذکر کردیم به شما یادآوری کند و شما را با واژگان و دیدگاههای خاصی که C به کار میبرد آشنا سازد. در پایان این سطح، حتی اگر تجربه زیادی در برنامهنویسی با C نداشته باشید، باید بتوانید ساختار برنامههای ساده C را درک کنید و شروع به نوشتن برنامههای خود کنید.
- سطح ۱، «آشنایی (Acquaintance)»: بیشتر مفاهیم و ویژگیهای اصلی مانند ساختارهای کنترلی، انواع دادهها، عملگرها و توابع را با جزئیات شرح میدهد. این سطح باید درک عمیقتری از آنچه هنگام اجرای برنامههایتان اتفاق میافتد به شما بدهد. این دانش باید برای یک دوره مقدماتی در الگوریتمها و سایر کارهای آن سطح کافی باشد، با این تذکر قابل توجه که اشارهگرها هنوز به طور کامل معرفی نشدهاند.
- سطح ۲، «شناخت (Cognition)»: به قلب زبان C میرود. اشارهگرها را به طور کامل توضیح میدهد، شما را با مدل حافظه C آشنا میکند و به شما اجازه میدهد تا بیشتر رابط کتابخانه C را درک کنید. تکمیل این سطح باید شما را قادر سازد که به صورت حرفهای کد C بنویسید؛ بنابراین با بحثی ضروری در مورد نگارش و سازماندهی برنامههای C آغاز میشود. من شخصاً انتظار دارم هر کسی که از یک دانشکده مهندسی با رشتهای مرتبط با علوم کامپیوتر یا برنامهنویسی C فارغالتحصیل شده، بر این سطح مسلط باشد. به کمتر از آن راضی نباشید.
- سطح ۳، «تجربه (Experience)»: به جزئیات موضوعات خاصی مانند عملکرد (Performance)، قابلیت ورود مجدد (Reentrancy)، اتمیسیته (Atomicity)، رشتهها (Threads) و برنامهنویسی نوع-عمومی (Type-generic programming) میپردازد. اینها احتمالاً بهترین زمانی کشف میشوند که در دنیای واقعی با آنها روبرو میشوید. با این وجود، به عنوان یک کل، آنها برای تکمیل بحث و ارائه تخصص کامل در C ضروری هستند. هر کسی که چندین سال برنامهنویسی حرفهای در C داشته یا سرپرستی یک پروژه نرمافزاری را بر عهده دارد که از C به عنوان زبان برنامهنویسی اصلی استفاده میکند، باید بر این سطح مسلط باشد.
در طول کتاب Modern C، با تمرینهایی (Exercises) روبرو خواهید شد که هدفشان وادار کردن شما به فکر کردن در مورد مفاهیم مورد بحث است. بهترین حالت احتمالاً این است که آنها را مستقیماً همراه با مطالعه خود انجام دهید. دسته دیگری «چالشها (Challenges)» نامیده میشوند. اینها عموماً سختتر هستند. شما باید کمی تحقیق کنید تا حتی بفهمید موضوع آنها چیست و راهحلها به خودی خود به دست نمیآیند: آنها نیاز به تلاش دارند.
اینها زمان بیشتری میبرند، گاهی اوقات ساعتها یا، بسته به میزان رضایت شما از کارتان، حتی روزها. موضوعات پوشش داده شده در این چالشها ثمره تعصب شخصی من نسبت به «سوالات جالب» از تجربه شخصیام است. اگر مشکلات یا پروژههای دیگری در مطالعات یا کار خود دارید که همان زمینهها را پوشش میدهند، به همان اندازه خوب خواهند بود.
جنبه مهم این است که خود را آموزش دهید تا ابتدا به دنبال کمک و ایده در جای دیگری بگردید، و سپس دست به کار شوید و کارها را انجام دهید. شما فقط زمانی شنا کردن را یاد خواهید گرفت که به درون آب بپرید.
سرفصلهای کتاب Modern C:
- Modern C, Third Edition
- copyright
- contents
- Praise for Modern C
- preface
- acknowledgments
- about this book
- about the author
- about the cover
- Level 0: Encounter
- 1 Getting started
- 2 The principal structure of a program
- Level 1: Acquaintance and Buckle up
- 3 Everything is about control
- 4 Expressing computations
- 5 Basic values and data
- 6 Derived data types
- 7 Functions
- 8 C library functions
- Level 2: Cognition
- 9 Style
- 10 Organization and documentation
- 11 Pointers
- 12 The C memory model
- 13 Storage
- 14 More involved processing and I/O
- 15 Program failure
- Level 3: Experience
- 16 Performance
- 17 Function-like macros
- 18 Type-generic programming
- 19 Variations in control flow
- 20 Threads
- 21 Atomic access and memory consistency
- Technical annex
- A. Transitional code
- B. C compilers
- C. C libraries
جهت دانلود کتاب Modern C میتوانید پس از پرداخت، دریافت کنید.
دیدگاهها
هیچ دیدگاهی برای این محصول نوشته نشده است.