زنگ تفریح شماره 135
در زنگ تفریح شماره 131 به زندگینامه استاد هنر برنامه نویسی دونالد کنوث پرداختیم و به سیستم تک که از اختراعات او است اشارهای کردیم. برای توضیح بیشتر راجع به تک زنگ تفریح این شماره را به این موضوع اختصاص دادیم.
زمانی که اولین نسخهٔ کتاب «هنر برنامهنویسی رایانه» توسط دانلد نوث در ۱۹۶۹ منتشر شد، این کتاب توسط مونوتایپ، با فنآوری قرن ۱۹ امی حروفچینی شد که نوث از «ظاهر مناسب و کلاسیک» آن راضی بود. اما هنگامی که نسخهٔ دوم در ۱۹۷۶ به چاپ رسید، تمام کتاب باید دوباره حروفچینی میشد، چرا که فنآوری مونوتایپ به صورت گسترده با روشهای عکسبرداری جایگزین شده بود، و قلمهای قبلی دیگر در دسترس نبودند. به هر صورت، هنگامی که دانلد نوث پیشنمایش کتاب جدیدش را در ۳۰ مارس ۱۹۷۷ دریافت کرد، متوجه شد که بسیار بدشکل هستند. در این زمان، نوث برای اولین بار خروجی با کیفیت حروفچینی دیجیتال را مشاهده کرد، و به حروفچینی دیجیتال علاقهمند شد. پیشنمایشهای مأیوسکننده در نهایت موجب شدند که او تصمیم بگیرد با طراحی سیستم حروفچینی خود این مشکل را یک بار، و برای همه حل کند.
نسخهٔ جدید تک، بازنویسی و تک۸۲ نامیده شد و در سال ۱۹۸۲ منتشر گشت. از چیزهای قابل ذکر در مورد این نرمافزار میتوان به الگوریتم فاصلهگذاری اشاره کرد با الگوریتمی از فرانک لیانگ جایگزین شده بود. تک۸۲ همچنین از حساب ممیز ثابت به جای ممیز شناور استفاده میکرد تا از بازآفرینی نتایج بر روی سختافزارهای متفاوت، اطمینان حاصل شود، و نیز شامل یک زبان برنامهنویسی واقعی و کامل از نظر تورینگ بود.
سیستم حروفچینی
دستورات تک معمولاً با یک ممیز معکوس شروع میشوند، و با یک جفت گیومه، گروهبندی میگردند. به هر صورت، تقریباً تمام ویژگیهای نحوی تک قابل در هر لحظه قابل تغییر میباشند، و این کار تحلیل معنایی ورودی تک را برای هر چیزی جز خود تک بسیار دشوار میسازد. تک زبانی ماکرویی و مبتنی بر نشانهاست: بسیاری از دستورات، از جمله دستورات تعریف شده توسط کاربر، در همان جا بسط داده میشوند، تا آنجا که تنها نشانههای غیر قابل بسط باقی بمانند و آن دستورات اجرا میشوند. بسط در عمل بدون تغییر جانبی است. ارجاع پیاپی ماکروها نیاز به حافظهای ندارد، و ساختار اگر-آنگاه-غیر نیز در دسترس است. این از تک یک زبان کامل از نظر تورینگ، حتی در سطح گسترش میسازد.
این سیستم قابل تقسیم به چهار سطح است: در سطح اول، نمادها از ورودی خوانده میشوند و به هر کدام یک کد بخش تخصیص مییابد. ترکیب یک ممیز معکوس(در حقیقت هر نماد از گروه صفر) با یک حرف (نمادهای گروه ۱۱) یا یک تکنماد دیگر، با نشانهٔ کنترلی جایگزین میشوند. به این معنی، این مرحله مانند تحلیل نحوی است، با این تفاوت که از ارقام، عدد نمیسازد. در مرحلهٔ بعد، دنبالههای کنترلی(مانند شرطها و ماکروهای تعریف شده) با متن جایگزین آنها تعویض میشوند. با این ترتیب، ورودی مرحلهٔ ۳ شامل جریانی از نمادها(از جمله آنهایی که معنای خاصی دارند) و نیز دنبالههای کنترلی غیر قابل گسترش(معمولاً مقدارها و دستورات نمایشی) خواهد بود. در این مرحله نمادها در بندها قرار میگیرند. الگوریتم شکستن خط در تک با بهینهسازی نقاط شکست در سراسر بند انجام میگیرد. چهارمین مرحله، فهرست طولی خطها و چیزهای دیگر را به صفحهها میشکند. سامانهٔ تک اطلاعات دقیقی از اندازهٔ تمام نمادها و سمبلها دارد و با استفاده از این اطلاعات، بهترین حالت چینش حروف در هر خط، و خطوط در صفحه را محاسبه مینماید. سپس، یک پروندهٔ خروجی دی. وی. آی.(مستقل از ابزار) تولید مینماید که شامل محلهای نهایی تمام نمادهاست. این پروندهٔ دی. وی. آی. میتواند با راهانداز مناسب به چاپ برسد، و یا به قالبهای دیگر تبدیل شود. این روزها، معمولاً از پی. دی. اف. تک برای صرف نظر از دی. وی. آی. و تولید قالب پی. دی. اف. استفاده میشود.
جنبههای مهم تک
نرمافزار تک چیزهایی را ارائه میکند که قبل از ارائهٔ تک، در سامانههای حروفچینی دیگر، یا موجود نبودند، یا از کیفیت پایینی برخوردار بودند. بعضی از این نوآوریها، بر مبنای الگوریتمهای جالبی بنا نهاده شدهاست، و منجر به ارائهٔ تعدادی تز توسط دانشجویان نوث گشتهاست. با وجود این که برخی از این یافتهها اکنون در سیستمهای حروفچینی دیگر نیز قرار داده شدهاست، اما بعضی از این ویژگیها، مانند فاصلهگذاری ریاضی، هنوز در نوع خود منحصر به فرد هستند.
فاصلهگذاری در فرمولهای ریاضی
از آنجا که هدف اصلی تک حروفچینی کتاب «هنر برنامهنویسی رایانه» با کیفیت بالا بود، نوث توجه زیادی به انتخاب قواعد فاصلهگذاری مناسب برای فرمولهای ریاضی نمود. او سه کار را به عنوان استاندارد کیفیت برای حروفچینی کامپیوتری در نظر گرفت: کتابهایی که توسط ادیسون-وزلی، ویرایشگر «هنر برنامهنویسی رایانه» منتشر شده بودند، و به طور خاص کارهای هانس ولف. نسخههایی از مجلهٔ آکتا متمتیکا با تاریخ حدود ۱۹۱۰؛ و یک نسخه از اینداگیشنز متمتیکا، یک مجلهٔ ریاضی آلمانی. نوث به دقت در این مثالها کند و کاو کرد تا قواعد فاصلهگذاری مناسب برای تک را استخراج نماید. با وجود این که تک تعدادی قواعد پایهای ارائه مینماید، و ابزارهایی برای مشخص نمودن فاصلهگذاری مناسب لازم است، اما پارامترهای حقیقی به قلم مورد استفاده برای حروفچینی فرمول بستگی دارد.