دیگه فکر میکنم برای امروز بس باشه پس تا بهد خدا نگهدار  راستی راستی خواهش میکنم یه نظری هم بدید.

مروری بر زبان‌های برنامه‌نویسی محیط لینوکس

مقدمه سیستم عامل لینوکس را می‌توان از جنبه برنامه‌نویسی یک سیستم عامل منحصربه‌فرد دانست چون به تمام کاربران خود این امکان را می‌دهد که در توسعه سیستم عامل سهیم و دخیل شوند. البته تنوع زبان‌های برنامه‌نویسی موجود در این سیستم عامل می‌تواند برای کسانی که می‌خواهند برنامه‌نویسی در این محیط را آغاز کنند، عامل سردرگمی شود. در این مقاله به معرفی اجمالی برخی زبان‌های برنامه‌نویسی پرکاربردتر در این محیط می‌پردازیم و آنها را از بعضی جنبه‌های کلیدی با یکدیگر مقایسه می‌کنیم.

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

تعداد زیادی زبان و کتابخانه برنامه‌نویسی در لینوکس وجود دارد. در نتیجه در اینجا تنها به بررسی آنهایی خواهیم پرداخت که طبق آمار و ارقام از سایرین پراستفاده‌تر هستند. منبع مورد استفاده برای این مطلب، کاری است که در 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 اطلاعات بیشتری را در مورد زبان‌های برنامه‌نویسی ارائه می‌کند. در شماره آینده مبحث برنامه‌نویسی در محیط لینوکس را ادامه خواهیم داد.

فیلترینگ راه حل مناسبی نیست

مسوول یک ICP گفت:« درحال حاضر ما شاهد فیلترینگ یکسری از سایت‌ها هستیم که گفته می‌شود به امنیت کشور لطمه وارد می‌کند، ولی این این کا راه حل مناسبی نیست، چرا که مسوولان این سایت‌ها می‌توانند به روش‌های متفاوتی خود را به دست userهای خودشان برسانند.» مهندس “حمیدرضا لطفی” در گفت‌وگو با خبرنگار ایسنا گفت:« دست‌اندرکاران سایت‌های فیلتر شده می‌توانند مطالب را برای userهای سابقشان ایمیل بزنند. userهایی که مشتاق به استفاده از این سایت‌ها هستند می‌توانند به وسیله‌ی سایت‌های دیگر به سایت مورد نظر نظر دسترسی پیدا کنند.» وی افزود:« کسانی که از مخابرات سرویس می‌گیرند، فلیترینگ شده‌اند؛ به کسانی که مجوز ICP دارند گفته شده حتما باید فیلترگذاری کنند. در مطبوعات لیست‌هایی که فیلتر می‌شود را حدود 100 سایت اعلام کرده‌اند، در صورتی که لیست داده شده به ICPها در تهران حدود پانصد الی ششصد سایت است که باید فیلترگذاری شود و مشتری‌ها از این مساله ناراضی هستند.» وی گفت:« سایت‌هایی که از لحاظ فرهنگی مخرب هستند، باید فیلتر شوند؛ ولی ما در لیست، سایت‌هایی را دیدیم که بی‌غرض هستند و جانبداری از هیچ ارگان خاصی را نمی‌کنند و جزو سایت‌های خنثی هستند.» وی درباره‌ی با مشکلات موجود برای گرفتن مجوز ICP در شهرستان‌ها گفت:« به طور کلی برای گرفتن مجوز ICP باید دیش و دیگر امکانات نصب باشد و ما طبق همین مقررات در تهران مجوز ICP گرفته‌ایم و در مشهد هم تشکیل پرونده دادیم و دیش را نصب کردیم. برای گرفتن مجوز، پرونده‌ی ما در تهران مورد بررسی قرار گرفت و بعد از مدتی برای ما مشکلاتی ایجاد شد و دیش را پایین آوردند.» وی تاکید کرد:« مشکلاتی ایجاد می‌شود تا جایی که فقط به ISP راضی شویم و دیگر دنبال مجوز ICP نباشیم؛ این روش‌ها باعث می‌شود شرکت‌های خصوصی حاضر به سرمایه‌گذاری در شهرستان‌ها نشوند و این امر به مردم استان ضرر وارد می‌کند.» وی افزود:« یک قسمت در حال اقدام برای مجوز دادن است و قسمت دیگر دستور جمع کردن دیش را می‌دهد، با توجه به این مشکلات رقابت از بین می‌رود و امکانات و فناوری به روز و جدید نمی‌شود.»