2-2-6- درس: طراحي زبانهاي برنامهسازي
1401/09/21 13:23فصل قبل
سرفصل: مقدمه
مطلب درسي: دلايل مطالعه زبانهاي برنامهسازي
هر نشانه گذاري براي توصيف الگوريتمها و ساختمان دادهها را ميتوان يک زبان برنامهسازي ناميد.
دلايل مطالعه زبانهاي برنامهسازي
بهبود توانايي توسعه الگوريتمهاي کار آمد
استفاده بهينه از زبان برنامهنويسي موجود
افزايش دايره اصطلاحات و ساختارهاي برنامهنويسي
انتخاب بهترين زبان براي کار مورد نظرمان
سهولت آموزش زبان جديد
سهولت طراحي زبان جديد
سؤالي که در اينجا به ذهن متبادر ميشود آنست که آيا فقط بايد به مطالعه زبانهاي برنامهنويسي اختراع شده توسط غيرايرانيان بسنده کنيم يا آنکه ميتوان زبانهاي برنامهنويسي که با زبان فارسي و فرهنگ ايراني سازگاري بيشتري داشته باشند را اختراع نمائيم؟ به نظر ميرسد با ايجاد چنين زبانهاي برنامهنويسي، کودکان و ساير ايرانياني که با زبان انگليسي آشنايي ندارند هم خواهند توانست براي کامپيوترها برنامهنويسي کرده و مهارتهاي تفکر الگوريتمي خود را پرورش و ارتقاء دهند.[1]
سرفصل: تاريخچه زبانها
مطلب درسي: تکامل معماري نرمافزار
از ابتداي پيدايش کامپيوتر تاکنون شاهد سير تکاملي هستيم. به شکلي که در ابتدا کامپيوترها داراي حجم بزرگ و کارايي پايين بوده و به مرور اين نسبت عکس شد و داراي حجم کم و کارائي بيشتر و بهتر شد.
اين مسير تکاملي بدين قرار است:[2]
1. دوران کامپيوترهاي بزرگ (mainframe)
محيط دستهاي
محيط محاورهاي
2. دوران کامپيوترهاي شخصي (PC)
3. دوران شبکه
محاسبات توزيع شده
اينترنت
4. دوران توسعه فناوري اطلاعات و رايانش ابري
و ...
در اين فرآيند تکامل تدريجي، به فراخور پيشرفت فناوري سختافزار، ظرفيت لازم براي توسعه نرمافزارهاي مفيدتر و کاربرديتر فراهم شد. بدين معني که با افزايش ظرفيت (قابليت) سختافزار - به عنوان بستر لازم براي اجراي نرمافزار - نرمافزارهاي بزرگتر و پيشرفتهتر امکان ظهور و بروز يافتند و دنياي فناوري اطلاعات را متحول ساختند. بديهي است که با نبود سختافزارهاي پيشرفته در دههّهاي گذشته، اصولاً بسياري از مفاهيم و فناوريهاي نرمافزاري فعلي در آن زمان مطرح نبودند. زيرا که اصالتاً بستر اجراي آنها (سختافزار پيشرفته) وجود نداشت.
البته همانگونه که فناوري سختافزار کامپيوتر و به تبع آن فناوري نرمافزار آن مراحل تکامل را طي کرده و از روز اول به شکل فعلي نبوده است، در بسياري از امور ديگر نيز رد پاي تکامل تدريجي را ميتوان يافت. به عنوان مثال: تکامل تدريجي خودرو متناسب با تکامل تدريجي جادهسازي، تکامل تدريجي معماري ساختمانها با تکامل تدريجي روشهاي توليد مصالح ساختماني جديد، تکامل سامانههاي ارتباطي با تکامل تدريجي علوم الکترونيک و مخابرات، و بسياري ديگر از ساير مصنوعات دست بشر.
حتي موضوع تکامل تدريجي مبتني بر وجود بسترهاي لازم در امور غيرمادي نيز ديده ميشود. به عنوان مثال شريعتهاي الهي نيز در ابتدا به شکلي سادهتر در اختيار انسانهاي ابتدائي قرار گرفته و هر چه تکامل انسان - به عنوان بستر دريافت معارف الهي - بيشتر ميشد، خداوند شرايع خود را به شکل کاملتري در اختيار بشر قرار ميداد که در نهايت کاملترين شريعت به دستور خدا توسط پيامبر خاتم a در اختيار مردم قرار گرفت.
توجه به اين نکته لازم است که ماهيت دين پيامبران الهي همگي يکسان است که در نزد خداوند به عنوان «دين اسلام» شناخته ميشود[3]. يعني محور همه آنها تسليم در مقابل خداوند است و تضادي با هم ندارند. تفاوتهاي ظاهري بين آنها هم ناشي از مشخصات «شريعت» هرکدام است که به نوعي ميتوان آن را مسيرهاي مختلف به سمت يک هدف يکسان فرض کرد. طبيعتاً همانگونه که در يک سامانه رايانهاي با فراگير شدن يک فناوري نرمافزاري جديد و بسيار بهتر، استفاده از فناوريهاي نرمافزاري ابتدايي و سادهتر در آن حوزه منطقي و مورد تأييد عقلا نيست، پايبند بودن به شريعتهاي ابتدايي و سادهتر در زمان ظهور شريعت کامل و خاتم، منطقي و عقلايي نخواهد بود.
نکته ديگر اين که کارآمدي و تاثيرگذاري مثبت دين به عنوان يک نرم افزار بر انسان نيز در گرو ظرفيت هاي دروني انسان است، اين نرم افزار جامع، روي سخت افزار معيوب جواب نخواهد داد، به همين خاطر قرآن کريم خودش را مايه هدايت «متقين» مي داند که ظرفيت اين هدايت پذيري را دارند: «ذَالِكَ الْكِتَبُ لَا رَيْبَ فِيهِ هُدًى لِّلْمُتَّقِين[4] ؛ آن كتاب با عظمتى است كه شك در آن راه ندارد؛ و مايه هدايت پرهيزكاران است.
چرا که گناه ظرفيت دروني انسان را ويران مي کند، خصوصا برخي گناهان مانند حرام خواري که در روايات فرموده اند: عبادت با لقمه حرام مثل ساختن بنا روي شن است.[5] يعني کارآمد نبوده، و بقائي نخواهد داشت.
سرفصل: قدرت زبانهاي برنامهنويسي
مطلب درسي: صفات يک زبان خوب (معيارهاي ارزيابي زبان)
براي ارزيابي و انتخاب هر چيزي و تشخيص خوب/بد، قوي/ضعيف، مناسب/نامناسب بودن آن بايد معيارهايي داشته باشيم. براي انتخاب اتومبيل، خانه مسکوني، شغل، همسر و ... حتي دين بايد معيارهاي منطقي و قابل قبولي داشته باشيم. البته هرقدر که چيزي اهميت و تأثير بيشتري در زندگي و خوشبختي و بدبختي ما داشته باشد، توجه در انتخاب معيارهاي ارزيابي آن مهمتر ميشود. چقدر در پي آن بودهايم که معيارهاي صحيحي براي انتخاب دينمان داشته باشيم؟ آيا در هنگام ملاقات خداوند، دين و اعتقادات تقليدي از پدر و مادر و اطرافيان را از ما خواهند پذيرفت؟!
براي ارزيابي زبانهاي برنامهسازي نيز معيارهايي به شرح ذيل برشمرده شدهاند:[6]
1. وضوح، سادگي و يکپارچگي
جامعيت مفهومي: تعداد اندکي مفاهيم متضاد و قوانين ترکيب آنها وجود داشته باشد
قابليت خوانايي: سادگي درک يک برنامه نوشته شده به آن زبان
واضح بودن دستورات
تفاوتهاي معنايي بايد در دستور زبان منعکس گردد
2. قابليت تعامد (orthogonality)
تعامد يعني ترکيب ويژگيهاي مختلف يک زبان و توليد حاصل با معنا
3. طبيعي بودن کاربردها: ساختار برنامه ساختار منطقي مربوط به الگوريتم را منعکس کند
4. پشتيباني از انتزاع
5. سهولت در بازرسي برنامه
6. محيط برنامهنويسي
7. قابليت حمل برنامه
8. هزينه استفاده (هزينه اجرا، هزينه ترجمه، هزينه نگهداري)
جهت مطالعه بيشتر:
شايد مناسب باشد در هنگام توضيح معيار اول (وضوح، سادگي و يکپارچگي)، اشارهاي به اين موضوع شود که: صفات يک مکتب انسان ساز خوب هم بايد اينگونه باشد يعني در عين قوتِ برهان از سادگي[7] و وضوح برخوردار باشد. مانند دين اسلام که با گفتن لا اله الا الله از روي اعتقاد، شخص مسلمان ميشود و پس از آن ميتواند با عمق بخشيدن به معارف خود و عمل به آن مراتب کمال را طي کند. در عين حال براي تمامي اقشار با سطوح معرفتي متفاوت جوابگوست[8].
گوستاولوبون مستشرق فرانسوي در خصوص آسان بودن تعاليم اسلام مي نويسد: «رمز پيشرفت اسلام در سهولت و آساني آن است... هيچ يک از تناقضات و پيچيدگي هايي که غالبا در ساير کيش ها و آيين ها ديده ميشود در دين اسلام وجود ندارد. هرچه شما فکر کنيد ساده تر از اصول اسلام نيست... درست برعکس مسيحيان که به آساني نمي توانند معناي تثليث و حلول را بفهمند.[9]
سرفصل: نحو و معناي زبان
مطلب درسي: نحو زبان برنامهسازي
«نحو» يا syntax يک زبان برنامهسازي، ظاهر آن زبان است. به بيان ديگر نحو يک زبان مشخص کننده ترتيب نمادها براي ايجاد يک برنامه معتبر است.
به عنوان مثال در زبان C عبارت x=y+z يک دستور معتبر و عبارتهايي همچون
+x=yz يا x=y#z دستوراتي نامعتبر هستند. يعني با جابجا شدن ترتيب نمادها يا اضافه شدن نمادهاي جديد و تعريف نشده توسط خالق زبان، دستورالعمل نامعتبر شده و توسط مترجم يا Compiler قبول نميشود.[10]
همانگونه که در استفاده از هر زبان، رعايت ترتيب و پايبندي به نمادها و ترکيبهاي تعريف شده نحو آن زبان خيلي مهم است، در عبادات و مناسک اسلامي نيز ترتيب و ترکيب اعمال شرط است؛ که اگر همانگونه که خالق دين فرموده رعايت نشود عبادت باطل است. مثلاً در وضو بايد ابتدا صورت سپس دست راست و. . . شسته شود. ضمناً هرگونه بدعت در دين مشابه استفاده از نمادهاي جديد و تعريف نشده است که منجر به عدم پذيرش اعمال خواهد شد.
در اينجا جالب است که از خودمان بپرسيم: چگونه بعضي از افراد رعايت قواعد اعتباري يک سامانه ساخته دست بشر را بديهي ميدانند و تخطي از آنها را قابل قبول و منطقي نميدانند، اما به راحتي تبعيت از قواعد حقيقي نظام خلقت که ساخته و تعيين شده توسط خداوند متعال هستند را برنميتابند!
سرفصل: نحو و معناي زبان
مطلب درسي: معيار عمومي نحو
يکي از معيارهاي عمومي نحو در زبانهاي برنامهسازي «عدم وجود ابهام» است. ابهام يعني: وجود چندين تفسير از يک ساختار دستوري يا وجود بيش از يک درخت تجزيه.
مثال:
If- else تو در تو
دليل اينکه ابهام در نحو زبانهاي برنامهنويسي قابل قبول نيست، آنست که ما با موجود داراي درک و شعور مواجه نيستيم. فراموش نکنيم که رايانهها ماشين هايي دقيق و سريع هستند، اما فاقد درک و شعور ذاتي هستند لذا وجود اندک ابهامي در نحو زبان برنامهنويسي منجر به بروز اشکالاتي در فرآيند کاري رايانه ميشود.
اما از طرف ديگر بايد به اين نکته توجه داشت که وجود ابهام در يک برنامه يا پيام در هنگامي که مخاطب موجود هوشمندي باشد نه تنها هميشه بد نيست، بلکه گاهي گريزناپذير و حتي واجب است! حال چه برسد به مخاطبي همچون انسان که گل سرسبد مخلوقات عالم و هوشمندترين آنهاست.
اين موضوع در کيفيت نزول قرآن کريم قابل مشاهده است. از طرفي اين کتاب آسماني بناست که آخرين نگارش پيامهاي مدون الهي براي زندگي بشر باشد و لذا طبيعي است که بايد کاملترين باشد. اما از طرف ديگر بيان تمامي نيازهاي بشر تا قيامت، مستلزم وجود کتابي در چندين ده برابر (و شايد صدها برابر) حجم فعلي قرآن کريم است. لذا بديهي است که بيان پارهاي از مطالب بايستي در اين برنامه جامع الهي براي زندگي بشر به صورت اشارات، کليات و سربسته بيان شده باشد که طبيعتاً منجر به ابهام خواهد شد. قرآن کريم آياتي که حاوي چنين ابهاماتي هستند را «متشابهات» (در برابر «محکمات») مينامد.
طبيعي است که بشريت براي رفع چنين ابهاماتي از پيام و برنامه الهي نيازمند مفسريني عاري از خطا است. اينجاست که ادعاي «کتاب خدا ما را کافيست!» قابل پذيرش نيست. لذا در کنار قرآن کريم وجود اهل بيت و عترت طاهرين پيامبر b که به نص صريح روايات شيعه و سني هرگز از قرآن جدا نخواهند شد، الزامي و گريزناپذير است.
سرفصل: نحو و معناي زبان
مطلب درسي: معنا (semantic)
براي رسيدن به نتايج صحيح علاوه بر نحو، توصيف دقيق معناي يک عبارت مورد نياز است.
مثلاً در عبارت x=2. 45+3. 67 مقدار x چيست؟
اگر x و + صحيح باشند: x=5
اگر x صحيح و + جمع حقيقي باشد: x=6
اگر x و + هر دو از نوع حقيقي باشند: x=6. 12
همانگونه که در مثال فوق مشاهده ميشود با معاني مختلف، عليرغم نحو يکسان نتايج مختلفي حاصل ميشود.
براي توضيح اين مطلب ميتوان نحوه ارزيابي و نتيجهبخشي اعمال عبادي انسان را مثال زد: فرض کنيد دو يا چند نفر عبادتي را با ظاهر و ترتيب يکساني انجام ميدهند، اما در موارد معنايي همچون نيت، معرفت، حضور قلب و ... يکسان نيستند. بديهي است که نتايج حاصله از عبادات ايشان در نزد خداوند يکسان نخواهد بود.
سرفصل: نحو ومعناي زبان
مطلب درسي: تعريف Binding (الصاق)
در نظر گرفتن يک صفت يا ويژگي از بين مجموعهاي از Attributeها (صفات) و نسبت دادن آن به يک عنصر برنامه را Binding ميگويند؛ مثلاً اختصاص يک مقدار از بين مجموعه مقادير ممکن، براي متغير x در دستور x=20 .
زمان انجام اين کار را Binding Time ميگويند که ميتواند در چند زمان مختلف انجام گيرد: هنگام تعريف زبان، هنگام پيادهسازي زبان، هنگام ترجمه برنامه توسط برنامهنويس يا توسط مترجم، و نيز هنگام اجرا.
به طور کلي موضوع Binding را در زبانهاي برنامهسازي به دو بخش تقسيم ميکنند:
الف) Early Binding يا «الصاق زودهنگام» (در اين نوع الصاق قبل از اجراي برنامه عمل الصاق صورت ميگيرد و در زمان اجرا صفات مربوطه غير قابل تغيير است)
ب) Late Binding يا «الصاق ديرهنگام» (در اين نوع از الصاق، بخشي از الصاق در مراحل قبل از اجراي برنامه و بخشي در زمان اجراي آن صورت ميگيرد و صفات مربوطه قابل تغيير در زمان اجرا است)
اگر «انسانها» را همچون عناصر يک برنامه، و «نظام خلقت» را آن برنامه که در حال اجراست فرض کنيم، آنگاه ميتوان گفت صفات انساني نيز بعضي به صورت Early Binding يا «الصاق زودهنگام» و بعضي به صورت Late Binding يا «الصاق ديرهنگام» به وجود انسان ملحق ميشوند.
معمولاً درصد صفاتي که زودهنگام (قبل از تولد) به انسان ملحق ميشوند کمتر از صفاتي است که ديرهنگام (در حين زندگي دنيوي و با اراده خود او) به انسان ملحق ميگردند. نکته قابلتوجه اين است که صفات زودهنگام گاهي قابل تغيير است که در اين صورت انسان نسبت به آن مسؤوليت دارد و گاهي قابل تغيير نيست که نسبت به آن مسؤوليتي ندارد. به بيان ديگر، انسان به نسبت اختيار خود داراي تکليف است و نه بيشتر. لذا اگر به احتمالي (البته ضعيف) فرض کنيم صفاتي زودهنگام (از قبيل تأثيرات ژنتيکي و ...) يا ساير تأثيرات محيطي، انساني را چنان احاطه کنند که در شرايطي واقعاً مسلوبالاختيار شود، مسئوليتي متوجه وي نخواهد بود. لذا اين مسئله با عدل الهي هيچ منافاتي ندارد.
[1]. به عنوان نمونه چند سال پيش زبان برنامهنويسي به نام «فارسي.نت» (Farsi.Net) ايجاد شد که مبتني بر فناوري .Net است.
http://forum.p30world.com/showthread.php?t=401982 :منبع خبر
[2]. طراحي و پياده سازي زبانهاي برنامه سازي، صص 1- 41
[3]. « إِنَّ الدِّينَ عِندَ اللَّـهِ الْإِسْلَامُ» (قرآن کريم، سوره مبارکه آل عمران، آيه 19).
[4]. سوره بقر آيه 2.
[5]. «الْعِبَادَةُ مَعَ أَكْلِ الْحَرَامِ كَالْبِنَاءِ عَلَى الرَّمْل»(بحارالانوار، ج81، ص258).
[6]. طراحي و پياده سازي زبانهاي برنامه سازي، صص 19- 24
[7]. اين که چرا اسلام ديني ساده يا به تعبير روايت ”سهله و سمحه” ناميده شده است گفتني است: منشأ اين نامگذاري، روايتى نبوى است که حضرت محمد a فرموده اند: «بُعثت بالحنيفيةِ السمحة السهلة» (بحارالانوار، ج 72، ص 234 و فروع کافى، ج 5، ص 494) که در اين حديث، کلمه ى الحنيفية از ريشه ى حَنَف، به معناى استقامت و راستى است و حنيف به مسلمانى مى گويند که به دين مستقيم تمايل داشته باشد و شريعت حنفيه، شريعتى است که مستقيم بوده و از باطل به سمت حق ميل مى کند (الشيخ فخرالدين الطريحى، مجمع البحرين، ج 1، ص 588.) سمحه نيز به معناي سهل گيري توام با جوانمردي و سهله به معناي آسان گيري است.
[8]. اما در برخي مکاتب مدعي انسان سازي ميگويند ابتدا براي فهم مبادي آن بايد حداقل چندين ماه مطالعه و تحصيل شود تا توضيح داده شود که منظور از اين مکتب چيست.
[9]. تاريخ تمدن اسلام و عرب، ص141و142.
[10]. طراحي و پياده سازي زبانهاي برنامه سازي، ص 67.