2. فلسفه
وجههٔ برنامهنویسان پوسته نزد مدیران سیستمهای یونیکس اندکی خدشهدار گردیده است.این امر به یکی از دو دلیل زیر طبیعی میباشد:
- سرعتی که یک برنامه تفسیر شونده با آن اجرا میشود در مقایسه با یک برنامه C، یا حتی یک برنامه تفسیر شونده پرل .
- چون نوشتن یک اسکریپت پوسته، از نوع اجرای وظایف دستهای، آسان است، مقدار زیادی اسکریپت پوسته، با کیفیت ضعیف در هر طرف وجود دارد.
تا حدودی ناشی از این است، که یک رفتار برتریطلبانهای در ارتباط با ایجاد اسکریپتهای خوب پوسته وجود دارد. اسکریپتهایی که میتوانند به عنوان برنامههای CGI استفاده شوند، به طور نمونه، بدون آنکه در سرعت چیزی از پرل کم بیاورند ( گرچه هر دو در مقایسه با C ، در بسیاری از موارد، جایی که فقط سرعت معیار است، کم میآورند).
چند عامل برای اینکه اسکریپتهای پوسته، خوب، تمیز، سریع باشند، وجود دارد.
- مهمترین معیار این است که باید، آرایش خوانا و واضح داشته باشد.
- دوم، پرهیز از دستورات غیرضروری.
یک آرایش واضح تفاوت بین یک اسکریپت پوسته گمراهکننده واسکریپت دیگری که به سادگی مفهوم و حمایت شده است، میباشد.
شما ممکن است، برای اینکه در مورد یک اسکریپت ساده، فکر کنید این مطلب خیلی مهمی نیست، بخشیده شوید، اما در اینجا دو مورد ارزشمند برای به خاطر سپردن وجود دارد.
- اول، پیشبینی میشود، اغلب اسکریپت ساده، بیش از یک اسکریپت پیچیده به اسکریپت بزرگ رشد یابد.
- دوم، اگر هیچ فرد دیگری نتواند بفهمد که اسکریپت چگونه کار میکند،شما زیر بار نگهداری تمام مدت خودتان از آن، خرد میشوید!
تا اندازهای در مورد اسکریپتهای پوسته به نظرمیرسد آنها را به ویژه به طور نامناسبی دندانه دار میسازند، و نظر به اینکه ساختارهای اصلی کنترل در آنها if/then/else و حلقهها میباشند، تورفتگی برای فهم آن که اسکریپت چه کار میکند حیاتی است.
یکی از عمدهترین ضعفها در بسیاری از اسکریپتهای پوسته، سطرهای مشابه این است:
cat /tmp/myfile | grep "mystring"
که به این صورت بسیار سریعتر اجرا میشود:
grep "mystring" /tmp/myfile
میتوانید ملاحظه کنید(نه به طور خاص) که، سیستم عامل باید برنامه اجرایی /bin/grep
را که به طور معقولی کوچک است، در سیستم من 75600 بایت، بارگذاری نماید، یک
pipe
در حافظه برای انتقال باز کند،برنامه اجرایی
/bin/cat
را که حتی از آن هم کوچکتر است، درسیستم من 9528 بایت، باز و اجرا نماید، آن را به ورودی لوله ضمیمه کند، و اجازه دهد که اجرا شود.
البته، این قبیل امور آن چیزی است که سیستم عامل برای انجام آنهاست، و به طور معمول کارایی خوب در انجام همین امور است
. اما اگر این دستور در یک حلقه که بارها اجرا میگردد، باشد، ذخیره دستور اجرایی
cat
بارگذاری شده، برقراری و رها کردن پایپ، به ویژه میتواند به فرض دریک محیط CGI جایی که عوامل کافی برای کاهش سرعت وجود دارد، خود اسکریپت را مانع بیش از حدی نماید.
برخی یونیکسها، در موردی که «ساختن و متلاشی کردن پردازشها» نامیده میشود، کارآمدتر هستند - یعنی، بارگذاری میکنند، اجرا میکنند، و دوباره آنها را از حافظه پاک میکنند.
اما، هر قدر هم که طعم خوب یونیکس برای شما در انجام اینها باشد، یونیکس به هیچ وجه انجام آنها را ترجیح نمیدهد.
به این دلیل، ممکن است اشارهای ازجایزه استفاده از cat، شنیده باشید،همچنین با برخی محفلهایی مانند جایزه برای بیشترین استفاده بیخود از کلمه cat در یک اسکریپت مهم آشنا باشید، که گاه و بیگاه در گروه خبری comp.unix.shell
در مورد آن بحث میشود.
یک روش دوستان، به طور خالصانه، نگهداری یکدیگر تحت کنترل و حصول اطمینان از انجام درست امور، میباشد.
من دوست دارم گروه خبری
comp.os.unix.shell
را به شما پیشنهاد کنم، اگر چه به نظر میرسد در سالهای اخیر سروصدای آنها کاهش یافته است. هنوز هم معلمهای حقیقی هستند، که میعادگاهشان آنجاست، با مشورتهای خوبی برای افرادی از ما، که احتیاج داریم بیشتر بدانیم(و همگی ما چنین هستیم ). به اشتراک گذاشتن تجربهها، کلید تمام اینهاست - دلیل پشت خود این راهنما، و ما همه میتوانیم از آن بیاموزیم و در باز کردن بحث در باره این قبیل موضوعات همکاری کنیم.
که به طور دلپذیری مرا به سوی چیز دیگری سوق میدهد: همچنین هرگز به بسته کردن اسکریپتهای خودتان متمایل نشوید، به سبب ماهیت، نمیتوانند منبع بسته باشند. اگر شما یک خریدار اسکریپت پوسته داشته باشید،او که نمی تواند به سادگی کاملاً آن را بازرسی کند. بنابراین، شایدهم بپذیرید که توسط شخص دیگری که به او معرفی میکنید معاینه شود، از این به عنوان مزیت خود در GPL استفاده کنید - تشویق افراد به دادن بازخورد و دریافت رفع اشکال رایگان!!