علی النقی
ابوالحسن، علی بن محمد بن علی بن موسی الهادی النقی العسکری، دهمین امام شیعیان که از وی با عنوان امام علیّ نقی یا امام هادی یاد میکنند. جز هادی، معروفترین لقب او نقی است. نام او، «علی» و کنیهاش «ابوالحسن ثالث» و از القابش نقی، هادی، امین، طیب، ناصح و مرتضی را ذکر کردهاند. شیعیان وی را با فرزندش حسن بن علی، «امامین عسکریین» میخوانند، زیرا در شهر نظامی سامراء (عسکر)، زیر نظر خلفای عباسی بودند. زندگی او مصادف با ضعف عباسیان بود. از او رسالهای در جبر و اختیار و چند زیارت نقل شدهاست. منابع شیعیان کرامات بسیاری را به او نسبت میدهند.

ریشهشناسی القاب
در لغت نامه دهخدا و فرهنگ معین برای نقی نظیف و پاکیزه، برگزیده و خالص و برای هادی راهنما، راهنماینده، مرشد و هدایت کننده آمده است.
تولد
علیالنقی در نیمه ذی الحجه ۲۱۴ قمری در روستای صریا در نزدیکی مدینه به دنیا آمد. پدرش امام نهم شیعیان، ابوجعفر محمد التقیالجواد بود. مادرش بنا به برخی منابع امالفضل دختر المامون و بنا به برخی دیگر امالولد بود که سمانه یا سوسن خوانده میشد که اصالت مغربی داشت، البته نام مادرش مدنب، حدیث و غزال هم ذکر شدهاست. روایت اخیر محتملتر است چون بنا به برخی تواریخ ازدواج محمد بن علی و امالفضل در ۲۱۵ هجری رخ داد.
زندگی
در زمان کشته شدن پدرش محمد بن علی در بغداد در مدینه حضور داشت و همچون او در کودکی و هشت سالگی به امامت رسید. مطابق وصیت پدرش او وارث داراییهای پدر پس از سپریشدن صغر سن میشد. پیروان محمد بن علی اکثراً امامت او را پذیرفتند؛ اما بعدها گروه کوچکی برادرش موسی را امام دانستند. این گروه پس از آنکه موسی خود را از آنان جدا کرد دوباره پیرو علی بن محمد گشتند.
وی پیش از خلافت متوکل در آرامش در مدینه میزیست. متوکل عباسی برای آنکه بنیان خلافت –به عنوان یک نهاد سنیمذهب– را محکم کند دشمنی آشکاری را با شیعیان آغاز کرد و شروع به آزار و اذیت آنان نمود. خلافت متوکل و سیاست ضد علوی او برای علی سختیهایی به بار آورد. پس از خلیفه شدن متوکل، حاکم مدینه، عبدالله بن محمد بن داود هاشمی، نامهای به متوکل نوشت و به او در مورد فعالیتهای علی و پیروانش هشدار داد. او نوشت که علی در خانهاش پول، سلاح و نوشتههای ممنوعه نگهداری میکند. در جواب علی نامهای به متوکل در دفاع از اتهامات و شکایت از حاکم مدینه نوشت. متوکل حاکم مدینه را خلع و علی را از بالاترین احترام و اعتماد خود مطمئن کرد، ولی از او خواست که با خانواده و خدمه به درگاه او نقل مکان کند. علی بن محمد در مدینه توانست به خوبی نقش رهبری شیعیان را ایفا کند و به همین دلیل متوکل در سال ۲۳۳ یحیی بن هرثمه را مأمور انتقال وی به سامرا کرد. وقتی یحیی وارد مدینه شد مورد مخالفت مردم قرار گرفت و در ابتدا گفت هیچ خطری او را تهدید نمیکند. وقتی علی بن محمد به بغداد رسید مردم بسیاری جمع شدند نا او را ببینند و فرماندار اسحاق بن ابراهیم طاهری به ملاقات او آمد و تا پاسی از شب نزد او ماند. وی در ۲۳ رمضان ۲۳۳ وارد سامرا شد. خلیفه فوراً وی را به حضور نپذیرفت ولی فردای آن روز خانهای را برای اقامت او اختصاص داد. علی بن محمد بقیه عمرش را در سامرا ماند. از وی نقل شده که او داوطلبانه به سامرا آورده نشده ولی از آنجا که کیفیت آب و هوا را میپسندد فقط به خلاف میل خود آنجا را ترک خواهد کرد. به نظر میرسد او احترام خلیفه را جلب کرده بود و اگرچه تحت نظر بود آزاری به او نرسید. وی به خاطر تقوا و فروتنی اش مورد احترام بسیاری بود. نسب العسکری او به دلیل منطقه عسکر سامرا ست.
از برجستهترین اصحاب و شاگردان علی بن محمد میتوان نام اینان را ذکر کرد:
عبدالعظیم حسنی
حسن بن راشد
عثمان بن سعید عمری
در سامرا، علی بن محمد اگرچه به طور مستمر تحت نظر بود، میتوانست آزادانه در شهر بگردد و با طبقه بالای جامعه ارتباط برقرار کند. او آشکارا قادر بود ارتباط مستمری با نمایندگانش را حفظ کند، که مامور رساندن نامهها و دستورها و جمعآوری خمس شیعیان بودند. وی بعدها در سامرا چندین خانه خرید. حامد الگار میگوید سختگیریهای متوکل عباسی باعث تقیه کامل و ناپیداییاش از جامعه شد. رسالهای در خصوص اختیار انسان و چند متن و اظهار کوتاه (حدیث) به او نسبت داده میشود و توسط ابن شعبه حرانی ذکر شدهاند. زیارات جامعه کبیره و غدیریه نیز منسوب به اوست.
مرگ
علی بن محمد سرانجام به دستور معتز در روز ۳ رجب سال ۲۵۴ قمری در ۴۱ سالگی در زندان کشته شد. مدت امامت علی بن محمد ۳۳ سال بود. بنا به سنت شیعه او مسموم شد. ابن بابویه گفتهاست که او توسط متوکل، یا معتمد مسموم شد، گرچه هیچ یک از این دو در زمان مرگ او خلیفه نبودند. گرچه مقاتل الطالبین او را جزو شهدای علوی قید نمیکند.
خلیفه معتز، برادرش ابو احمد موفق را برای نماز میت او فرستاد. وقتی جمعیت عظیم مردم برای عزاداری جمع شدند، پیکر او به خانهاش که او از دلیل بن یعقوب مسیحی خریدهبود بازگرداندهشد و آنجا به خاک سپردهشد. پسرش ابوجعفر، که به نقلی در ابتدا جانشین او در امامت به شمار میرفت پیش از او در سامرا درگذشتهبود. دو پسر دیگر او - حسن، که جانشینش شد - و جعفر از او باقیماندند. بنا به اعتقاد شیعیان علی النقی، جانشینی پسرش حسن عسکری را حتی قبل از تولد او و همچنین در پاسخ به شیعیان درباره امامت پسرش محمد، ضمن رد امامت محمد، به شیعیان یادآوری کرده و او را پسر بزرگتر خود نیز خواندهاست. شیعیان همچنین معتقدند که بر جنازه وی پسرش حسن نماز گذاردهاست و در اعتقاد شیعه بر جنازه امام معصوم، تنها جانشین او نماز میگذارد. باب او محمد بن عثمان العمری بود که پدرش عثمان بن سعید وکیل و باب امامان هشتم و نهم بود. شیعه اثنی عشری پسر او حسن را به امامت به رسمیت شناخت. گرچه گروهی دیگر معتقد بودند پسرش محمد که پیش از او درگذشته بود امام پنهان است. احتمالاً محمد بن نصیر نمیری که به علی النقی نسبت ربوبیت داد و مدعی شد باب و پیامبر او ست به این گروه مرتبط بودهاست. او بنیانگذار فرقهای از غلات شیعه به نام نصیریه شمرده میشود.
کرامات
روایات شیعه کرامات بسیاری را به علی بن محمد الهادی نسبت میدهد. تعداد این کرامات بهویژه برای علیالنقی بیشتر از سایر امامان شیعه ذکر شدهاست. به طور خاص او چنین توصیف شده که؛
دانش زبانهای ایرانیان، اسلاوها، هندیان و نبطیان، علاوه بر از پیش دانستن طوفانها و پیشگویی مرگها و دیگر رخدادها به او اعطا شدهبود.
گفتهشده او متوکل را لعنت کرد و مرگ او را سه روز پس از این که خلیفه او را تحقیر کرده بود (با دستور دادن به او، به همراه هاشمیان و دیگر بزرگان، که از اسب پیاده شوند و جلوی او و فتح بن خاقان پیاده راه بروند) یا زندانی اش کرده بود پیش بینی کرده بود.
در حضور متوکل، او با گذاشتن زنی که به دروغ میگفت زینب دختر حسین بن علی است در لانه شیر برای اثبات این که شیرها به بازماندگان علی آسیب نمیزنند، نقاب از چهره او برداشت.
او شیری را که بر یک فرش نقش بسته بود زنده کرد و آنرا واداشت تا یک شعبده باز هندی را که به دستور متوکل، سعی کرد با حقههایش به او بی احترامی کند ببلعد؛
مشتی ماسه و سنگ را برای یک پیرو فقیرش به طلا تبدیل کرد.
بمبگذاری در حرم
در ۳ اسفند ۱۳۸۴، یک بمبگذاری در حرم عسکریین، به مقبره هادی و پسرش حسن عسکری آسیب فروانی زد، حمله دیگری نیز در ۲۳ خرداد ۱۳۸۶ انجام شد که منجر به تخریب دو مناره حرم شد.
آهنگ جنجالی
شاهین نجفی، خواننده رپ فارسی آهنگی را با نام نقی، در اردیبهشت ۹۱ منتشر کرد که جنجالهایی را برانگیخت، همزمان حکمی فقهی از آیتالله صافی گلپایگانی مرجع تقلید شیعیان در ایران منتشر شد که حکم اهانت کنندگان به امام را همان حکم مرتداعلام مینمود. اگرچه این حکم اساس متعلق به قبل از انتشار آهنگ شاهین نجفی بود، برخی تصور کردند این همان حکم به قتل شاهین نجفی است. این در حالی است که در فقه شیعه بین حکم و فتوا تفاوت روشنی وجود دارد. پس از این جنجال رسانهای بسیاری تصور کردند حکم قتل شاهین نجفی صادر شده است و در پی آن، شاهین نجفی تحت حفاظت امنیتی قرار گرفت. بسیاری از شخصیتهای دینی و مذهبی و حتی مخالفان جمهوری اسلامی مانند دکتر عبدالکریم سروش نیز این اقدام شاهین نجفی را تقبیح کردند. پس از این واکنشها شاهین نجفی تلاش کرد به نوعی کار خود را توجیه نماید و اعلام کرد ترانه نقی بهانهای برای بیان معضلات اجتماعی بودهاست
حرم عسکریین
حرم عسکریین، آرامگاه علی نقی امام دهم و حسن عسکری امام یازدهم شیعیان (معروف به عسکریین) در سامرای عراق است. همچنین نرجس خاتون، مادر حجت بن حسن (مهدی)، و حکیمه خاتون دختر محمد التقی (امام نهم شیعیان) و خواهر علی النقی (امام دهم شیعیان) نیز در حرم شهر سامرا بخاک سپرده شدهاند. سرداب غیبت (محل آغاز غیبت مهدی) نیز در ضلع غربی حرم سامرا واقع است. جعفر کذاب (جعفر تواب) و ابوهاشم جعفری نیز در همین مکان بخاک سپرده شدهاند.
تاریخچهٔ حرم
ابتدا تا پایان غیبت صغرا
شیعه و سنی هردو بر این باور اند که علی نقی در خانهٔ خود دفن شد و آن را از دلیل پسر یعقوب نصرانی خریدهبود. این خانه گسترده و بزرگ بوده و همهٔ صحن امروزی، را در بر میگیرد. حسن عسکری نیز در کنار پدرش بخاک سپرده شد. چون پیرامون آنجا پادگان نظامی بود، شیعیان و علاقهمندان به اهل بیت، پنهانی به زیارت میرفتند و پنجرهای سوی خیابان گشودهبودند که زایران زیارت میکردند و درون خانه نمیشدند. البته اداره آن دست شیعیان بود. حسن عسکری خادمی داشت ساکن این خانه، و هر بخش خانه که خراب میگشت مرمت مینمود. این وضع تا سال ۳۲۸ قمری و پایان غیبت صغرا ادامه داشت.
دوران آل حمدان
در سال ۳۳۳ هجری قمری (۳۲۴ خورشیدی) ساختمان جدید حرم توسط ابومحمد الحسن (مشهور به ناصرالدوله فرزند ابی الهیجا عبدالله آل حمدان) انجام گردید و برای عمرانی شهر سامرا تلاش کرد اما بر اثر جنگهایی که بین وی و معزالدوله روی داد، اغلب اقدامات عمرانی او نا تمام ماند.
دوران آل بویه
در سال ۳۷۷ هجری قمری (۳۶۶ هجری شمسی) پی از پیروزی معزالدوله بر ناصرالدوله آل حمدان و وقوع صلح بین آندو وارد شهر سامرا شد و اموال فراوانی را صرف آبادانی شهر نمود. گنبد بزرگی بر مزار هر دو امام ایجاد کرد، حرم مجللی دراطراف آن ساخت و صحنی برای آستانه احداث کرد. بدستور وی ضریحی از چوب ساروج تهیه و نصب گردید، سرداب غیبت مرمت گردید و تاسیسات ناصرالدوله آل حمدان را تکمیل نمود.
ارزش زیارت حرم عسکریین در باور شیعیان
شیخ توسی از ابوهاشم جعفری از حسن عسکری نقل میکند که: «مزارم در سرّ من رأی ایمنی برای هر دو گروه است.
در امالی و عدة الداعی نیز زیارت این جا را مهم شمردهاند.
بمبگذاری و ویرانی حرم عسکریین
اولین حمله در ۳ اسفند ۱۳۸۴ و دومین حمله پس از گذشت شانزده ماه در ۲۳ خرداد ۱۳۸۶ رخ داد.
در نخستین آفند بمبگذاران با به کارگیری بیش از دویست کیلوگرم تیانتی و کارگذاریاش در مرکز گنبد، گنبد و بخشی از گلدستههای طلایی حرم ویران شد. با این حمله گنبد فروریخت. . محمود احمدی نژاد رئیس جمهور وقت ایران و مراجع تقلید با صدور اطلاعیههایی جداگانهای این اقدام را محکوم کرده و نیز روز پنجشنبه را عزای عمومی اعلام کردند.
بمبگذاری در حرم عسکریین
اولین حمله در ۳ اسفند ۱۳۸۴ و دومین حمله پس از گذشت شانزده ماه در ۲۳ خرداد ۱۳۸۶ رخ داد.
در حمله اول بمبگذاران با به کارگیری بیش از ۲۰۰ کیلوگرم تی ان تی و کار گزاری آن در مرکز گنبد اقدام به تخریب گنبد و بخشی از گلدسته (مناره) های طلائی حرم کردند..
اولین واکنشها
محمود احمدی نژاد رئیس جمهور وقت ایران در اولین واکنش ضمن تسلیت این اقدام تروریستی به امام زمان، آیت الله خامنهای و عموم مسلمانان جهان اعلام کرد: اهانت به پیامبر اسلام و اصرار بر تخریب و انفجار اماکن متبرکه و مورد احترام مسلمانان از یک توطئه سازمان یافته علیه اسلام و مسلمانان نشان دارد. وی همچنین مسئول و مقصر مستقیم این حمله تروریستی را اشغالگران عراق نامید.
همچنین مراجع تقلید با صدور اطلاعیههای جداگانه هتک حرمت و حمله تروریستها به حرم امام هادی را محکوم و مسلمانان را به هوشیاری دعوت کرده و از آنان خواستند به دام تفرقه افکنی دشمنان اسلام نیفتند و نیز روز پنجشنبه را عزای عمومی اعلام کردند.
امامت
امامت یکی از اصول باور شیعیان است، که به جهت اهمیت آن شیعیان دوازدهامامی یا اثنی عشری خود را «امامیّه» میخوانند.
اصول تشیع: توحید، نبوت، معاد، عدل و امامت
شیعیان با استناد به حدیث نبوی: «من مات و لم یعرف امام زمانه، مات میتة جاهلیّة» (هر کس بمیرد درحالیکه امام زمانش را نشناسد، به مرگ جاهلیت مردهاست) شناخت امام را شرط قبول اسلام نزد پروردگار میدانند.
امامان
برخی شیعیان با استناد به حدیث جابر و برخی احادیث دیگر معتقدند ائمه ۱۲ فرد کاملاً مشخص هستند، که از جانب خدا و از زمان پیامبر با اسم معرفی شدهاند. این افراد عبارتاند از:
علی بن ابیطالب المرتضی ملقب به امیر المومنین، مرتضی و حیدر کرار
حسن بن علی المجتبی
حسین بن علی سیدالشهداء
علی بن حسین السجاد ملقب به زین العابدین
محمد بن علی الباقر
جعفر بن محمد الصادق
موسی بن جعفر الکاظم
علی بن موسی الرضا
محمد بن علی الجواد
علی بن محمد الهادی
حسن بن علی العسکری
حجت بن حسن المهدی ملقب به قائم، به اعتقاد شیعیان او زنده و حاضر است ولی در دوران غیبت ظاهر نیست.
شیعه دارای شاخههای دیگری نیز هست؛ مانند اسماعیلیه و زیدیه و فاطمیه که امامان آنان با شیعیان اثنی عشری تفاوتهایی دارد.
ویژگیها
۱- عصمت: امامان به همراه پیامبر اسلام و فاطمه زهرا ۱۴ نفر هستندکه به چهارده معصوم معروف است، که طبق برداشت ویژهای از آیه تطهیر (آیه ۳۳ سوره احزاب) هیچ گناه شرعی اعم از کبیره و صغیره را مرتکب نمیشوند. چرا که پیشوا و الگو در صورتی گفتار و رفتارش حجیّت دارد و لازم به تبعیت است، که یقین به صحت آن وجود داشته باشد. البته در مورد خطا و اشتباه اختلاف نظرهایی وجود دارد.
۲- عدالت: امامان هیچ حقی را از خود، دیگران و خدا -چنانکه در دین این حقوق تعریف شده و مطابق عقل محض باشد- پایمال نمیکنند.
۳- علم: امامان کاملاً به دین آگاهند و جواب تمام سؤالات دینی را میدانند. لذا در دوره بعد از پیامبر تفسیر دین بر عهده آنهاست. در خصوص نحوه تحصیل علم و حدود آن اختلافاتی وجود دارد.
۴- حجت: امامان حجت خدا در هر عصری هستند. بدین معنا که حیات دینی تماما و کاملاً در وجود آنها محقق شدهاست. لذا رفتار و کردار آنها بر سایرین حجت محسوب میشود. به عبارت دیگر مردم با مشاهده رفتار و گفتار آنها به آنچه در اسلام پسندیده و توصیه شدهاست، آگاه میشوند.
۵- ولایت: این مفهوم با مفهوم ولی و قطب نزد برخی گروههای متصوفه و تا حدودی امام اسماعیلیه مشترک است و تنها اختلاف در مورد شخص ولی است. این مفهوم هیچ گونه ارتباط ظاهری و باطنی با ولایت فقیه ندارد. همچنین بسیاری از اهل سنت ظاهری به علت همین مفهوم بسیاری اتهامات را به شیعیان نسبت میدهند. با توجه به باطنی بودن معنای آن توضیحی دشوار دارد.
از دید شیعیان پیامبر تمام ویژگیها و وظایف امام را دارد و علاوهبرآن وظیفه تشریع و تبلیغ دین و ویژگی ارتباط با خدا از طریق وحی را نیز دارد. همچنین فاطمه دختر پیامبر تمام ویژگیهای بالا را دارد و فقط مسئولیتهای زیر را ندارد.
مسئولیتها
۱- مرجعیت دینی: در دیدگاه شیعیان بعد از تکمیل تشریع دین توسط پیامبر، تفسیر آن و پاسخ به مسائل جدید پیش آمده نیازمند ویژگیهای خاصی است، که شامل علم کامل به دین و عصمت از گناه میشود. با توجه مجموعه صفات فوق تنها ائمه این ویژگی را دارند. آنها از جانب خدا مکلف هستند آموزههای دین را برای مردم تبیین کنند و مردم باید سؤالات خود را نزد آنها ببرند(سوره نساء، آیه ۸۳). این مرجعیت با مرجعیت مصطلح نزد شیعیان در حال حاضر در ظاهر شبیه و در باطن متفاوت است. اهل سنت اصلاً به چنین جایگاهی در دین اعتقاد ندارند و بر اشخاصی جائزالخطا بر اساس درک خود در امور دین فتوا میدهند.
۲- رهبری اجتماع(ولایت امر): این مفهوم بین شیعه و سنی مشترک است. بدین معنا که هر دو ضرورت وجود چنین جایگاهی در جامعه مسلمانان اتفاق نظر دارند. اهل سنت آن را اصطلاحا «خلیفه» میخوانند. آنها برای شخص خلیفه صفت و ویژگی خاصی قائل نیستند و راه انتخاب او را «شورا»، «اهل حل و عقد»، «وصایت» و برخی «غلبه»می دانند. در طول تاریخ بسیاری خلفا با شمشیر این مقام را تصاحب کردهاند. بسیاری از خلفا را کشته و بسیاری را عزل کردهاند. اما نزد شیعه ولی باید عالم، عادل، معصوم و حجت باشد، تا بر طبق دین حکم کند و بر هیچ کس ظلمی روا نکند و مردم مکلف به اطاعت از او هستند.(سوره نساء آیه ۵۹) این مفهوم با ولایت فقیه تشابه ظاهری و تفاوت باطنی دارد. شیعیان معتقدند که شخص ولی امر توسط خدا برگزیده شده و توسط نبی و یا امام قبلی به مردم معرفی میشود. خلافت حق اوست و سایرین که این مسند را گرفتهاند، غاصب هستند. استناد آنها به آیه «انما ولیکم الله و رسوله و الذین ءامنوا الذین یقیمون الصلوة و یؤتون الزکوةوهم راکعون» است.(جز این نیست که سرپرست شمافقط خداست و پیامبرش و کسانی که ایمان آورده و در حال رکوع نماز زکات میدهند.)(سوره مائده آیه ۵۵) شیعیان مصداق این آیه را علی میدانند، که در حال رکوع نماز به فقیری انگشتری خود را بخشید. ضمن آنکه این آیه سیاست اقتصادی- اجتماعی ولایت شیعی را نیز مشخص میسازد و بین اصلاح امور مسلمین و دستگیری آنان با عبادت خدا جمع میکند.
۳- ولایت باطنی: این مسئولیت به مفهوم باطنی ولایت مرتبط میشود و اموری نظیر شفاعت را شامل میشود.
ابوالحسن، علی بن محمد بن علی بن موسی الهادی النقی العسکری، دهمین امام شیعیان که از وی با عنوان امام علیّ نقی یا امام هادی یاد میکنند. جز هادی، معروفترین لقب او نقی است. نام او، «علی» و کنیهاش «ابوالحسن ثالث» و از القابش نقی، هادی، امین، طیب، ناصح و مرتضی را ذکر کردهاند. شیعیان وی را با فرزندش حسن بن علی، «امامین عسکریین» میخوانند، زیرا در شهر نظامی سامراء (عسکر)، زیر نظر خلفای عباسی بودند. زندگی او مصادف با ضعف عباسیان بود. از او رسالهای در جبر و اختیار و چند زیارت نقل شدهاست. منابع شیعیان کرامات بسیاری را به او نسبت میدهند.

ریشهشناسی القاب
در لغت نامه دهخدا و فرهنگ معین برای نقی نظیف و پاکیزه، برگزیده و خالص و برای هادی راهنما، راهنماینده، مرشد و هدایت کننده آمده است.
تولد
علیالنقی در نیمه ذی الحجه ۲۱۴ قمری در روستای صریا در نزدیکی مدینه به دنیا آمد. پدرش امام نهم شیعیان، ابوجعفر محمد التقیالجواد بود. مادرش بنا به برخی منابع امالفضل دختر المامون و بنا به برخی دیگر امالولد بود که سمانه یا سوسن خوانده میشد که اصالت مغربی داشت، البته نام مادرش مدنب، حدیث و غزال هم ذکر شدهاست. روایت اخیر محتملتر است چون بنا به برخی تواریخ ازدواج محمد بن علی و امالفضل در ۲۱۵ هجری رخ داد.
زندگی
در زمان کشته شدن پدرش محمد بن علی در بغداد در مدینه حضور داشت و همچون او در کودکی و هشت سالگی به امامت رسید. مطابق وصیت پدرش او وارث داراییهای پدر پس از سپریشدن صغر سن میشد. پیروان محمد بن علی اکثراً امامت او را پذیرفتند؛ اما بعدها گروه کوچکی برادرش موسی را امام دانستند. این گروه پس از آنکه موسی خود را از آنان جدا کرد دوباره پیرو علی بن محمد گشتند.
وی پیش از خلافت متوکل در آرامش در مدینه میزیست. متوکل عباسی برای آنکه بنیان خلافت –به عنوان یک نهاد سنیمذهب– را محکم کند دشمنی آشکاری را با شیعیان آغاز کرد و شروع به آزار و اذیت آنان نمود. خلافت متوکل و سیاست ضد علوی او برای علی سختیهایی به بار آورد. پس از خلیفه شدن متوکل، حاکم مدینه، عبدالله بن محمد بن داود هاشمی، نامهای به متوکل نوشت و به او در مورد فعالیتهای علی و پیروانش هشدار داد. او نوشت که علی در خانهاش پول، سلاح و نوشتههای ممنوعه نگهداری میکند. در جواب علی نامهای به متوکل در دفاع از اتهامات و شکایت از حاکم مدینه نوشت. متوکل حاکم مدینه را خلع و علی را از بالاترین احترام و اعتماد خود مطمئن کرد، ولی از او خواست که با خانواده و خدمه به درگاه او نقل مکان کند. علی بن محمد در مدینه توانست به خوبی نقش رهبری شیعیان را ایفا کند و به همین دلیل متوکل در سال ۲۳۳ یحیی بن هرثمه را مأمور انتقال وی به سامرا کرد. وقتی یحیی وارد مدینه شد مورد مخالفت مردم قرار گرفت و در ابتدا گفت هیچ خطری او را تهدید نمیکند. وقتی علی بن محمد به بغداد رسید مردم بسیاری جمع شدند نا او را ببینند و فرماندار اسحاق بن ابراهیم طاهری به ملاقات او آمد و تا پاسی از شب نزد او ماند. وی در ۲۳ رمضان ۲۳۳ وارد سامرا شد. خلیفه فوراً وی را به حضور نپذیرفت ولی فردای آن روز خانهای را برای اقامت او اختصاص داد. علی بن محمد بقیه عمرش را در سامرا ماند. از وی نقل شده که او داوطلبانه به سامرا آورده نشده ولی از آنجا که کیفیت آب و هوا را میپسندد فقط به خلاف میل خود آنجا را ترک خواهد کرد. به نظر میرسد او احترام خلیفه را جلب کرده بود و اگرچه تحت نظر بود آزاری به او نرسید. وی به خاطر تقوا و فروتنی اش مورد احترام بسیاری بود. نسب العسکری او به دلیل منطقه عسکر سامرا ست.
از برجستهترین اصحاب و شاگردان علی بن محمد میتوان نام اینان را ذکر کرد:
عبدالعظیم حسنی
حسن بن راشد
عثمان بن سعید عمری
در سامرا، علی بن محمد اگرچه به طور مستمر تحت نظر بود، میتوانست آزادانه در شهر بگردد و با طبقه بالای جامعه ارتباط برقرار کند. او آشکارا قادر بود ارتباط مستمری با نمایندگانش را حفظ کند، که مامور رساندن نامهها و دستورها و جمعآوری خمس شیعیان بودند. وی بعدها در سامرا چندین خانه خرید. حامد الگار میگوید سختگیریهای متوکل عباسی باعث تقیه کامل و ناپیداییاش از جامعه شد. رسالهای در خصوص اختیار انسان و چند متن و اظهار کوتاه (حدیث) به او نسبت داده میشود و توسط ابن شعبه حرانی ذکر شدهاند. زیارات جامعه کبیره و غدیریه نیز منسوب به اوست.
مرگ
علی بن محمد سرانجام به دستور معتز در روز ۳ رجب سال ۲۵۴ قمری در ۴۱ سالگی در زندان کشته شد. مدت امامت علی بن محمد ۳۳ سال بود. بنا به سنت شیعه او مسموم شد. ابن بابویه گفتهاست که او توسط متوکل، یا معتمد مسموم شد، گرچه هیچ یک از این دو در زمان مرگ او خلیفه نبودند. گرچه مقاتل الطالبین او را جزو شهدای علوی قید نمیکند.
خلیفه معتز، برادرش ابو احمد موفق را برای نماز میت او فرستاد. وقتی جمعیت عظیم مردم برای عزاداری جمع شدند، پیکر او به خانهاش که او از دلیل بن یعقوب مسیحی خریدهبود بازگرداندهشد و آنجا به خاک سپردهشد. پسرش ابوجعفر، که به نقلی در ابتدا جانشین او در امامت به شمار میرفت پیش از او در سامرا درگذشتهبود. دو پسر دیگر او - حسن، که جانشینش شد - و جعفر از او باقیماندند. بنا به اعتقاد شیعیان علی النقی، جانشینی پسرش حسن عسکری را حتی قبل از تولد او و همچنین در پاسخ به شیعیان درباره امامت پسرش محمد، ضمن رد امامت محمد، به شیعیان یادآوری کرده و او را پسر بزرگتر خود نیز خواندهاست. شیعیان همچنین معتقدند که بر جنازه وی پسرش حسن نماز گذاردهاست و در اعتقاد شیعه بر جنازه امام معصوم، تنها جانشین او نماز میگذارد. باب او محمد بن عثمان العمری بود که پدرش عثمان بن سعید وکیل و باب امامان هشتم و نهم بود. شیعه اثنی عشری پسر او حسن را به امامت به رسمیت شناخت. گرچه گروهی دیگر معتقد بودند پسرش محمد که پیش از او درگذشته بود امام پنهان است. احتمالاً محمد بن نصیر نمیری که به علی النقی نسبت ربوبیت داد و مدعی شد باب و پیامبر او ست به این گروه مرتبط بودهاست. او بنیانگذار فرقهای از غلات شیعه به نام نصیریه شمرده میشود.
کرامات
روایات شیعه کرامات بسیاری را به علی بن محمد الهادی نسبت میدهد. تعداد این کرامات بهویژه برای علیالنقی بیشتر از سایر امامان شیعه ذکر شدهاست. به طور خاص او چنین توصیف شده که؛
دانش زبانهای ایرانیان، اسلاوها، هندیان و نبطیان، علاوه بر از پیش دانستن طوفانها و پیشگویی مرگها و دیگر رخدادها به او اعطا شدهبود.
گفتهشده او متوکل را لعنت کرد و مرگ او را سه روز پس از این که خلیفه او را تحقیر کرده بود (با دستور دادن به او، به همراه هاشمیان و دیگر بزرگان، که از اسب پیاده شوند و جلوی او و فتح بن خاقان پیاده راه بروند) یا زندانی اش کرده بود پیش بینی کرده بود.
در حضور متوکل، او با گذاشتن زنی که به دروغ میگفت زینب دختر حسین بن علی است در لانه شیر برای اثبات این که شیرها به بازماندگان علی آسیب نمیزنند، نقاب از چهره او برداشت.
او شیری را که بر یک فرش نقش بسته بود زنده کرد و آنرا واداشت تا یک شعبده باز هندی را که به دستور متوکل، سعی کرد با حقههایش به او بی احترامی کند ببلعد؛
مشتی ماسه و سنگ را برای یک پیرو فقیرش به طلا تبدیل کرد.
بمبگذاری در حرم
در ۳ اسفند ۱۳۸۴، یک بمبگذاری در حرم عسکریین، به مقبره هادی و پسرش حسن عسکری آسیب فروانی زد، حمله دیگری نیز در ۲۳ خرداد ۱۳۸۶ انجام شد که منجر به تخریب دو مناره حرم شد.
آهنگ جنجالی
شاهین نجفی، خواننده رپ فارسی آهنگی را با نام نقی، در اردیبهشت ۹۱ منتشر کرد که جنجالهایی را برانگیخت، همزمان حکمی فقهی از آیتالله صافی گلپایگانی مرجع تقلید شیعیان در ایران منتشر شد که حکم اهانت کنندگان به امام را همان حکم مرتداعلام مینمود. اگرچه این حکم اساس متعلق به قبل از انتشار آهنگ شاهین نجفی بود، برخی تصور کردند این همان حکم به قتل شاهین نجفی است. این در حالی است که در فقه شیعه بین حکم و فتوا تفاوت روشنی وجود دارد. پس از این جنجال رسانهای بسیاری تصور کردند حکم قتل شاهین نجفی صادر شده است و در پی آن، شاهین نجفی تحت حفاظت امنیتی قرار گرفت. بسیاری از شخصیتهای دینی و مذهبی و حتی مخالفان جمهوری اسلامی مانند دکتر عبدالکریم سروش نیز این اقدام شاهین نجفی را تقبیح کردند. پس از این واکنشها شاهین نجفی تلاش کرد به نوعی کار خود را توجیه نماید و اعلام کرد ترانه نقی بهانهای برای بیان معضلات اجتماعی بودهاست
حرم عسکریین
حرم عسکریین، آرامگاه علی نقی امام دهم و حسن عسکری امام یازدهم شیعیان (معروف به عسکریین) در سامرای عراق است. همچنین نرجس خاتون، مادر حجت بن حسن (مهدی)، و حکیمه خاتون دختر محمد التقی (امام نهم شیعیان) و خواهر علی النقی (امام دهم شیعیان) نیز در حرم شهر سامرا بخاک سپرده شدهاند. سرداب غیبت (محل آغاز غیبت مهدی) نیز در ضلع غربی حرم سامرا واقع است. جعفر کذاب (جعفر تواب) و ابوهاشم جعفری نیز در همین مکان بخاک سپرده شدهاند.
تاریخچهٔ حرم
ابتدا تا پایان غیبت صغرا
شیعه و سنی هردو بر این باور اند که علی نقی در خانهٔ خود دفن شد و آن را از دلیل پسر یعقوب نصرانی خریدهبود. این خانه گسترده و بزرگ بوده و همهٔ صحن امروزی، را در بر میگیرد. حسن عسکری نیز در کنار پدرش بخاک سپرده شد. چون پیرامون آنجا پادگان نظامی بود، شیعیان و علاقهمندان به اهل بیت، پنهانی به زیارت میرفتند و پنجرهای سوی خیابان گشودهبودند که زایران زیارت میکردند و درون خانه نمیشدند. البته اداره آن دست شیعیان بود. حسن عسکری خادمی داشت ساکن این خانه، و هر بخش خانه که خراب میگشت مرمت مینمود. این وضع تا سال ۳۲۸ قمری و پایان غیبت صغرا ادامه داشت.
دوران آل حمدان
در سال ۳۳۳ هجری قمری (۳۲۴ خورشیدی) ساختمان جدید حرم توسط ابومحمد الحسن (مشهور به ناصرالدوله فرزند ابی الهیجا عبدالله آل حمدان) انجام گردید و برای عمرانی شهر سامرا تلاش کرد اما بر اثر جنگهایی که بین وی و معزالدوله روی داد، اغلب اقدامات عمرانی او نا تمام ماند.
دوران آل بویه
در سال ۳۷۷ هجری قمری (۳۶۶ هجری شمسی) پی از پیروزی معزالدوله بر ناصرالدوله آل حمدان و وقوع صلح بین آندو وارد شهر سامرا شد و اموال فراوانی را صرف آبادانی شهر نمود. گنبد بزرگی بر مزار هر دو امام ایجاد کرد، حرم مجللی دراطراف آن ساخت و صحنی برای آستانه احداث کرد. بدستور وی ضریحی از چوب ساروج تهیه و نصب گردید، سرداب غیبت مرمت گردید و تاسیسات ناصرالدوله آل حمدان را تکمیل نمود.
ارزش زیارت حرم عسکریین در باور شیعیان
شیخ توسی از ابوهاشم جعفری از حسن عسکری نقل میکند که: «مزارم در سرّ من رأی ایمنی برای هر دو گروه است.
در امالی و عدة الداعی نیز زیارت این جا را مهم شمردهاند.
بمبگذاری و ویرانی حرم عسکریین
اولین حمله در ۳ اسفند ۱۳۸۴ و دومین حمله پس از گذشت شانزده ماه در ۲۳ خرداد ۱۳۸۶ رخ داد.
در نخستین آفند بمبگذاران با به کارگیری بیش از دویست کیلوگرم تیانتی و کارگذاریاش در مرکز گنبد، گنبد و بخشی از گلدستههای طلایی حرم ویران شد. با این حمله گنبد فروریخت. . محمود احمدی نژاد رئیس جمهور وقت ایران و مراجع تقلید با صدور اطلاعیههایی جداگانهای این اقدام را محکوم کرده و نیز روز پنجشنبه را عزای عمومی اعلام کردند.
بمبگذاری در حرم عسکریین
اولین حمله در ۳ اسفند ۱۳۸۴ و دومین حمله پس از گذشت شانزده ماه در ۲۳ خرداد ۱۳۸۶ رخ داد.
در حمله اول بمبگذاران با به کارگیری بیش از ۲۰۰ کیلوگرم تی ان تی و کار گزاری آن در مرکز گنبد اقدام به تخریب گنبد و بخشی از گلدسته (مناره) های طلائی حرم کردند..
اولین واکنشها
محمود احمدی نژاد رئیس جمهور وقت ایران در اولین واکنش ضمن تسلیت این اقدام تروریستی به امام زمان، آیت الله خامنهای و عموم مسلمانان جهان اعلام کرد: اهانت به پیامبر اسلام و اصرار بر تخریب و انفجار اماکن متبرکه و مورد احترام مسلمانان از یک توطئه سازمان یافته علیه اسلام و مسلمانان نشان دارد. وی همچنین مسئول و مقصر مستقیم این حمله تروریستی را اشغالگران عراق نامید.
همچنین مراجع تقلید با صدور اطلاعیههای جداگانه هتک حرمت و حمله تروریستها به حرم امام هادی را محکوم و مسلمانان را به هوشیاری دعوت کرده و از آنان خواستند به دام تفرقه افکنی دشمنان اسلام نیفتند و نیز روز پنجشنبه را عزای عمومی اعلام کردند.
امامت
امامت یکی از اصول باور شیعیان است، که به جهت اهمیت آن شیعیان دوازدهامامی یا اثنی عشری خود را «امامیّه» میخوانند.
اصول تشیع: توحید، نبوت، معاد، عدل و امامت
شیعیان با استناد به حدیث نبوی: «من مات و لم یعرف امام زمانه، مات میتة جاهلیّة» (هر کس بمیرد درحالیکه امام زمانش را نشناسد، به مرگ جاهلیت مردهاست) شناخت امام را شرط قبول اسلام نزد پروردگار میدانند.
امامان
برخی شیعیان با استناد به حدیث جابر و برخی احادیث دیگر معتقدند ائمه ۱۲ فرد کاملاً مشخص هستند، که از جانب خدا و از زمان پیامبر با اسم معرفی شدهاند. این افراد عبارتاند از:
علی بن ابیطالب المرتضی ملقب به امیر المومنین، مرتضی و حیدر کرار
حسن بن علی المجتبی
حسین بن علی سیدالشهداء
علی بن حسین السجاد ملقب به زین العابدین
محمد بن علی الباقر
جعفر بن محمد الصادق
موسی بن جعفر الکاظم
علی بن موسی الرضا
محمد بن علی الجواد
علی بن محمد الهادی
حسن بن علی العسکری
حجت بن حسن المهدی ملقب به قائم، به اعتقاد شیعیان او زنده و حاضر است ولی در دوران غیبت ظاهر نیست.
شیعه دارای شاخههای دیگری نیز هست؛ مانند اسماعیلیه و زیدیه و فاطمیه که امامان آنان با شیعیان اثنی عشری تفاوتهایی دارد.
ویژگیها
۱- عصمت: امامان به همراه پیامبر اسلام و فاطمه زهرا ۱۴ نفر هستندکه به چهارده معصوم معروف است، که طبق برداشت ویژهای از آیه تطهیر (آیه ۳۳ سوره احزاب) هیچ گناه شرعی اعم از کبیره و صغیره را مرتکب نمیشوند. چرا که پیشوا و الگو در صورتی گفتار و رفتارش حجیّت دارد و لازم به تبعیت است، که یقین به صحت آن وجود داشته باشد. البته در مورد خطا و اشتباه اختلاف نظرهایی وجود دارد.
۲- عدالت: امامان هیچ حقی را از خود، دیگران و خدا -چنانکه در دین این حقوق تعریف شده و مطابق عقل محض باشد- پایمال نمیکنند.
۳- علم: امامان کاملاً به دین آگاهند و جواب تمام سؤالات دینی را میدانند. لذا در دوره بعد از پیامبر تفسیر دین بر عهده آنهاست. در خصوص نحوه تحصیل علم و حدود آن اختلافاتی وجود دارد.
۴- حجت: امامان حجت خدا در هر عصری هستند. بدین معنا که حیات دینی تماما و کاملاً در وجود آنها محقق شدهاست. لذا رفتار و کردار آنها بر سایرین حجت محسوب میشود. به عبارت دیگر مردم با مشاهده رفتار و گفتار آنها به آنچه در اسلام پسندیده و توصیه شدهاست، آگاه میشوند.
۵- ولایت: این مفهوم با مفهوم ولی و قطب نزد برخی گروههای متصوفه و تا حدودی امام اسماعیلیه مشترک است و تنها اختلاف در مورد شخص ولی است. این مفهوم هیچ گونه ارتباط ظاهری و باطنی با ولایت فقیه ندارد. همچنین بسیاری از اهل سنت ظاهری به علت همین مفهوم بسیاری اتهامات را به شیعیان نسبت میدهند. با توجه به باطنی بودن معنای آن توضیحی دشوار دارد.
از دید شیعیان پیامبر تمام ویژگیها و وظایف امام را دارد و علاوهبرآن وظیفه تشریع و تبلیغ دین و ویژگی ارتباط با خدا از طریق وحی را نیز دارد. همچنین فاطمه دختر پیامبر تمام ویژگیهای بالا را دارد و فقط مسئولیتهای زیر را ندارد.
مسئولیتها
۱- مرجعیت دینی: در دیدگاه شیعیان بعد از تکمیل تشریع دین توسط پیامبر، تفسیر آن و پاسخ به مسائل جدید پیش آمده نیازمند ویژگیهای خاصی است، که شامل علم کامل به دین و عصمت از گناه میشود. با توجه مجموعه صفات فوق تنها ائمه این ویژگی را دارند. آنها از جانب خدا مکلف هستند آموزههای دین را برای مردم تبیین کنند و مردم باید سؤالات خود را نزد آنها ببرند(سوره نساء، آیه ۸۳). این مرجعیت با مرجعیت مصطلح نزد شیعیان در حال حاضر در ظاهر شبیه و در باطن متفاوت است. اهل سنت اصلاً به چنین جایگاهی در دین اعتقاد ندارند و بر اشخاصی جائزالخطا بر اساس درک خود در امور دین فتوا میدهند.
۲- رهبری اجتماع(ولایت امر): این مفهوم بین شیعه و سنی مشترک است. بدین معنا که هر دو ضرورت وجود چنین جایگاهی در جامعه مسلمانان اتفاق نظر دارند. اهل سنت آن را اصطلاحا «خلیفه» میخوانند. آنها برای شخص خلیفه صفت و ویژگی خاصی قائل نیستند و راه انتخاب او را «شورا»، «اهل حل و عقد»، «وصایت» و برخی «غلبه»می دانند. در طول تاریخ بسیاری خلفا با شمشیر این مقام را تصاحب کردهاند. بسیاری از خلفا را کشته و بسیاری را عزل کردهاند. اما نزد شیعه ولی باید عالم، عادل، معصوم و حجت باشد، تا بر طبق دین حکم کند و بر هیچ کس ظلمی روا نکند و مردم مکلف به اطاعت از او هستند.(سوره نساء آیه ۵۹) این مفهوم با ولایت فقیه تشابه ظاهری و تفاوت باطنی دارد. شیعیان معتقدند که شخص ولی امر توسط خدا برگزیده شده و توسط نبی و یا امام قبلی به مردم معرفی میشود. خلافت حق اوست و سایرین که این مسند را گرفتهاند، غاصب هستند. استناد آنها به آیه «انما ولیکم الله و رسوله و الذین ءامنوا الذین یقیمون الصلوة و یؤتون الزکوةوهم راکعون» است.(جز این نیست که سرپرست شمافقط خداست و پیامبرش و کسانی که ایمان آورده و در حال رکوع نماز زکات میدهند.)(سوره مائده آیه ۵۵) شیعیان مصداق این آیه را علی میدانند، که در حال رکوع نماز به فقیری انگشتری خود را بخشید. ضمن آنکه این آیه سیاست اقتصادی- اجتماعی ولایت شیعی را نیز مشخص میسازد و بین اصلاح امور مسلمین و دستگیری آنان با عبادت خدا جمع میکند.
۳- ولایت باطنی: این مسئولیت به مفهوم باطنی ولایت مرتبط میشود و اموری نظیر شفاعت را شامل میشود.
1:37 pm
کاربرد برنامه نویسی
زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف دادهها، و عملیات یا تبدیلهایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم میکند. یک برنامه نویس از انتزاعات آماده در زبان استفاده میکند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از سادهترین عناصر موجود بیان میشوند(مفاهیم ابتدایی نامیده میشوند).

زبانهای برنامه نویسی با غالب زبانهای انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبانهای طبیعی برای ارتباط با دیگر انسانها، نویسندگان و گویندگان میتوانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانهها "دقیقاً آنچه که به آنها گفته شده را انجام میدهند." و نمیتوانند "بفهمند" که نویسنده دقیقاً چه کدی مد نظر نویسنده بودهاست] البته امروزه برنامههایی برای انجام این کار تولید شدهاند و تلاشهای بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص میکند. برنامههای یک رایانه ممکن است در یک فرایند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامهها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامهای استفاده میشود، زبان اسکریپت میگویند. بسیاری از زبانها کنار گذاشته شدهاند، برای رفع نیازهای جدید جایگزین شدهاند، با برنامههای دیگر ترکیب شدهاند و در نهایت استعمال آنها متوقف شدهاست. با وجود اینکه تلاشهایی برای طراحی یک زبان رایانه" کامل" شدهاست که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبانهای رایانهای گسترده از گستردگی زمینههایی که زبانها استفاده میشوند، ناشی میشود:
محدوده برنامهها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستمهای بسیار بزرگ نوشته شده توسط صدها برنامه نویس است
توانایی برنامه نویسها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفهایهایی که با پیچیدگی قابل توجهی کنار میآیند.
برنامهها باید سرعت، اندازه و سادگی را بسته به سیستمها از ریزپردازندها تا ابر رایانهها متناسب نگه دارند.
برنامهها ممکن است یک بار نوشته شوند و تا نسلها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند.
در نهایت، برنامه نویسها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.
یک سیر رایج در گسترش زبانهای برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبانهای برنامه نویسی اولیه به سختافزار رایانه گره خورده بودند. همانطور که زبانهای برنامه نویسی جدید گسترش پیدا کردهاند، ویژگیهایی به برنامهها افزوده شده که به برنامه نویس اجازه دهد که ایدههایی که از ترجمه ساده به دستورات سختافزار دورتر هستند نیز استفاده کند. چون برنامه نویسها کمتر به پیچیدگی رایانه محدود شدهاند، برنامههای آنها میتواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را میدهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازندههای زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبانهای اختصاصی برنامه نویسی پیشنهاد شدهاند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.
المانها
تمام زبانهای بزنامه نویسی تعدادی بلوکهای ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معناشناسی و دستوری تعریف میشوند که ساختار و معنای مربوطه را توضیح میدهند.
دستور(
syntax)
فرم سطحی یک زبان برنامه نویسی دستور آن نامیده میشود. غالب زبانهای برنامه نویسی کاملاً متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده میکنند. از طرف دیگر، برنامههایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبلها برای مشخص کردن برنامه استفاده میکنند. دستور یک زبان ترکیبات ممکن سمبلها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص میکند. معنایی که به یک ترکیب سمبلها داده میشود با معناشناسی اداره میشود(قراردادی یا نوشته شده در پیاده سازی منبع). از آنجا که اغلب زبانها متنی هستند، این مقاله دستور متنی را مورد بحث قرار میدهد.
دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف میشوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom ::= number | symbol number ::= [+-]?['۰'-'۹']+ symbol ::= ['A'-'Za'-'z'].* list ::= '(' expression* ')' این گرامر موارد ذیل را مشخص میکند:
یک عبارت یا atom است و یا یک لیست
یک atom یا یک عدد است و یا یک سمبل
یک عدد دنباله ناشکستهای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی میتواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) میآید.
یک لیست تعدادی پرانتز است که میتواند صفر یا چند عبارت در خود داشته باشد.
"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثالهایی هستند از دنبالههای خوش فرم در این گرامر.
همه برنامههایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامههای درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیاده سازی) به خطای ترجمه و یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامههایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقاً مطلوب نویسنده آن نبوده باشد.
به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد و یا ممکن است جمله نادرست باشد:
"ایدههای بی رنگ سبز با خشم میخوابند."از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
"جان یک مجرد متاهل است." از نظر دستوری درست است، ولی معنایی را بیان میکند که نمیتواند درست باشد.
این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام میدهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);
گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی میتواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبانهای برنامه نویسی میتواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.
معناشناسی ایستا
معناشناسی ایستا محدودیتهایی بر روی ساختار مجاز متنها تعیین میکند که بیان آنها در فرمول دستوری استاندارد مشکل و یا غیر ممکن است. مهمترین این محدودیتها به وسیله سیستم نوع گذاری انجام میشود.
سیستم نوع گذاری
یک سیستم نوع گذاری مشخص میکند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی میکند، چگونه میتواند آن نوعها را تغییر دهد و رفتار متقابل آنها چگونهاست. این کارعموما توضیح داده ساختارهایی که میتوانند در آن زبان ایجاد شوند را شامل میشود. طراحی و مطالعه سیستمهای نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.
زبانهای نوع گذاری شده و بدون نوع گذاری
یک زبان نوع گذاری شدهاست اگر مشخصات هر عملیات، نوع دادههای قابل اجرا توسط آن را با نشان دادن نوعهایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشتهاست. در غالب زبانهای برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبانهای برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامهها رد کنند. در برخی زبانها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامهها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبانهای نوع دار زبانهای تک نوعند. این زبانها غالباً اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالباً رشتههای کاراکتری که هم برای دادههای عددی و هم برای دادههای سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبانهای اسمبلی، این امکان را میدهد که هر عملیاتی روی هر دادهای انجام شود، که معمولاً دنبالهای از بیتها با طولهای متفاوت در نظر گرفته میشوند. زبانهای سطح بالا که بی نوع هستند شامل زبانهای ساده رایانهای و برخی از انواع زبانهای نسل چهارم.
در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی میشوند(چک کردن یا رد کردن تمام عملیاتها)، غالب زبانهای امروزی درجهای از نوع گذاری را فراهم میکنند. بسیاری از زبانهای تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم میکنند.
نوع گذاری ایستا و متحرک
در نوع گذاری ایستا تمام عبارات نوعهای خود را قبل از اجرای برنامه تعیین میکنند(معمولاً در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمیتوانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.
زبانهای نوع گذاری شده ایستا میتوانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحاً نوعها را در جایگاههای منتنی مشخص مینویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریفها را بر اساس متن استنباط میکند. غالب زبانهای مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری میشوند
نوع گذاری قوی و ضعیف
نوع گذاری ضعیف این امکان را ایجاد میکند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.
نوع گذاری قوی مانع رخ دادن مشکل فوق میشود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا میشود. زبانهایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته میشوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبانها اشاره میکند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را میدهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل میکند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشتهای از حروف باشد. چنین تبدیلات ضمنی غالباً مفیدند، اما خطاهای برنامه نویسی را پنهان میکنند.
قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض میشوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار میبرند و منظورشان قوی، ایستایی نوع گذاری شدهاست، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شدهاست. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده میشود.
معناشناسی اجرا
وقتی که داده مشخص شد، ماشین باید هدایت شود تا عملیاتها را روی داده انجام دهد. معناشناسی اجرا ی یک زبان تعیین میکند که چگونه و چه زمانی ساختارهای گوناگون یک زبان باید رفتار برنامه را ایجاد کنند.
برای مثال، معناشناسی ممکن است استراتژی را که بویسله آن عبارات ارزیابی میشوند را تعریف کند و یا حالتی را که ساختارهای کنترلی تحت شرایطی دستورها را اجرا میکنند.
کتابخانه هسته
اغلب زبانهای برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده میشوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازیهای زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتمها، داده ساختارها و مکانیزمهای ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار میکنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هستهای را مشخص میکنند که باید در تمام پیاده سازیها موجود باشند، و در زبانهای استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبانها به گونهای تعریف شدهاند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونهای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونهای از کلاس BlockContext کتابخانه میسازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان میباشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمیکنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.
عمل
طراحان زبان و کاربران باید مصنوعاتی ایجاد کنند تا برنامه نویسی را در عمل ممکن سازند و کنترل کنند. مهمترین این مصنوعات خصوصیات و پیاده سازیهای زبان هستند.
خصوصیات
یک زبان برنامه نویسی باید تعریفی فراهم کند که کاربران و پیاده کنندههای زبان میتوانند از آن استفاده کنند تا مشخص کنند که رفتار یک برنامه درست است. با داشتن کد منبع: خصوصیات یک زبان برنامه نویسی چندین قالب میتواند بگیرد، مانند مثالهای زیر:
تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص میشود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبانهای مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.
پیاده سازی
پیاده سازی یک زبان برنامه نویسی امکان اجرای آن برنامه را روی پیکربندی مشخصی از سختافزار و نرمافزار را فراهم میکند. بطور وسیع، دو راه رسیدن به پیاده سازی زبان برنامه نویسی وجود دارد. کامپایل کردن و تفسیر کردن. بطور کلی با هر بک از ابن دو روش میتوان یک زبان را پیاده سازی کرد.
خروجی یک کامپایلر ممکن است با سختافزار و یا برنامهای به نام مفسر اجرا شود. در برخی پیاده سازیها که از مفسر استفاده میشود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده سازیهای زبان برنامه نویسی بیسیک کامپایل میکنند و سپس کد را خط به خط اجرا میکنند.
برنامههایی که مستقیماً روی سختافزار اجرا میشوند چندین برابر سریعتر از برنامههایی که با کمک نرمافزار اجرا میشوند، انجام میشوند.
یک تکنیک برای بهبود عملکرد برنامههای تفسیر شده کامپایل در لحظه آن است. در این روش ماشین مجازی، دقیقاً قبل از اجرا، بلوکهای کدهای بایتی که قرار است استفاده شوند را برای اجرای مستقیم روی سختافزار ترجمه میکند.
تاریخچه
پیشرفتهای اولیه
اولین زبان برنامه نویسی به قبل از رایانههای مدرن باز میگردد. قرن ۱۹ دستگاههای نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثالهایی از زبانهای برنامه نویسی با حوزه مشخص شناخته میشوند. با شروع قرن بیستم، پانچ کارتها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتمها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.
در دهه ۴۰، اولین رایانههای دیجیتال که توسط برق تغذیه میشدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سالهای ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.
کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامههای زبان ماشین استفاده میکردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده میشوند جایگزین شد. در سالهای بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخههای به روز شده این برنامهها همچنان مورد استفاده قرار میگیرند، و هر کدام قویا توسعه زبانهای بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبانهای برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبانهای برنامه نویسی به شدت متاثر از محدودیتهای رابط بودند.
پالایش
دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثالهای عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبههای آن بهینه سازی ایدههای اولیه نسل سوم زبان برنامه نویسی بود:
APL برنامه نویسی آرایهای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایدههای خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی میکرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به
عنوان اولین زبان کاملاً شئ گرا معرفی شد.
C بین سالهای ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبانهای برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.
هر یک از این زبانها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبانها از تبار حداقل یکی از زبانهای فوق به شمار میآیند.
دهههای ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبانهای برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.
"ادسگر دیکسترا" در نامهای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبانهای سطح بالا حذف شود.
در دهههای ۶۰ و ۷۰ توسعهٔ تکنیکهایی صورت گرفت که اثر یک برنامه را کاهش میداد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.
یکپارچگی و رشد
دهه ۸۰ سالهای یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینههای گزافی صرف تحقیق در مورد زبان نسل پنجم میشد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثالهای جدید، تمام این تلاشها ایدههایی که در دهههای قبل حلق شده بودند را بهتر کرد.
یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستمهای بزرگ از طریق مدولها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستمهای مدولی برجستهای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبانهای دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستمهای مدولی غالباً با ساختارهای برنامه نویسی عام همراه شدهاند.
رشد سریع اینترنت در میانه دهه ۹۰ فرصتهای ایجاد زبانهای جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وبگاههای دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعهها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثالهای موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا میکند، هم در تحقیقات و هم در صنعت. جهتهای فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونههای جدید مدولی(mixin، نمایندهها، جنبهها) و تجمع پایگاه داده.
۴GLها نمونهای از زبانهایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه دادههای اسکالر را برگردانند، مجموعههایی را تغییر داده و بر میگردانند که برای اکثر زبانها متعارفند. Perl برای مثال، با "مدرک اینجا" خود میتواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.
سنجش استفاده از زبان
مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفادهاست، و اینکه کاربرد چه معنی میدهد با توجه به زمینه تغییر میکند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبانها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالباً روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامههای کاربردی، C در برنامههای تعبیه شده و سیستمهای عامل؛ و بقیه برنامهها معمولاً برای نوشتن انواع دیگر برنامهها کاربرد دارند. روشهای مختلفی برای سنجش محبوبیت زبانها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شدهاست:
شمارش تعداد تبلیغات شغلی که از آن زبان نام میبرند.
تعداد کتابهای آموزشی و شرح دهندهٔ آن زبان که فروش رفتهاست.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبانهایی را که در جستجوها کمتر پیدا میشوند دست کم گرفته شوند.
شمارش ارجاعهای زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.
طبقه بندیها هیچ برنامه غالبی برای دسته بندی زبانهای برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبانها معمولاً با ترکیب المانهای چند زبان پیشینه بوجود میآیند که هربار ایدههای جدید درگردشند. ایدههایی که در یک زبان ایجاد میشوند در یک خانواده از زبانهای مرتبط پخش میشوند، و سپس از بین خلاهای بین خانوادهها منتقل شده و در خانوادههای دیگر ظاهر میشوند.
این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر میکند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق میکند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.
در نگاه کلی، زبانهای برنامه نویسی به مثالهای برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم میشوند. مثالها شامل برنامه نویسی رویهای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبانها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبانهای برنامه نویسی ممکن است همه منظوره باشند، زبانهای برنامه نویسی سیستمی، زبانهای اسکریپتی، زبانهای محدوده مشخص، زبانهای همزمان/ گسترده(و یا ترکیب اینها). برخی زبانهای همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شدهاند.
یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثالهای برنامه نویسی دسته بندی شود. برای مثال، غالب زبانهای برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده میکنند، در حالیکه تعداد کمی این کار را نمیکنند. سایر زبانها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
زبان برنامه نویسی یک مکانیزم ساخت یافته برای تعریف دادهها، و عملیات یا تبدیلهایی که ممکن است بطور اتوماتیک روی آن داده انجام شوند، فراهم میکند. یک برنامه نویس از انتزاعات آماده در زبان استفاده میکند تا مفاهیم به کار رفته در محاسبات را بیان کند. این مفاهیم به عنوان یک مجموعه از سادهترین عناصر موجود بیان میشوند(مفاهیم ابتدایی نامیده میشوند).

زبانهای برنامه نویسی با غالب زبانهای انسانی تفاوتی دارد و آن این است که نیاز به بیان دقیق تر و کامل تری دارد. هنگام استفاده از زبانهای طبیعی برای ارتباط با دیگر انسانها، نویسندگان و گویندگان میتوانند مبهم باشند و اشتباهات کوچک داشته باشند، و همچنان انتظار داشته باشند که مخاطب آنها متوجه شده باشد. اگرچه، مجازا، رایانهها "دقیقاً آنچه که به آنها گفته شده را انجام میدهند." و نمیتوانند "بفهمند" که نویسنده دقیقاً چه کدی مد نظر نویسنده بودهاست] البته امروزه برنامههایی برای انجام این کار تولید شدهاند و تلاشهای بسیاری در این زمینه انجام شده ولی هنوز به نتیجهٔ رضایت بخشی نرسیده است[. ترکیب تعریف زبان، یک برنامه، و ورودی برنامه بطور کامل رفتار خروجی را به هنگام اجرای برنامه (در محدوده کنترل آن برنامه) مشخص میکند. برنامههای یک رایانه ممکن است در یک فرایند ناپیوسته بدون دخالت انسان اجرا شوند، یا یک کاربر ممکن است دستورات را در یک مرحله فعل و انفعال مفسر تایپ کند.در این حالت "دستور"ها همان برنامهها هستند، که اجرای آنها زنجیروار به هم مرتبطند.به زبانی که برای دستور دادن به برنامهای استفاده میشود، زبان اسکریپت میگویند. بسیاری از زبانها کنار گذاشته شدهاند، برای رفع نیازهای جدید جایگزین شدهاند، با برنامههای دیگر ترکیب شدهاند و در نهایت استعمال آنها متوقف شدهاست. با وجود اینکه تلاشهایی برای طراحی یک زبان رایانه" کامل" شدهاست که تمام اهداف را تحت پوشش قرار دهد، هیچ یک نتوانستند بطور کلی این جایگاه را پر کنند. نیاز به زبانهای رایانهای گسترده از گستردگی زمینههایی که زبانها استفاده میشوند، ناشی میشود:
محدوده برنامهها از متون بسیار کوچک نوشته شده توسط افراد عادی تا سیستمهای بسیار بزرگ نوشته شده توسط صدها برنامه نویس است
توانایی برنامه نویسها: از تازه کارهایی که بیش از هر چیز به سادگی نیاز دارند تا حرفهایهایی که با پیچیدگی قابل توجهی کنار میآیند.
برنامهها باید سرعت، اندازه و سادگی را بسته به سیستمها از ریزپردازندها تا ابر رایانهها متناسب نگه دارند.
برنامهها ممکن است یک بار نوشته شوند و تا نسلها تغییر نکنند، و یا ممکن است پیوسته اصلاح شوند.
در نهایت، برنامه نویسها ممکن است در علایق متفاوت باشند: آنها ممکن است به بیان مسائل با زبانی خاص خو گرفته باشند.
یک سیر رایج در گسترش زبانهای برنامه نویسی این است که قابلیت حل مسائلی با درجات انتزاعی بالاتری را اضافه کنند. زبانهای برنامه نویسی اولیه به سختافزار رایانه گره خورده بودند. همانطور که زبانهای برنامه نویسی جدید گسترش پیدا کردهاند، ویژگیهایی به برنامهها افزوده شده که به برنامه نویس اجازه دهد که ایدههایی که از ترجمه ساده به دستورات سختافزار دورتر هستند نیز استفاده کند. چون برنامه نویسها کمتر به پیچیدگی رایانه محدود شدهاند، برنامههای آنها میتواند محاسبات بیشتری با تلاش کمتر از سوی برنامه نویس انجام دهند. این به آنها این امکان را میدهد که کارایی بیشتردر واحد زمان داشته باشند. "پردازندههای زبان طبیعی" به عنوان راهی برای ازبین بردن نیاز به زبانهای اختصاصی برنامه نویسی پیشنهاد شدهاند. هرچند، این هدف دور است و فواید آن قابل بحث است. "ادسگر دیجسترا" موافق بود که استفاده از یک زبان رسمی برای جلوگیری از مقدمه سازی ساختارهای بی معنی واجب است، و زبان برنامه نویسی طبیعی را با عنوان "احمقانه" رد کرد، "آلن پرلیس" نیز مشابها این ایده را رد کرد. مطابق با متدولوژی نامتجانس استفاده شده توسط langpop.com در سال ۲۰۰۸، ۱۲ زبان پرکاربرد عبارتند از: C, C++, C#, Java, JavaScript, Perl, PHP, Python, Ruby, Shell, SQL, and Visual Basic.
المانها
تمام زبانهای بزنامه نویسی تعدادی بلوکهای ابتدایی برای توضیح داده و پردازش یا تبدیل آنها(مانند جمع کردن دو عدد با انتخاب یک عضو از یک مجموعه)دارند. این " عناصرابتدایی" بوسیله قوانین معناشناسی و دستوری تعریف میشوند که ساختار و معنای مربوطه را توضیح میدهند.
دستور(
syntax)
فرم سطحی یک زبان برنامه نویسی دستور آن نامیده میشود. غالب زبانهای برنامه نویسی کاملاً متنی اند؛ و از دنبالهٔ متون شامل کلمات، اعداد، نشانگذاری، بسیار شبیه زبان نوشتاری طبیعی استفاده میکنند. از طرف دیگر، برنامههایی نیز وجود دارند که بیشتر گرافیکی اند، و از روابط بصری بین سمبلها برای مشخص کردن برنامه استفاده میکنند. دستور یک زبان ترکیبات ممکن سمبلها برای ایجاد یک برنامهٔ درست را از نظر دستوری مشخص میکند. معنایی که به یک ترکیب سمبلها داده میشود با معناشناسی اداره میشود(قراردادی یا نوشته شده در پیاده سازی منبع). از آنجا که اغلب زبانها متنی هستند، این مقاله دستور متنی را مورد بحث قرار میدهد.
دستور زبان برنامه نویسی معمولاً بوسیله ترکیب عبارات معین(برای ساختار لغوی) و فرم توضیح اعمال(برای ساختار گرامری) تعریف میشوند. متن زیر یک گرامر ساده، به زبان lisp است: expression ::= atom | list atom ::= number | symbol number ::= [+-]?['۰'-'۹']+ symbol ::= ['A'-'Za'-'z'].* list ::= '(' expression* ')' این گرامر موارد ذیل را مشخص میکند:
یک عبارت یا atom است و یا یک لیست
یک atom یا یک عدد است و یا یک سمبل
یک عدد دنباله ناشکستهای از یک یا تعداد بیشتری اعداد دهدهی است، که یک علامت مثبت و یا منفی میتواند پیش از آن بیاید.
یک سمبل حرفی است که بعد از هیچ یا تعدادی کاراکتر (جز فاصله) میآید.
یک لیست تعدادی پرانتز است که میتواند صفر یا چند عبارت در خود داشته باشد.
"۱۲۳۴۵"، "()"، "(a b c۲۳۲ (۱))" مثالهایی هستند از دنبالههای خوش فرم در این گرامر.
همه برنامههایی که از لحاظ دستوری درست هستند، از نظر معنا درست نیستند. بسیاری از برنامههای درست دستوری، بد فرم اند، با توجه به قوانین زبان؛ و ممکن است (بسته به خصوصیات زبان و درست بودن پیاده سازی) به خطای ترجمه و یا استثنا(exception) منتج شود. در برخی موارد، چنین برنامههایی ممکن است رفتار نامشخصی از خود نشان دهند. حتی اگر یک برنامه در یک زبان به خوبی بیان شده باشد، ممکن است دقیقاً مطلوب نویسنده آن نبوده باشد.
به عنوان مثال در زبان طبیعی، ممکن نیست به برخی از جملات درست از لحاظ گرامری، معنای خاصی اطلاق کرد و یا ممکن است جمله نادرست باشد:
"ایدههای بی رنگ سبز با خشم میخوابند."از نظر دستوری خوش فرم است ولی معنای مورد قبولی ندارد.
"جان یک مجرد متاهل است." از نظر دستوری درست است، ولی معنایی را بیان میکند که نمیتواند درست باشد.
این قسمت از زبان C از نظر دستوری درست است، اما دستوری را انجام میدهد که از نظرمعنایی تعریف نشده است(چون p یک اشاره گر خالی است، عمل p->real,p->im معنای خاصی ندارد.) complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);
گرامر مورد نیاز برای مشخص کردن یک زبان برنامه نویسی میتواند با جایگاهش در "سلسله مراتب چامسکی" طبقه بندی شود. دستور اغلب زبانهای برنامه نویسی میتواند بوسیله یک گرامر نوع ۲ مشخص گردد، برای مثال، گرامرهای مستقل از متن.
معناشناسی ایستا
معناشناسی ایستا محدودیتهایی بر روی ساختار مجاز متنها تعیین میکند که بیان آنها در فرمول دستوری استاندارد مشکل و یا غیر ممکن است. مهمترین این محدودیتها به وسیله سیستم نوع گذاری انجام میشود.
سیستم نوع گذاری
یک سیستم نوع گذاری مشخص میکند که یک زبان برنامه نویسی چگونه مقادیر و عبارات را در نوع(type) دسته بندی میکند، چگونه میتواند آن نوعها را تغییر دهد و رفتار متقابل آنها چگونهاست. این کارعموما توضیح داده ساختارهایی که میتوانند در آن زبان ایجاد شوند را شامل میشود. طراحی و مطالعه سیستمهای نوع گذاری بوسیله ریاضیات قراردادی را تئوری نوع گذاری گویند.
زبانهای نوع گذاری شده و بدون نوع گذاری
یک زبان نوع گذاری شدهاست اگر مشخصات هر عملیات، نوع دادههای قابل اجرا توسط آن را با نشان دادن نوعهایی که برای آنها قابل اجرا نیست، تعیین کند. برای مثال، "این متن درون گیومه قرار دارد" یک رشتهاست. در غالب زبانهای برنامه نویسی، تقسیم یک رشته با یک عدد معنایی ندارد. در نتیجه غالب زبانهای برنامه نویسی مدرن ممکن است اجرای این عملیات را توسط برنامهها رد کنند. در برخی زبانها، عبارات بی معنی ممکن است هنگام ترجمه(compile) پیدا شود(چک کننده نوع ایستا)، و توسط کامپایلر رد شود، در حالی که در سایر برنامهها، هنگام اجرا پیدا شود.(چک کننده نوع دینامیک) که به استثنای در حال اجرا منتج شود(runtime exception). حالت خاص زبانهای نوع دار زبانهای تک نوعند. این زبانها غالباً اسکریپتی و یا مارک آپ هستند، مانند rexx وSGML و فقط یک داده گونه دارند—غالباً رشتههای کاراکتری که هم برای دادههای عددی و هم برای دادههای سمبلی کاربرد دارند. در مقابل، یک زبان بدون نوع گذاری، مثل اکثر زبانهای اسمبلی، این امکان را میدهد که هر عملیاتی روی هر دادهای انجام شود، که معمولاً دنبالهای از بیتها با طولهای متفاوت در نظر گرفته میشوند. زبانهای سطح بالا که بی نوع هستند شامل زبانهای ساده رایانهای و برخی از انواع زبانهای نسل چهارم.
در عمل، در حالیکه تعداد بسیار کمی از دیدگاه نظریه نوع، نوع گذاری شده تلقی میشوند(چک کردن یا رد کردن تمام عملیاتها)، غالب زبانهای امروزی درجهای از نوع گذاری را فراهم میکنند. بسیاری از زبانهای تولیدکننده راهی را برای گذشتن یا موقوف کردن سیستم نوع فراهم میکنند.
نوع گذاری ایستا و متحرک
در نوع گذاری ایستا تمام عبارات نوعهای خود را قبل از اجرای برنامه تعیین میکنند(معمولاً در زمان کامپایل). برای مثال، ۱ و (۲+۲) عبارات عددی هستند؛ آنها نمیتوانند به تابعی که نیاز به یک رشته دارد داده شوند، یا در متغیری که تعریف شده تا تاریخ را نگه دارد، ذخیره شوند.
زبانهای نوع گذاری شده ایستا میتوانند با مانیفست نوع گذاری شوند یا با استفاده از نوع استنباط شوند. در حالت اول، برنامه نویس بیشتر صریحاً نوعها را در جایگاههای منتنی مشخص مینویسد(برای مثال، در تعریف متغیرها). در حالت دوم، کامپایلر نوع عبارات و تعریفها را بر اساس متن استنباط میکند. غالب زبانهای مسیر اصلی(mainstream) ایستا نوع گذاری شده، مانند C#,C++ و Java، با مانیفست نوع گذاری میشوند
نوع گذاری قوی و ضعیف
نوع گذاری ضعیف این امکان را ایجاد میکند که با متغیری به جای متغیری دیگر برخورد شود، برای مثال رفتار با یک رشته به عنوان یک عدد. این ویژگی بعضی اوقات ممکن است مفید باشد، اما ممکن است باعث ایجاد برخی مشکلات برنامه شود که موقع کامپایل و حتی اجرا پنهان بمانند.
نوع گذاری قوی مانع رخ دادن مشکل فوق میشود. تلاش برای انجام عملیات روی نوع نادرست متغیر منجر به رخ دادن خطا میشود. زبانهایی که نوع گذاری قوی دارند غالباً با نام "نوع-امن" و یا امن شناخته میشوند. تمام تعاریف جایگزین برای "ضعیف نوع گذاری شده" به زبانها اشاره میکند، مثل perl, JavaScript, C++، که اجازه تعداد زیادی تبدیل نوع داخلی را میدهند. در جاوااسکریپت، برای مثال، عبارت ۲*x به صورت ضمنی x را به عدد تبدیل میکند، و این تبدیل موفقیت آمیز خواهد بود حتی اگر x خالی، تعریف نشده، یک آرایه، و یا رشتهای از حروف باشد. چنین تبدیلات ضمنی غالباً مفیدند، اما خطاهای برنامه نویسی را پنهان میکنند.
قوی و ایستا در حال حاضر عموماً دو مفهوم متعامد فرض میشوند، اما استفاده در ادبیات تفاوت دارد، برخی عبارت "قوی نوع گذاری شده" را به کار میبرند و منظورشان قوی، ایستایی نوع گذاری شدهاست، و یا، حتی گیچ کننده تر، منظورشان همان ایستایی نوع گذاری شدهاست. بنابراین C هم قوی نوع گذاری شده و هم ضعیف و ایستایی نوع گذاری شده نامیده میشود.
معناشناسی اجرا
وقتی که داده مشخص شد، ماشین باید هدایت شود تا عملیاتها را روی داده انجام دهد. معناشناسی اجرا ی یک زبان تعیین میکند که چگونه و چه زمانی ساختارهای گوناگون یک زبان باید رفتار برنامه را ایجاد کنند.
برای مثال، معناشناسی ممکن است استراتژی را که بویسله آن عبارات ارزیابی میشوند را تعریف کند و یا حالتی را که ساختارهای کنترلی تحت شرایطی دستورها را اجرا میکنند.
کتابخانه هسته
اغلب زبانهای برنامه نویسی یک کتابخانه هسته مرتبط دارند(گاهی اوقات "کتابخانه استاندارد" نامیده میشوند، مخصوصا وقتی که به عنوان قسمتی از یک زبان استاندارد ارائه شده باشد)، که به طور قراردادی توسط تمام پیاده سازیهای زبان در دسترس قرار گرفته باشند. کتابخانه هسته معمولاً تعریف الگوریتمها، داده ساختارها و مکانیزمهای ورودی و خروجی پرکاربرد را در خود دارد. کاربران یک زبان، غالباً با کتابخانه هسته به عنوان قسمتی از آن رفتار میکنند، اگرچه طراحان ممکن است با آن به صورت یک مفهوم مجزا رفتار کرده باشند. بسیاری از خصوصیات زبان هستهای را مشخص میکنند که باید در تمام پیاده سازیها موجود باشند، و در زبانهای استاندارد شده این کتابخانه هسته ممکن است نیاز باشد. بنابراین خط بین زبان و کتابخانه هسته آن از زبانی به زبان دیگر متفاوت است. درواقع، برخی زبانها به گونهای تعریف شدهاند که برخی از ساختارهای دستوری بدون اشاره به کتابخانه هسته قابل استفاده نیستند. برای مثالف در جاوا، یک رشته به عنوان نمونهای از کلاس “java.lang.String” تعریف شده است؛ مشابها، در سمال تاک(smalltalk) یک تابع بی نام(یک "بلاک") نمونهای از کلاس BlockContext کتابخانه میسازد. بطور معکوس، Scheme دارای چندین زیرمجموعه مرتبط برای ایجاد سایر ماکروهای زبان میباشد، و در نتیجه طراحان زبان حتی این زحمت را نیز تحمل نمیکنند که بگویند کدام قسمت زبان به عنوان ساختارهای زبان باید پیاده سازی شوند، و کدام یک به عنوان بخشی ازکتابخانه.
عمل
طراحان زبان و کاربران باید مصنوعاتی ایجاد کنند تا برنامه نویسی را در عمل ممکن سازند و کنترل کنند. مهمترین این مصنوعات خصوصیات و پیاده سازیهای زبان هستند.
خصوصیات
یک زبان برنامه نویسی باید تعریفی فراهم کند که کاربران و پیاده کنندههای زبان میتوانند از آن استفاده کنند تا مشخص کنند که رفتار یک برنامه درست است. با داشتن کد منبع: خصوصیات یک زبان برنامه نویسی چندین قالب میتواند بگیرد، مانند مثالهای زیر:
تعریف صریح دستور، معناشناسی ایستا، ومعناشناسی اجرای زبان. درحالیکه دستور معمولاً با یک معناشناسی قراردادی مشخص میشود، تعاریف معناشناسی ممکن است در زبان طبیعی نوشته شده باشند (مثل زبان C)، یا معناشناسی قراردادی(مثل StandardML ,Scheme)
توضیح رفتار یک مترجم برای زبان(مثل C,fortran). دستور و معناشناسی یک زبان باید از این توضیح استنتاج شوند، که ممکن است به زبان طبیعی یا قراردادی نوشته شود.
پیاده سازی منبع یا مدل. گاهی اوقات در زبانهای مشخص شده(مثل: prolog,ANSI REXX).دستور و معناشناسی صریحاً در رفتار پیاده سازی مدل موجودند.
پیاده سازی
پیاده سازی یک زبان برنامه نویسی امکان اجرای آن برنامه را روی پیکربندی مشخصی از سختافزار و نرمافزار را فراهم میکند. بطور وسیع، دو راه رسیدن به پیاده سازی زبان برنامه نویسی وجود دارد. کامپایل کردن و تفسیر کردن. بطور کلی با هر بک از ابن دو روش میتوان یک زبان را پیاده سازی کرد.
خروجی یک کامپایلر ممکن است با سختافزار و یا برنامهای به نام مفسر اجرا شود. در برخی پیاده سازیها که از مفسر استفاده میشود، مرز مشخصی بین کامپایل و تفسیر وجود ندارد. برای مثال، برخی پیاده سازیهای زبان برنامه نویسی بیسیک کامپایل میکنند و سپس کد را خط به خط اجرا میکنند.
برنامههایی که مستقیماً روی سختافزار اجرا میشوند چندین برابر سریعتر از برنامههایی که با کمک نرمافزار اجرا میشوند، انجام میشوند.
یک تکنیک برای بهبود عملکرد برنامههای تفسیر شده کامپایل در لحظه آن است. در این روش ماشین مجازی، دقیقاً قبل از اجرا، بلوکهای کدهای بایتی که قرار است استفاده شوند را برای اجرای مستقیم روی سختافزار ترجمه میکند.
تاریخچه
پیشرفتهای اولیه
اولین زبان برنامه نویسی به قبل از رایانههای مدرن باز میگردد. قرن ۱۹ دستگاههای نساجی و متون نوازنده پیانو قابل برنامه نویسی داشت که امروزه به عنوان مثالهایی از زبانهای برنامه نویسی با حوزه مشخص شناخته میشوند. با شروع قرن بیستم، پانچ کارتها داده را کد گذاری کردند و پردازش مکانیکی را هدایت کردند. در دهه ۱۹۳۰ و ۱۹۴۰، صورت گرایی حساب لاندای آلونزو چرچ و ماشین تورینگ آلن تورینگ مفاهیم ریاضی بیان الگوریتمها را فراهم کردند؛ حساب لاندا همچنان در طراحی زبان موثر است.
در دهه ۴۰، اولین رایانههای دیجیتال که توسط برق تغذیه میشدند ایجاد شدند. اولین زبان برنامه نویسی سطح بالا طراحی شده برای کامپیوتر پلانکالکول بود، که بین سالهای ۱۹۴۵ و ۱۹۴۳ توسط کنراد زوس برای ز۳ آلمان طراحی شد.
کامپیوترهای اوایل ۱۹۵۰، بطور خاص ÜNIVAC ۱ و IBM ۷۰۱ از برنامههای زبان ماشین استفاده میکردند. برنامه نویسی زبان ماشین نسل اول توسط نسل دومی که زبان اسمبلی نامیده میشوند جایگزین شد. در سالهای بعد دهه ۵۰، زبان برنامه نویسی اسمبلی، که برای استفاده از دستورات ماکرو تکامل یافته بود، توسط سه زبان برنامه نویسی سطح بالا دیگر: FORTRAN,LISP , COBOL مورد استفاده قرار گرفت. نسخههای به روز شده این برنامهها همچنان مورد استفاده قرار میگیرند، و هر کدام قویا توسعه زبانهای بعد را تحت تاثیر قرار دادند. در پایان دهه ۵۰ زبان algol ۶۰ معرفی شد، و بسیاری از زبانهای برنامه نویسی بعد، با ملاحظه بسیار، از نسل algol هستند. قالب و استفاده از زبانهای برنامه نویسی به شدت متاثر از محدودیتهای رابط بودند.
پالایش
دوره دهه ۶۰ تا اواخر دهه ۷۰ گسترش مثالهای عمده زبان پرکاربرد امروز را به همراه داشت. با این حال بسیاری از جنبههای آن بهینه سازی ایدههای اولیه نسل سوم زبان برنامه نویسی بود:
APL برنامه نویسی آرایهای را معرفی کرد و برنامه نویسی کاربردی را تحت تاثیر قرار داد.
PL/i(NPL) دراوایل دهه ۶۰ طراحی شده بود تا ایدههای خوب فورترن و کوبول را بهم پیوند دهد.
در دهه ۶۰، Simula اولین زبانی بود که برنامه نویسی شئ گرا را پشتیبانی میکرد، در اواسط دهه۷۰. Smalltalk به دنبال آن به
عنوان اولین زبان کاملاً شئ گرا معرفی شد.
C بین سالهای ۱۹۶۹ تا ۱۹۷۳ به عنوان زبان برنامه نویسی سیستمی طراحی شد و همچنان محبوب است.
Prolog، طراحی شده در ۱۹۷۲، اولین زبان برنامه نویسی منطقی بود.
در ۱۹۷۸ ML سیستم نوع چند ریخت روی لیسپ ایجاد کرد، و در زبانهای برنامه نویسی کاربردی ایستا نوع گذاری شده پیشگام شد.
هر یک از این زبانها یک خانواده بزرگ از وارثین از خود به جای گذاشت، و مدرنترین زبانها از تبار حداقل یکی از زبانهای فوق به شمار میآیند.
دهههای ۶۰ و ۷۰ مناقشات بسیاری روی برنامه نویسی ساخت یافته به خود دیدند، و اینکه آیا زبانهای برنامه نویسی باید طوری طراحی شوند که آنها را پشتیبانی کنند.
"ادسگر دیکسترا" در نامهای معروف در ۱۹۶۸ که در ارتباطات ACM منتشر شد، استدلال کرد که دستورgoto باید از تمام زبانهای سطح بالا حذف شود.
در دهههای ۶۰ و ۷۰ توسعهٔ تکنیکهایی صورت گرفت که اثر یک برنامه را کاهش میداد و در عین حال بهره وری برنامه نویس و کاربر را بهبود بخشید. دسته کارت برای ۴GL اولیه بسیار کوچکتر از برنامهٔ هم سطح بود که با ۳GL deck نوشته شده بود.
یکپارچگی و رشد
دهه ۸۰ سالهای یکپارچگی نسبی بود. C++ برنامه نویسی شئ گرا و برنامه نویسی سیستمی را ترکیب کرده بود. ایالات متحده ایدا(زبان برنامه نویسی سیستمی که بیشتر برای استفاده توسط پیمان کاران دفاعی بود) را استاندارد سازی کرد. در ژاپن و جاهای دیگر، هزینههای گزافی صرف تحقیق در مورد زبان نسل پنجم میشد که دارای ساختارهای برنامه نویسی منطقی بود. انجمن زبان کاربردی به سمت استانداردسازی ML و Lisp حرکت کرد. به جای ایجاد مثالهای جدید، تمام این تلاشها ایدههایی که در دهههای قبل حلق شده بودند را بهتر کرد.
یک گرایش مهم در طراحی زبان در دهه ۸۰ تمرکز بیشتر روی برنامه نویسی برای سیستمهای بزرگ از طریق مدولها، و یا واحدهای کدهای سازمانی بزرگ مقیاس بود. مدول-۲، ایدا. و ML همگی سیستمهای مدولی برجستهای را در دهه ۸۰ توسعه دادند. با وجود اینکه زبانهای دیگر، مثل PL/i، پشتیبانی بسیار خوبی برای برنامه نویسی مدولی داشتند. سیستمهای مدولی غالباً با ساختارهای برنامه نویسی عام همراه شدهاند.
رشد سریع اینترنت در میانه دهه ۹۰ فرصتهای ایجاد زبانهای جدید را فراهم کرد. Perl، در اصل یک ابزار نوشتن یونیکس بود که اولین بار در سال ۱۹۸۷ منتشر شد، در وبگاههای دینامیک متداول شد. جاوا برای برنامه نویسی جنب سروری مورد استفاده قرار گرفت. این توسعهها اساساً نو نبودند، بلکه بیشتر بهینه سازی شده زبان و مثالهای موجود بودند، و بیشتر بر اساس خانواده زبان برنامه نویسی C بودند. پیشرفت زبان برنامه نویسی همچنان ادامه پیدا میکند، هم در تحقیقات و هم در صنعت. جهتهای فعلی شامل امنیت و وارسی قابلیت اعتماد است، گونههای جدید مدولی(mixin، نمایندهها، جنبهها) و تجمع پایگاه داده.
۴GLها نمونهای از زبانهایی هستند که محدوده استفاده آنها مشخص است، مثل SQL. که به جای اینکه دادههای اسکالر را برگردانند، مجموعههایی را تغییر داده و بر میگردانند که برای اکثر زبانها متعارفند. Perl برای مثال، با "مدرک اینجا" خود میتواند چندین برنامه ۴GL را نگه دارد، مانند چند برنامه جاوا سکریبت، در قسمتی از کد پرل خود و برای پشتیبانی از چندین زبان برنامه نویسی با تناسب متغیر در "مدرک اینجا" استفاده کند.
سنجش استفاده از زبان
مشکل است که مشخص کنیم کدام زبان برنامه نویسی بیشتر مورد استفادهاست، و اینکه کاربرد چه معنی میدهد با توجه به زمینه تغییر میکند. یک زبان ممکن است زمان بیشتری از برنامه نویس بگیرد، زبان دیگر ممکن است خطوط بیشتری داشته باشد، و دیگری ممکن است زمان بیشتری از پردازنده را مصرف کند. برخی زبانها برای کاربردهای خاص بسیار محبوبند. برای مثال: کوبول همچنان در مراکزداده متحد، غالباً روی کامپیوترهای بزرگ توانا است؛ fortran در مهندسی برنامههای کاربردی، C در برنامههای تعبیه شده و سیستمهای عامل؛ و بقیه برنامهها معمولاً برای نوشتن انواع دیگر برنامهها کاربرد دارند. روشهای مختلفی برای سنجش محبوبیت زبانها، هر یک متناسب یا یک ویژگی محوری متفاوت پیشنهاد شدهاست:
شمارش تعداد تبلیغات شغلی که از آن زبان نام میبرند.
تعداد کتابهای آموزشی و شرح دهندهٔ آن زبان که فروش رفتهاست.
تخمین تعداد خطوطی که در آن زبان نوشته شده اند- که ممکن است زبانهایی را که در جستجوها کمتر پیدا میشوند دست کم گرفته شوند.
شمارش ارجاعهای زبان(برای مثال، به اسم زبان) در موتورهای جستجوهای اینترنت.
طبقه بندیها هیچ برنامه غالبی برای دسته بندی زبانهای برنامه نویسی وجود ندارد. یک زبان مشخص معمولاً یک زبان اجدادی ندارد. زبانها معمولاً با ترکیب المانهای چند زبان پیشینه بوجود میآیند که هربار ایدههای جدید درگردشند. ایدههایی که در یک زبان ایجاد میشوند در یک خانواده از زبانهای مرتبط پخش میشوند، و سپس از بین خلاهای بین خانوادهها منتقل شده و در خانوادههای دیگر ظاهر میشوند.
این حقیقت که این دسته بندی ممکن است در راستای محورهای مختلف انجام شوند، این وظیفه را پیچیده تر میکند؛ برای مثال، جاوا هم یک زبان شیءگرا(چون به برنامه نویسی شیءگرا تشویق میکند) و زبان همزمان(چون ساختارهای داخلی برای اجرای چندین جریان موازی دارد) است. پایتون یک زبان اسکریپتی شیءگراست.
در نگاه کلی، زبانهای برنامه نویسی به مثالهای برنامه نویسی و یک دسته بندی بر اساس محدوده استفاده تقسیم میشوند. مثالها شامل برنامه نویسی رویهای، برنامه نویسی شیءگرا، برنامه نویسی کاربردی، وبرنامه نویسی منطقی؛ برخی زبانها ترکیب چند مثالند. یک زبان اسمبلی مثالی از یک مدل مستقیم متضمن معماری ماشین نیست. با توجه به هدف، زبانهای برنامه نویسی ممکن است همه منظوره باشند، زبانهای برنامه نویسی سیستمی، زبانهای اسکریپتی، زبانهای محدوده مشخص، زبانهای همزمان/ گسترده(و یا ترکیب اینها). برخی زبانهای همه منظوره تا حد زیادی برای اهداف آموزشی طراحی شدهاند.
یک زبان برنامه نویسی ممکن است با فاکتورهای غیر مرتبط به مثالهای برنامه نویسی دسته بندی شود. برای مثال، غالب زبانهای برنامه نویسی کلمات کلیدی زبان انگلیسی را استفاده میکنند، در حالیکه تعداد کمی این کار را نمیکنند. سایر زبانها ممکن است براساس داخلی بودن یا نبودن دسته بندی شوند.
ساعت : 1:37 pm | نویسنده : admin
|
طراحی وب امیر |
مطلب قبلی