خصوصیات یک زبان خوب
نويسنده: پارسا ستودهنيا
كساني كه از كار با رايانه هدف خاصي را دنبال ميكنند و حوزه فعاليتهاي آنها محدود به زمينه خاصي است، تكليفشان در به كارگيري ابزارها و انتخاب نرمافزارهاي مورد نياز تاحدي مشخص است، اما دنياي برنامهنويسي و زبانهاي مربوطه برخلاف دوران اوليه اختراع رايانه، آنقدر وسيع و گسترده شده است كه ورود بدون آگاهي به اين دنيا ممكن است موجب سردرگمي گردد و فرد پس از گذشت مدت زمان طولاني مجددا به نقطهاي بازگردد كه راه را از آن شروع كرده است.
مسلما در پي اين گشت و گذار، تجربهاي نسبي كسب كرده است و دانشي فراگرفته است؛ اما شايد به دليل كمبود آگاهي و نداشتن نقشه مسير نتواند دانش خود را در عمل به كار گيرد. واقعا خصوصيات يك زبان خوب چيست و آيا زباني وجود دارد كه همه اين خصوصيات را يكجا داشته باشد؟
مكانيزمهاي طراحي زبانهاي سطح بالا بايد حتيالامكان بدون عيب و ساده باشد تا شخص بتواند براحتي به وسيله آن با رايانه ارتباط برقرار كرده و آنچه را كه در ذهن دارد بسادگي به زباني قابل تبديل به زبان رايانه بيان كند.
يك زبان برنامهسازي، چارچوبي مفهومي را براي فكر كردن راجع به الگوريتمها و همچنين ابزارهايي را براي بيان آن الگوريتمها تدارك ميبيند. يك زبان برنامهنويسي بايد قبل از نوشتن كد، به برنامهنويس كمك كند. بايد مجموعهاي از مفاهيم واضح، ساده و يكپارچه را تدارك ببيند كه براي طراحي الگوريتم، مورد استفاده قرار گيرند.
اما تلاش زبانهاي سطح بالا بر اين بوده است كه تا حد امكان خوانايي برنامه را افزايش داده و درك آن را ساده كنند. اين كار با نزديك كردن زبان برنامهنويسي به زبان گفتار تا حد زيادي انجام ميشود. اما تمامي مشكلات آن را حل نميكند. به هر حال براي آنكه اين مشكل به حداقل ممكن برسد بايد زباني را انتخاب كرد كه قابليت خوانايي آن بالا باشد. اين يكي از عاملهايي است كه علاوه بر نوشتن و درك برنامه، آزمايش، اصلاح آن را نيز تحت تاثير قرار ميدهد.
بسياري از زبانها ساختارهاي نحوي دارند كه دو جمله تقريبا مشابه، معاني مختلفي دارند و در نتيجه قابليت خوانايي آنها پايين خواهد بود. طراحي يك زبان بايد طوري باشد كه ساختارهايي با معاني مختلف، با هم فرق داشته باشند. يعني تفاوتهاي معنايي بايد منعكس كننده تفاوتهاي نحوي باشند. اكثر زبانهاي برنامهسازي جديد سعي كردهاند تا حد امكان اين قاعده را رعايت كنند.
عوامل و فاكتورهاي زيادي را ميتوان به عنوان خصوصيات يك محيط برنامهنويسي خوب در نظر گرفت.
قابليت بازرسي و تست برنامه يكي از مهمترين ويژگيهاي يك محيط برنامهنويسي خوب است. برنامهاي كه بدون اشكال باشد هنوز نوشته نشده است! هر برنامهاي كم يا زياد، اشكال دارد و محيط برنامهنويسي خوب بايد به برنامهنويس امكان اجراي گامبهگام،تست، اشكاليابي و اشكالزدايي برنامه را بدهد.
امكانات ويرايشي و تكميل كد، پيشنهاد دستورات و توابع ممكن، امكان دستيابي سريع به هر قسمت از متن برنامه، كمك به ساختار كد براي بالا بردن خوانايي آن و تسهيل اشكالزدايي برنامه، مستندسازي و... از ديگر امكاناتي است كه وجود آن در يك محيط كار برنامهنويسي موجب افزايش كارايي و سهولت كار برنامهنويس خواهد شد.
وقتي زباني براي آموزش به كار گرفته ميشود، سرعت ترجمه مهمتر از سرعت اجرا است. معمولا برنامههاي دانشجويان چندين بار ترجمه ميشوند ولي كمتر اجرا ميشوند بنابراين مهم است كه كامپايلر سرعت قابلقبولي داشته باشد. براي ساخت برنامههاي كاربردي كه ترجمه يك بار انجام ميشود و برنامه چندين بار اجرا ميشود، سرعت كامپايل آنقدر مهم نبوده و در مركز توجه قرار ندارد. اگر تشخيص عيبها ساده باشد و كاربر بتواند بر توسعه و نگهداري برنامه كنترل داشته باشد، چنانچه در اجراي ميليونها دستور در ثانيه، اندكي تاخير ايجاد شود قابل تحمل است.
زباني مثل++ C زباني است كه كامپايلرهاي مختلفي براي آن در سيستم عاملهاي گوناگون طراحي شده است.
هر كس كه به نحوي اين زبان آشنا باشد ميتواند در هر سيستم عاملي، برنامه نوشته و با استفاده از كامپايلر مخصوص آن سيستم عامل برنامه خود را كامپايل و اجرا كند، اما برنامه كامپايل شده معمولا در سيستم عاملهاي ديگر قابل اجرا نيست و تنها راهحل براي اين مساله آن است كه برنامه نوشته شده با كامپايلر ديگري براي سيستم عامل ديگر مجددا كامپايل شده و فايل اجرايي مخصوص آن ايجاد شود. زباني مثل# C زباني است كه هم كامپايلر آن و هم برنامههاي اجرايي آن مخصوص ويندوز است و از اين نظر محدوديت دارد، اما زباني مثل جاوا، با توجه به اين كه كامپايلر آن كد مياني يا كد ماشين مجازي توليد ميكند، برنامههاي اجرايي آن مستقيما بدون نياز به كامپايل مجدد روي سيستم عاملهاي ديگر قابل اجراست. البته پيش از اين نيز گفتيم كه نرمافزار ماشين مجازي جاوا براي سيستم عاملهاي مختلف متفاوت است، اما زماني كه اين نرمافزار نصب شود ديگر مشكل انتقال فايلهاي اجرايي از يك سيستم عامل به ديگري در ميان نخواهد بود.
مسلما در پي اين گشت و گذار، تجربهاي نسبي كسب كرده است و دانشي فراگرفته است؛ اما شايد به دليل كمبود آگاهي و نداشتن نقشه مسير نتواند دانش خود را در عمل به كار گيرد. واقعا خصوصيات يك زبان خوب چيست و آيا زباني وجود دارد كه همه اين خصوصيات را يكجا داشته باشد؟
سادگي
مكانيزمهاي طراحي زبانهاي سطح بالا بايد حتيالامكان بدون عيب و ساده باشد تا شخص بتواند براحتي به وسيله آن با رايانه ارتباط برقرار كرده و آنچه را كه در ذهن دارد بسادگي به زباني قابل تبديل به زبان رايانه بيان كند.
يك زبان برنامهسازي، چارچوبي مفهومي را براي فكر كردن راجع به الگوريتمها و همچنين ابزارهايي را براي بيان آن الگوريتمها تدارك ميبيند. يك زبان برنامهنويسي بايد قبل از نوشتن كد، به برنامهنويس كمك كند. بايد مجموعهاي از مفاهيم واضح، ساده و يكپارچه را تدارك ببيند كه براي طراحي الگوريتم، مورد استفاده قرار گيرند.
خوانايي
اما تلاش زبانهاي سطح بالا بر اين بوده است كه تا حد امكان خوانايي برنامه را افزايش داده و درك آن را ساده كنند. اين كار با نزديك كردن زبان برنامهنويسي به زبان گفتار تا حد زيادي انجام ميشود. اما تمامي مشكلات آن را حل نميكند. به هر حال براي آنكه اين مشكل به حداقل ممكن برسد بايد زباني را انتخاب كرد كه قابليت خوانايي آن بالا باشد. اين يكي از عاملهايي است كه علاوه بر نوشتن و درك برنامه، آزمايش، اصلاح آن را نيز تحت تاثير قرار ميدهد.
بسياري از زبانها ساختارهاي نحوي دارند كه دو جمله تقريبا مشابه، معاني مختلفي دارند و در نتيجه قابليت خوانايي آنها پايين خواهد بود. طراحي يك زبان بايد طوري باشد كه ساختارهايي با معاني مختلف، با هم فرق داشته باشند. يعني تفاوتهاي معنايي بايد منعكس كننده تفاوتهاي نحوي باشند. اكثر زبانهاي برنامهسازي جديد سعي كردهاند تا حد امكان اين قاعده را رعايت كنند.
محيط كار
عوامل و فاكتورهاي زيادي را ميتوان به عنوان خصوصيات يك محيط برنامهنويسي خوب در نظر گرفت.
قابليت بازرسي و تست برنامه يكي از مهمترين ويژگيهاي يك محيط برنامهنويسي خوب است. برنامهاي كه بدون اشكال باشد هنوز نوشته نشده است! هر برنامهاي كم يا زياد، اشكال دارد و محيط برنامهنويسي خوب بايد به برنامهنويس امكان اجراي گامبهگام،تست، اشكاليابي و اشكالزدايي برنامه را بدهد.
امكانات ويرايشي و تكميل كد، پيشنهاد دستورات و توابع ممكن، امكان دستيابي سريع به هر قسمت از متن برنامه، كمك به ساختار كد براي بالا بردن خوانايي آن و تسهيل اشكالزدايي برنامه، مستندسازي و... از ديگر امكاناتي است كه وجود آن در يك محيط كار برنامهنويسي موجب افزايش كارايي و سهولت كار برنامهنويس خواهد شد.
سرعت
وقتي زباني براي آموزش به كار گرفته ميشود، سرعت ترجمه مهمتر از سرعت اجرا است. معمولا برنامههاي دانشجويان چندين بار ترجمه ميشوند ولي كمتر اجرا ميشوند بنابراين مهم است كه كامپايلر سرعت قابلقبولي داشته باشد. براي ساخت برنامههاي كاربردي كه ترجمه يك بار انجام ميشود و برنامه چندين بار اجرا ميشود، سرعت كامپايل آنقدر مهم نبوده و در مركز توجه قرار ندارد. اگر تشخيص عيبها ساده باشد و كاربر بتواند بر توسعه و نگهداري برنامه كنترل داشته باشد، چنانچه در اجراي ميليونها دستور در ثانيه، اندكي تاخير ايجاد شود قابل تحمل است.
قابليت حمل
وابستگي به سيستم عامل
زباني مثل++ C زباني است كه كامپايلرهاي مختلفي براي آن در سيستم عاملهاي گوناگون طراحي شده است.
هر كس كه به نحوي اين زبان آشنا باشد ميتواند در هر سيستم عاملي، برنامه نوشته و با استفاده از كامپايلر مخصوص آن سيستم عامل برنامه خود را كامپايل و اجرا كند، اما برنامه كامپايل شده معمولا در سيستم عاملهاي ديگر قابل اجرا نيست و تنها راهحل براي اين مساله آن است كه برنامه نوشته شده با كامپايلر ديگري براي سيستم عامل ديگر مجددا كامپايل شده و فايل اجرايي مخصوص آن ايجاد شود. زباني مثل# C زباني است كه هم كامپايلر آن و هم برنامههاي اجرايي آن مخصوص ويندوز است و از اين نظر محدوديت دارد، اما زباني مثل جاوا، با توجه به اين كه كامپايلر آن كد مياني يا كد ماشين مجازي توليد ميكند، برنامههاي اجرايي آن مستقيما بدون نياز به كامپايل مجدد روي سيستم عاملهاي ديگر قابل اجراست. البته پيش از اين نيز گفتيم كه نرمافزار ماشين مجازي جاوا براي سيستم عاملهاي مختلف متفاوت است، اما زماني كه اين نرمافزار نصب شود ديگر مشكل انتقال فايلهاي اجرايي از يك سيستم عامل به ديگري در ميان نخواهد بود.
گستره كاربرد