مقدمه سیستم عامل لینوکس را میتوان از جنبه برنامهنویسی یک سیستم عامل منحصربهفرد دانست چون به تمام کاربران خود این امکان را میدهد که در توسعه سیستم عامل سهیم و دخیل شوند. البته تنوع زبانهای برنامهنویسی موجود در این سیستم عامل میتواند برای کسانی که میخواهند برنامهنویسی در این محیط را آغاز کنند، عامل سردرگمی شود. در این مقاله به معرفی اجمالی برخی زبانهای برنامهنویسی پرکاربردتر در این محیط میپردازیم و آنها را از بعضی جنبههای کلیدی با یکدیگر مقایسه میکنیم.
تمرکز این مطلب بر مرور این زبانهای برنامهنویسی است و تلاشی برای تعیین اینکه کدامیک بهترین گزینه برای برنامهنویسان هستند، صورت نخواهد گرفت. در واقع هرکدام از این زبانها میتوانند نیازها و سلیقههای خاص کاربران خود را برآورده کنند و هیچیک را نمیتوان به طور مطلق برتر از سایرین دانست. به همین دلیل مطالعه بیشتر در مورد هرکدام از این زبانها را میتوان مفید دانست.
تعداد زیادی زبان و کتابخانه برنامهنویسی در لینوکس وجود دارد. در نتیجه در اینجا تنها به بررسی آنهایی خواهیم پرداخت که طبق آمار و ارقام از سایرین پراستفادهتر هستند. منبع مورد استفاده برای این مطلب، کاری است که در LDP (پروژه مستندسازی لینوکس یا Linux Documentation Project) انجام شده است که نشاندهنده اعتبار آن در نزد متولیان لینوکس است.
زبانهایی که در اینجا مورد بررسی قرار خواهند گرفت عبارتند از:
زبانهای C، Perl، و Lisp به عنوان زبانهایی که از روزهای اول پیدایش لینوکس در آن قرار گرفته بودند زبانهای Python، PHP، Java و C++ به عنوان زبانهایی که نسبت به گروه اول جدیدتر هستند
معیارهای مقایسه
در بخش مقایسه، خصوصیات زیر برای هریک از زبانها بیان خواهد شد.
نام زبان
عنوانی که عموما زبان مورد بررسی به وسیله آن شناخته میشود.
مبتدی
معیاری است که نشان میدهد کار با زبان مورد بررسی چقدر برای افرادی که دارای تجربه کمی در زمینه برنامهنویسی هستند راحت است. زبانهایی که این معیار برای آنها «بله» تعیین شده باشد را میتوان مناسب حال برنامهنویسان مبتدی دانست.
کارایی
نشان میدهد که برنامههایی که با این زبان نوشته شده باشند، در هنگام استفاده چقدر سریع خواهند بود. البته کارایی بیشتر به الگوریتمهای مورد استفاده در برنامه بستگی دارد تا به زبان برنامهنویسی. ولی یک قانون نانوشته میگوید که C، C++ و Fortran معمولا برنامههایی با کارایی بالاتر تولید میکنند. به طور مثال میتوان به یک آزمایش اتکا کرد که البته خیلی هم علمی نیست. در این آزمایش یک برنامه مرتبسازی اعداد با یک الگوریتم ثابت در زبانهای مورد مقایسه پیادهسازی میشود و سرعت اجرای آنها با یکدیگر مقایسه میشود و مبنای تعیین کارایی زبان برنامهنویسی قرار میگیرد.
OOP: برنامهنویسی شیءگرا در مقابل سایر روشهای برنامهنویسی
برنامهنویسی شیءگرا یا Object Oriented Programming (OOP) یکی از مهمترین روشهای برنامهنویسی است که روز به روز بر محبوبیت آن افزوده میشود. در این روش، ساختار دادهها و الگوریتمها در واحدهایی که معمولا به نام کلاس (Class) شناخته میشوند، قرار میگیرند. OOP معمولا با روش برنامهنویسی رویهای (procedural) که در آن دادهها و الگوریتمها از یکدیگر جدا هستند مورد مقایسه قرار میگیرد. البته امکان برنامهنویسی شیءگرا را نمیتوان کاملا وابسته به زبان برنامهنویسی دانست. مثلا با وجود این که زبان C یک زبان شیءگرا محسوب نمیشود میتوان در آن برنامههای شیءگرا نوشت و به همین ترتیب در زبانهایی که مشخصه اصلی آنها شیءگرایی است میتوان برنامههای رویهای تولید کرد.
در اینجا زبانهایی که مشخصه OOP برای آنها ذکر شده است، قابلیتهای خاصی را برای تسهیل برنامهنویسی شیءگرا ارائه میکنند. زبانهای تابعی (functional) نظیر Lisp گونه متفاوتی از زبانها هستند. برنامهنویسی شیءگرا را میتوان شاخهای از برنامهنویسی تابعی دانست. برنامهنویسی منطقی (logical) که به نام برنامهنویسی تعریفی (declarative) نیز شناخته میشود و زبان prolog شاخصترین نمونه آن است، گونه کاملا متفاوتی از برنامهنویسی است که شباهت زیادی با سایر روشها ندارد.
RAD: تولید سریع برنامهها (Rapid Application Development)
این معیار بیشتر از آن که به زبان مورد استفاده بستگی داشته باشد، وابسته به ابزارهایی است که در تولید برنامه مورد استفاده قرار میگیرند. RAD در اثر استفاده مجدد از کدهای پیشنوشته (code reuse) نیز بسیار افزایش مییابد.
مثالها
این معیار حوزههایی را مشخص میکند که زبان مورد بحث در آنها بیشتر استفاده میشود. البته کاربردهای خوب و بد دیگری هم علاوه بر موارد ذکر شده وجود دارد اما به علت عام نبودن آنها ذکر نشدهاند.
توضیحات
اطلاعات بیشتری در مورد زبان مورد بحث در این بخش ارائه خواهد شد.
مقایسه زبانها
در این بخش همان طور که گفته شد، معیارهای معرفی شده در بالا را برای برخی زبانهای اصلی محیط لینوکس مورد بحث قرار میدهیم.
زبان Perl
مبتدی: بله
OOP: بله
مثالها: نبشتهنویسی (scripting)، ابزاری برای مدیران سیستم، برنامهنویسی وب توضیحات: ابزاری قدرتمند برای کار با متن و رشتههای حرفی (string)
زبان Python
مبتدی: بله
OOP: بله
مثالها: نبشتهنویسی، برنامهنویسی وب
زبان TCL
مبتدی: بله
OOP: خیر
مثالها: نبشتهنویسی، ابزاری برای مدیران سیستم، برنامههای کاربردی
زبان PHP
مبتدی: بله
OOP: بله
مثالها: برنامهنویسی وب توضیحات: استفاده زیادی در کاربردهای پایگاهداده در وب دارد
زبان Java
مبتدی: بله
OOP: بله
مثالها: برنامههای چندمحیطی (cross-platform)، برنامهنویسی وب توضیحات: به مرور به حوزههای جدیدی مانند تجارت الکترونیک و بسیاری کاربردهای دیگر وارد میشود.
زبان Lisp
مبتدی: بله
OOP: این زبان تابعی است
مثالها: برنامهنویسی هوش مصنوعی توضیحات: نسخههای متعددی از آن وجود دارد مانند Elisp، Clisp، و Scheme
زبان Fortran
مبتدی: خیر
OOP: خیر
مثالها: کاربردهای محاسباتی و علمی
زبان C
مبتدی: خیر
OOP: خیر
مثالها: برنامهنویسی سیستم، برنامههای کاربردی
زبان C++
مبتدی: خیر
OOP: بله
مثالها: برنامههای کاربردی
Shell Programming
Shellها محیط برنامهنویسی بسیار مهمی در لینوکس محسوب میشوند. اگر شما میخواهید یک کاربر حرفهای لینوکس باشید، حتما باید با این نوع برنامهنویسی نیز آشنا باشید. شباهتهایی بین برنامهنویسی Shell و سایر زبانهای نبشتهنویسی (scripting) وجود دارد. در واقع اغلب از هردوی آنها برای رسیدن به اهداف مشابهی استفاده میشود. از پرکاربردترین Shellهای محیط لینوکس میتوان bash، tcsh، csh، ksh، و zsh را نام برد. در شمارههای آینده بیشتر در مورد Shell Programming خواهیم گفت.
برخی زبانهای دیگر
علاوه بر زبانهایی که در اینجا مورد بررسی قرار گرفتند، زبانهای دیگری نیز در لینوکس وجود دارند که تنها به نام بردن آنها اکتفا میکنیم. در صورت علاقه، منابع بسیار زیادی در مورد این زبانها چه در خود محیط لینوکس (با استفاده از دستور man) و چه روی اینترنت میتوان یافت. این زبانها عبارتند از: AWK، SED، Smalltalk، Eiffel، Ada، Prolog، assembler، Objective C، Logo، و Pascal (با استفاده از مبدل p2c). همچنین http://www.tunes.org/Review/Languages.html اطلاعات بیشتری را در مورد زبانهای برنامهنویسی ارائه میکند. در شماره آینده مبحث برنامهنویسی در محیط لینوکس را ادامه خواهیم داد.