جان بنتلی (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
دیدگاهتان را بنویسید