پوسته‌ی بیشتر – تخم‌مرغ کمتر

  • یوسف مهرداد

جان بنتلی (Jon Bentley) که ستونی با نام Programming Pearls در نشریه Communications of the ACM داشت در سال ۱۹۸۶ به برنامه‌نویسی ادیبانه (literate programming) علاقه‌مند شد و از دونالد کنوث (Donald Knuth) خواست تا به عنوان نویسنده‌ی مهمان برنامه‌‌ای با این شیوه بنویسد و از داگ مکل‌روی (Doug McIlroy) هم خواست نقدی بر برنامه‌نویسی ادیبانه در آن ستون بنویسد.

مساله‌ای که بنتلی از کنوث خواسته بود برای آن برنامه‌‌ای بنویسد برای اکثر افراد آشناست: برنامه‌ای بنویسید که یک فایل متنی را بخواند و n کلمه‌ی پرتکرار به ترتیب و به همراه تعداد تکرار آنها چاپ کند.

کنوث برنامه‌اش را با پاسکال نوشت. برنامه از یک ساختمان داده هوشمندانه و هدفمند برای نگهداری کلمات و تعداد تکرار آنها استفاده می‌کرد.
نقد و بررسی مکل‌روی با قدردانی از نوشته‌ی کنوث و تکنیک برنامه‌نویسی ادیبانه شروع می‌شد. او به هوشمندی ساختار داده‌ی استفاده‌شده و پیاده‌سازی کنوث و هم‌چنین یکی دو خطای موجود پرداخت و پیشنهادهایی برای بهبود برنامه ارائه داد.

در ادامه با متانت و با زبانی ساده، مبانی و اصول زیربنایی برنامه‌ی کنوث را نقد و ویران کرد. آن چه افراد از آن نوشته به یاد دارند این است که مکل‌روی یک کد با ۶ دستور شل یونیکس (six-command shell pipeline) نوشت که نسخه‌ی کامل و بدون خطای کد پاسکال ۱۰ صفحه‌ای کنوث بود.


۱  tr -cs A-Za-z '\n' |
۲  tr A-Z a-z |
۳  sort |
۴  uniq -c |
۵  sort -rn |
۶  sed ${1}q

مرجع: More shell, less egg

این داستان نشان‌‌دهنده‌ی توانایی ترکیب اجزای از پیش‌ساخته در مدل Pipeline (معروف به pipes and filters) است. جایی که ترکیب دستورات ساده و مستقل، ولی قابل ترکیب می‌تواند کار یک کد ۱۰ صفحه‌ای را انجام دهد.


گزیده:

Keep it simple, make it general, and make it intelligible. Douglas McIlroy

https://bibalan.com/?p=4357
یوسف مهرداد

یوسف مهرداد


کانال تلگرام

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برای خروج از جستجو کلید ESC را بفشارید