زبانهای برنامهنویسی زیادی مبتنی بر سیستمعاملها و بسترهای آزاد/متنباز طراحی شده و گسترش یافتهاند. یکی از زبانهای برنامه نویسی Cross-Platform (چند سکویی) و Object-Oriented (شیء گرا) که از سال 2006 شروع به انتشار کرد، زبان Vala است که توسط Jürg Billeter و Raffaele Sandrini تحت حمایت بنیاد GNOME و با حق امتیاز LGPL شروع به فعالیت کرد.
Vala یک زبان برنامهنویسی در حال توسعه است و جای پیشرفت بسیاری دارد که میتوان از تغییرات متعددی که در هر نسخه ارائه میشود به این موضوع پی برد. مقالهای که در حال مطالعه آن هستید یک آموزش کلی بر برنامهنویسی به زبان Vala خواهد بود که در آن بصورت کلی تکنیکهای استفاده از این زبان را توضیح خواهیم داد. این آموزش بر اساس راهنمای رسمی بنیاد گنوم با مقداری تغییر و اقتباس ارائه خواهد شد و همزمان بر روی ویکی پروژههای لینوکس ریویو به آدرس wiki.linuxreview.ir قرار خواهد گرفت.
Vala چیست؟
Vala یک زبان برنامهنویسی جدید است که میتوان به وسیلهی آن برنامههایی نوشت که بر روی کتابخانههای GNOME Run-time ( عموما Glib و GObject) کار کند. این پلتفرم بستر وسیع و نسبتا کاملی برای خصوصیاتی مانند Dynamic Type System (منظور متغیرهای پویا) و Management Assisted Memory (منظور مدیریت اختصاص حافظه) است. قبل از Vala تنها راه برای برنامه، استفاده از API های C بود، که بصورت پیشفرض در ماشین وجود داشتند (منظور وجود APIهایی به زبان C است که بصورت Native در کامپیوتر وجود دارند)؛ که اکثرا دارای اطلاعات اضافی زیادی بودند. همچنین زبانهای سطح بالایی مانند پایتون یا Mono C# نیز از طریق ساخت یک Virtual Machine این کار را انجام میدادند.
اما شیوهی Vala از تمامی این تکنیکها جداست!
خروجی Vala به زبان C است، که میتواند بدون هیچگونه اطلاعات و کتابخانه اضافی بر روی محیط GNOME اجرا شود. اما چند نکته:
- کارایی برنامههایی که به زبان Vala نوشته شدهاند از بسیاری جهات مشابه برنامههای نوشته شده بر روی زبان C میباشد اما بسیار راحتتر و سریعتر نوشته و نگهداری میشوند.
- Vala امکانات و ابزارهای زیادی نسبت به C دارد که نوشتن هر کدام از آنها در C، سخت و زمانبر است.
این مقاله برای چه کسانی نوشته شده است؟
این مقاله یک توضیح کلی دربارهی برنامهنویسی به زبان Vala است و توضیحات زیادی درباره مبانی برنامهنویسی ارائه نمیکند؛ اما سعی میکنیم در ادامه کمی به OOP و مفاهیم آن نیز بپردازیم. برای درک مفاهیم و مبانی پایهای برنامه نویسی این لینک میتواند شروع خوبی باشد.
اجازه دهید به سراغ اولین برنامه به زبان Vala برویم… Hello world ! مطمئنا قابل پیشبینی بود!
class Demo.HelloWorld : GLib.Object {
public static int main(string[] args) {
stdout.printf(“Hello, World\n”);
return 0;
}
}
بهتر است کمی به سبک کتابهای Deitel & Deitel توضیحات خود را پیش ببریم…
خط اول: این خط class Demo.HelloWorld : GLib.Object همانطور که پیداست طرز تعریف یک کلاس در Vala را نمایش میدهد. تعریف کلاس در Vala بسیار شبیه به مفاهیم تعریف کلاس در دیگر زبانهاست. یک کلاس بطور پایهای سازندهی یک شیء در برنامه خواهد بود. پیادهسازی کلاس در زبان Vala از طریق کتابخانهی gobject صورت میپذیرد اما دانستن اطلاعات دقیق دربارهی چگونگی این امر برای انجام اکثر کارها مهم نیست.
نکتهای که اینجا مهم هست این است که این کلاس به عنوان یک Subclass از کلاس Glib.Object ایجاد شده است. در حقیقت در Vala برای انجام بسیاری از کارها نیاز دارید کلاس Glib.Object را بعنوان Superclass برای کلاس خود در نظر بگیرید.
این قست از کد نشان دهندهی قاعدهی کلی تعریف متدها در Vala است. متد نوعی تابع است که از طریق یک شیء قابلیت اجرا مییابد. متد ایستا یعنی اشارهگر مرتبط با شیء وجود ندارد و پشته فقط شامل آرگومانها است. در حقیقت در Vala مانند C متد main آغازگاه برنامه است.
متد main نباید در یک کلاس تعریف بشود؛ در این صورت باید حتما کلاس مورد نظر از نوع static باشد (public بودن یا private بودن مهم نیست). نوع متغیر بازگشتی میتواند از نوع int یا void باشد. برنامه هنگام خروج در صورت void بودن، با دستور exit 0 بسته میشود.
stdout یک شیء در داخل Glib است. این خط، Vala رو موظف میکند که متد printf (از آبجکت stdout) را با ورود رشته (منظور Hello, World) فراخوانی کند. در Vala این سیاقِ نحوی (Syntax) معمولا سبک فراخوانی یک متد از یک شیء است. n/ هم ادامهی برنامه رو در خط بعدی چاپ می کند.
return یعنی برگرداندن یک متغیر به فراخوان و اتمام اجرای برنامهی main. مقدار خروجی متد main به عنوان کد خروجی برنامه محسوب میشود. خط آخر هم نشان دهندهی اتمام کلاس است.
کامپایل و اجرا
Vala را با دستور زیر (در اوبونتو) دانلود و نصب کنید:
بعد از نصب، برای کامپایل و اجرای برنامهی نوشته شده به زبان Vala میتوانید از دستورات زیر استفاده کنید.
./hello
Valac یک کامپایلر زبان Vala است که کد شما را به خروجی باینری تبدیل میکند. خروجی برنامه دقیقا هم اسم با برنامه و در کنار برنامه تولید میشود.
مفاهیم پایه ای
سورس فایلها و کامپایل کردن
تمام سورس فایلهایهای Vala از طریق دستور valac و flagهای ورودی اجرا میشوند. این دستور شبیه دستور کامپایل Java است، برای مثال:
که یک باینری به اسم compiler ایجاد میکند که به پکیج libvala لینک شده است. اگر نیاز دارید اسم باینری خروجی برنامهی شما با اسم سورس فایل شما تفاوت داشته باشد و یا اگر برای ساخت باینری نیاز به کامپایل چند سورس فایل دارید میتوانید از سوییچ -o استفاده کنید.:
./myprogram
اگر نیاز دارید کد Vala را به C تبدیل کنید نیز میتوانید از طریق اضافه کردن سوییچ c- به دستور کامپایل، خروجی ++C داشته باشید؛ این بدان معناست که شما میتوانید با valac یک کد متوسط C از Vala استخراج کنید. valac هر فایل vala. را به یک فایل جداگانه (در اینجا فایلهای source1.vala و source2.vala) به زبان C (با نام source1.c و source2.c) تبدیل میکند. همچنین نگاهی به ساختار تعریف کلاس در فایل خروجی از Vala نشان میدهد که تعریف یک کلاس در Vala مانند تعریف آن در C میباشد (البته با کمی اختصار).
اگر نیاز دارید یک فایل Header داشته باشید میتوانید از سوییچ -H استفاده کنید:
امیدواریم از بخش اول استفاده لازم را برده باشید و در ادامه ما را همراهی کنید.
در قسمت بعد، به بررسی قواعد برنامه نویسی، رشتهها، آرایهها و ارجاعها در برنامهنویسی Vala خواهیم پرداخت.
برای بحث و رفع اشکال در مورد این سری آموزشی و زبان Vala به انجمنهای تخصصی LinuxReview مراجعه نمایید.
26 دیدگاه برای این نوشته:
- امیر حسین:
06 خرد 1391 این لینک که توی متن دادین کار نمی کنه!:http://linuxreview.ir/1391/03/vala-programming-tutorial-part1/cplusplus.com/doc/tutorial/با تشکر! :) - مسعود آموزگار:
07 خرد 1391 بله حق با شماست. داریم درستش میکنیم. :) لینک صحیح اینه : http://cplusplus.com/doc/tutorial/ - مسعود آموزگار:
07 خرد 1391 تشکر سامان جان، کار بزرگی رو شروع کردی. تکمیل بشه توی ویکی خروجیش یه کتاب 200-400 صفحهای خواهد بود. پروژه خیلی خوبی از طرف لینوکس ریویو هست. اینجا هم توضیحات خوبی به زبان فارسی موجوده در مورد والا که اگر کسی خواست یه نگاه بهش بندازه بد نیست : http://pc2st.wordpress.com/2010/08/24/the-vala-programming-language/ - کیارش کیانی:
07 خرد 1391 باز هم پایتون رو ترجیح می دم-خب شما گفتید "خروجی Vala به زبان C است، که میتواند بدون هیچگونه اطلاعات و کتابخانه اضافی بر روی محیط GNOME اجرا شود" حرف شما درست اما بگفته خود شما : "یکی از زبانهای برنامه نویسی Cross-Platform" خارج از گنوم چی؟ اونوقت باز هم این مزیت پابرجاست؟-سیسنتکسش شبیه C هست و اصلا سینتکس C قشنگ نیست. این فقط وقتی مزیت هست که برنامه نویس مسلط به یکی از خانواده های C بخواد این زبان رو یاد بگیره ولی سینتکس c نسبت به پایتون حداقل برای یک تازه وارد سخت تره.-پایتون محبوبیت خوبی داره و همچنین طرفدار های زیادی این باعث می شه تا شما در حین یادگیری کلی مثال و سورس هم دم دست داشته باشی و تعداد زیادتری هستن که بتونن مشکل شما رو حل کنن. - سامان اسمعیل:
07 خرد 1391 خارج از گنوم، مثلا در محیط ویندوز، کامپایلر مخصوص به Vala وجود دارد که مانند VS عمل میکنه، یعنی خروجی بهتون میده و میتونین اجراش کنید. پایتون زبان بسیار عالی و خوبی هست، که کتابخونه های بسیار خوبی هم براش هست، مسلما Vala در بعضی موارد هنوز قابلیت رقابت با پایتون رو نداره. هر زبان در جایگاه خود زیباست. و فرمودید C سینتکس زیبایی نداره، نکته اینجاست که فکر میکنم این یه چیز سلیقه ای هست. نسبتا برنامه نویس های خانواده های C قابلیت یادگیری زبان های بیشتری مانند PHP رو دارند و سینتکس زبان C رو ترجیح میدن. البته باز هم میگم، این یه چیز سلیقه ای هست. :) - سامان اسمعیل:
07 خرد 1391 برای اطلاعات بیشتر بر روی ویندوز میتونین به اینجا مراجعه کنید: http://live.gnome.org/Vala/ValaOnWindows - كيارش كياني:
07 خرد 1391 منظورم اين نبود كه خارج از گنوم چطوري مي شه ازش استفاده كرد منظورم اينه كه خارج از گنوم ديگه "بدون احتياج به هيچ اطلاعات يا كتابخانه اضافي" برقرار نيست و ديگه رو اين مزيت نام برده شده نمي شه تاكيد كرد. - كيارش كياني:
07 خرد 1391 در مورد سينتكس هم من سليقه اي صحبت نمي كنم مثلا hello world پايتون رو با همين مقايسه كنيد چقدر سريعتر به نتيجه مي رسين؟ يا من فكر نمي كنم كسي دوست نداشته باشه خلاصه بنويسه و تا مي تونه از تايپ بيهوده جلوگيري كنه - eMan:
07 خرد 1391 ممنون سامان جان این پستهای آموزشی واقعا ارزش زیادی دارند - مسعود آموزگار:
07 خرد 1391 دوست خوبم اگر اینطور بود که شما میگی که همه زبانها میمردن و اونی که جمع و جورتره میموند. تبدیل کد به سی یه مزیت خیلی بزرگه برای این زبان. درسته این هم سطح بالا هست ولی میتونه مزیت های یه زبون سطح پایین رو منتقل کنه. سینتکس بسیار مشابهی هم با سی شارپ داره (صرفا سینتکس منظورم بود). از نظر امکانات هم با توجه به اینکه هنوز به نسخه 1 هم نرسیده وضعیت مطلوبی داره. مسلما پیشرفت خواهد کرد. در مجموع همیشه در شرایط گوناگون استفاده از زبانهای مناسب اون شرایط منطقیتره. :) کسی که لازمه با C و GObject برنامه بنویسه مسلما استفاده از Vala براش خیلی بهتر خواهد بود. - مسعود آموزگار:
07 خرد 1391 این لینک سرعت نهایی برنامهای که با والا نوشته شده رو با برنامه نوشته شده با پایتون مقایسه کرده : http://compsci.ca/v3/viewtopic.php?t=26633تفاوتش خیلی بالاست! توی این نمونه برنامه والا 60 برابر سریعتره... - شاهین آزاد:
07 خرد 1391 ممنون سامان جان، پست خوبی بود! در ادامهی بحث کامنتها یک نکته رو متذکر میشم که پایتون یک زبان تفسیری و در واقع مناسب اسکریپت نویسی است ولی والا یا Cعه بد سینتکس (جدی میگی؟) یک زبان کامپایل شدنی و خیلی خیلی نزدیکتر به زبان ماشین! مقایسهی این دو خیلی بیهودهست!مخصوصا مقایسه توی سرعت اجراشون! هر کدوم برای هدف متفاوتی ساخته شده! والا رو میشه مثلا با C# مقایسه کرد یا حتی بیسیک! پایتون هم با پرل یا PHP! - كيارش كياني:
07 خرد 1391 مقايسه اصلا كار بيهوده اي نيست اگه مقايسه نكنيم نمي تونيم يه زبان رو انتخاب كنيم اما بايد با هدف خاصي مقايسه كنيم و مقايسه كلي درست نيست من گفتم : "باز هم پايتون رو ترجيح مي دم" اين يعني بسته به استفاده و خواسته ي من پايتون بهترين مي تونه باشه من به عنوان يه اپليكشن نويس بايد با يه زبان cross-platform طرف باشم ولا رو نمي دونم اما توي سي شما احتياج دارين كه براي هر سيستم عامل با همون سيستم عامل از برنامتون خروجي بگيريد كه پايتون اينطوري نيست.توي اپليكيشن نويسي لازمه كه اون زبان و كتابخانه و تكنولوژي هاي لازم توسط توسعه دهنده هاي او سيستم عامل حداقل تا حدودي ساپورت بشه تا نتيجه مطلوب بدست بياد و كاربر رو در گير تنضيمات اضافي نكنه كه پايتون باز هم فكر مي كنم بهتر عمل مي كنهپايتون رو هم مي شه كامپايل كرد و خروجي .pyc گرفت.سينتكس c براي كسي كه به c يا خانواده هاش مسلط هست يك مزيت هست اما براي كسي كه اشنايي نداره پايتون راحتتر هست حتي خود من هم كه objective c كار كردم بازم با پايتون راحتتر هستم. نب در حال حاضر تعداد برنامه نويساي پايتون خيلي بيشتر از والا هست براي همين اگه خواستيد يه امكان جديد به برنامتون اضافه كنيد و بلد نبوديد خيلي زودتر به نتيجه مي رسين.يه جمله هم به دوست عزيز مسعود اموزگار : شما مي گين كه :"از نظر امکانات هم با توجه به اینکه هنوز به نسخه ۱ هم نرسیده وضعیت مطلوبی داره. مسلما پیشرفت خواهد کرد." اجازه بديد فرض كنيم كه در اينده خيلي بهتر از اين باشه و مشكلي براش پيش نياد اين منطقي نيست كه بخاطر اينكه در اينده ممكنه بهتر بشه از حالا اين زبان رو ادم شروع كنه تازه بعد در نسخه بعدي دوباره وقت صرف كنه و تغييرات رو ياد بگيره بهتر هر وقت به قدرت مطلوب و مد نظر رسيد روش وقت بزاريم و ياد بگيريممن اولين باري هست كه نام اين زبان رو مي شنوم و فكر نمي كنم تا به حال تعداد زيادي به اون روي اورده باشن به هر حال اين زبان هم با اهداف خاصي ساخته شده اما مهم اينه كه ايا اين اهداف و قابليت ها اونقدر ازش دارن كه ما به سمت يك زبان تازه وارد بريم ؟ php تونست تا حد زيادي asp رو كنار بزنه و امار رو ارقام موفقيت اون رو ثابت مي كنن چون مزايايي داشت كه واقعا يه توسعه دهنده به اون نياز داشت. - ShayanH:
07 خرد 1391 کسی که به C تسلط کامل داشته باشه نمیاد دوباره وقتش رو واسه یه زبان دیگه بذاره. - مسعود آموزگار:
07 خرد 1391 منم همینطور فکر میکردم ولی یه سرچ کوچولو بزنید متوجه تعداد زیاد دولپرها میشید که بجای سی از والا استفاده میکنن. اغلب برنامههای گنوم به والا پورت شدن... خیلی از برنامهنویسهای پایتون هم توی جاهایی که سرعت مهمه از والا استفاده میکنن. :) - Ehsan Tork:
08 خرد 1391 پایتون فقط برای استفاده برای اسکریپت نویسی نیست و درسته که تفسیریه اما قابلیت کامپایل هم داره. همچنین پایتون با هر نوع Toolkitای قابل استفاده است و از نظر سرعت به نظر من چیزی از بقیه کم نداره. برنامههای زیادی هستن تو گنولینوکس که با پایتون نوشته شدن مثل گیمپ.C به عنوان یک زبان سطح میانی و نوشتن برنامههای سیستمی و .. خیلی به درد می خوره و بحثش جداست. اگر Vala رو با C++/Qt مقایسه کنیم هیچ حرفی برای گفتن نداره! و یه سوال Vala چه قابلیتهایی داره که C/GTK یا C++/GTK و حتی C++/GTK نداره؟ - مسعود آموزگار:
08 خرد 1391 خوب هرکسی بنا بر شرایط میسنجه و زبان مورد نظر رو انتخاب میکنه. حتی شما هم وقتی یه جا سرعت فاکتور اصلی باشه نمیری سراغ پایتون مگه اینکه شخص چیز دیگهای بلد نباشه. بنابراین برنامه نویس هایی که بصورت حرفه ای کار میکنن همیشه چند تا زبان رو بلد هستن و در شرایط مختلف استفاده میکنن :) منظورم از اون بخش هم این بود که به نظرم نباید بدبین باشیم و وجود این زبان رو بیهوده فرض کنیم. الان اغلب برنامههای گنوم به والا پورت شدن و همینطور برنامههایی که برای گنوم با پایتون نوشته شده بودن هم دارن به والا پورت میشن. نمونه : http://seilo.geekyogre.com/2011/11/zeitgeist-from-python-to-vala/pygtk هم وضعیت مساعدی نداره توسعهش و این روند رو تسریع کرده. مجموعا حرف های شما هم درسته و کامنت من رو فرض بر مخالفت یا پاسخی به حرفهاتون نگیرید. بلکه فقط جهت دید متفاوتی به قضیه داریم :) - مسعود آموزگار:
08 خرد 1391 بحث کیوت که جداست... والا برای گنوم خالص بیشتر استفاده میشه. ویژگی های والا نسبت به سی که مشخصه و گفته شد مزایاش. سی++ خیلی پیچیدهتره و یادگیریش هم سخت تره... گمونم خود سازندهش هم کامل ازش سر در نمیاره!! هرکدوم از اینا برای شرایط خاصی هستند. - Ehsan Tork:
08 خرد 1391 C++ و از مفاهیم خیلی سرراستی بهره میبره مثلا استفاده از اشاره گرها، کلاسها تابع ها و ... توس C++ خیلی سر راست هست. این یک مثال از یه برنامه کوچیک با C++/Qt که هیچ اصن! پیچیده نیست!#include "WordPad.h"#include #include #include #include #includeWordPad::WordPad() { QLineEdit* text = new QLineEdit( this ); setCentralWidget(text); text->setText("Hello World"); QAction* a = new QAction(this); a->setText( "Quit" ); connect(a, SIGNAL(triggered()), SLOT(close()) ); menuBar()->addMenu( "File" )->addAction( a ); }WordPad::~WordPad() {}#include "WordPad.moc"برنامه ی بالا یه فرم باز میکنه که توش یه منو هست با File->Quit و یه تکست که توش Hello World هست و با زدن دکمهی quit برنامه میبنده! با C++/GTK هم می شه همچین چیزی رو با یه مقدار تفاوت درست کرد!تازه اگر از KDevelop استفاده بشه که کلی گزینههای گوناگون برای راهنمایی داره! - کاکیلیک:
14 خرد 1391 گپ بین والا و پایتون رو میتونید با Genie پر کنید. https://live.gnome.org/Genie برنامههاش هم با کمپایلر والا میشه کمپایل کرد. خوش باشید - بیژن:
16 خرد 1391 خیلی پست مفیدی بود امیدوارم ادامه پیدا کند - سروش:
16 خرد 1391 بحث جالبی هست من شخصاً والا رو امتحان نکردم، اما چند تا چیز به ذهنم میرسه.اولین و مهمترین چیزی که کسی هم بهش اشاره نکرده اینه که مکانیسم کامپایل و لینک در والا چطوری هست؟ لینکر والا میتونه میتونه با باینریهای سی++ و سی متصل بشه؟ ۲. تئوری زبان چطور هست؟ دقیقاً چه ساختارهایی رو پشتیبانی میکنه؟ این خیلی مهمه! باید آدم بدونه که زبان انواع دادهٔ زبان استاتیک هستند یا نه. یا این که data binding ها زمان اجرا انجام میشه یا زمان کامپایل. ۳. در نظر اول سینتکس زبان به شدت شبیه سیشارپ هست. از نظر من این خیلی خجالتآور هست و یک ضعف بزرگ محسوب میشه. ۴. در ویکی نوشته شده که والا از بعضی ویژگیهای زبانهای جدید برنامهنویسی مثل reference counting استفاده میکنه. این بهنظر من خیلی بده.در آخر این که بهنظر من یک زبان برنامهنویسی اگر در دنیای آکادمی طراحی نشده باشه به جایی نمیرسه. همونطور که سیشارپ و جاوا طراحیهای افتضاح دارند و به هیچ دردی نمیخورند. - سروش:
16 خرد 1391 Rather than being compiled directly to assembler or to another intermediate language, Vala is source-to-source compiled to C which is then compiled with a platform's standard C compiler, such as gcc.از این تیکه خیلی خوشم اومد. اشتباه بزرگی رو که توی سیشارپ، جاوا، و مونو انجام شده، اینجا تکرار نکردن. عوض ساخت یک runtime library نشستن کد تولید کردن. کدی که به کد ماشین خالص ترجمه خواهد شد. و این خیلی بهتر از اینه که یک مفسر بخواد سورس رو اجرا کنه.و این این جواب سؤال اول رو هم میده. در واقع هیچ لینکری وجود نداره. یک کامپایلر هست که کد والا رو به کد سی/جیآبجکت تبدیل میکنه. پس هر چیزی که gcc بتونه با C/GObject کامپایلش کنه و ld هم بتونه بتونه بهش لینک بده، والا میتونه ازش استفاده کنه. - سلمان:
17 آذر 1391 این پست رو به وبگاه گنوم بخش والا اضافه کردم. تحت عنوان Tutorials: https://live.gnome.org/Vala/Documentation - ali:
19 اسف 1392 فقط c++ و qt و php رو عشقه. - پویا محمد کاری:
15 مهر 1393 خوب بعد چه زبونی از نظر شما خوبه؟ اگه زبونای دات نتی، جاوا، پایتون، روبی، لوا و.... در نظر بگیریم همه ی این زبون ها کامپایلر های جاست-این-تایم دارن و اصلا به شما باینری نیتو سیستم نمیدن، شما ی سری بایت کد میگیرین که همیشه برای اجرا شدن تو هر محیطی نیاز به ران تایم و فریمورک خودشون دارن که هممون میدونیم که دات نت یا مونو یا مثلا جی دی کی و اپن جی دی کی هر کدوم نیاز به نصب چند صد تا کتاب خونه و ی رانتایم به چه بزرگی دارن و هر کدوم برای گرفتنشون باید چند صد مگابایت فضا ببرن. یا از اون ور مثلا ابجکتیو-سی بر اساس معاماری های نکست-استپ طراحی شده که یعنی فریمورک کوکوای الان. در نتیجه شاید به نظر بیاد که روی مک به ی فایل نیتو یونیک کامپایل میشه اما بازم کلی خرت و پرت اون محیط رو استفاده میکنه و فقطم توی اون محیط کار میکنه.زبونها هم هر چقدر سطح پایین میشن وابستگیشون به سیستم بیشتر میشه مثلا اسمبلی رو در نظر بگیرین، کد شما برای ی معماری خاص کار خواهد کرد اون هم روی ی سیستم خاص و خیلی از دستور های خیلی ساده هم مثل خروج فقط تو سیستم خودتون کار میکنه، ی بار اسمبلی تحت ویندوز و اسمبلی تحت گنو رو با هم مقایسه کنین حتی گرامر های زبون ها هم با هم فرق دارن. یا حتی وقتی با خود سی هم میخواین کد کراس-پلتفرم بنویسین باید برای پیری-پراسسور کامپایلرتون توضیح بدین که خیلی از فانکشنا رو تو هر سیستم چطوری تعریف کنه.منظورم از همه ی این حرفا اینه که اگه بتونین ی زبون مثل والا رو درست کنین که بتونه برای ی زبون دیگه مفاهیم ابجکت اورینتد رو درست کنه، بتونه مشکلات کمبود استرینگ و کالکشن های داینامیک رو حل کنه اونم برای ی زبون دیگه، زبونی این قدر سطح بالا باشه که برای زبونی به اون اندازه سطح پایین کار کنه و کراس پلتفرم طراحی بشه، این ی شاهکار برنامه نویسیه، والا شاید تازه کار باشه و خیلی آدما و پروژه های کمی باهاش کار کنن ولی این دلیل نمیشه که عالی نباشه.پایتون شاید زبون ساده و قشنگی به نظر بیاد ولی پایتون هیچوقت به ی فایل نیتیو کامپایل نمیشه برای همین هم هست که چیزایی که توش مینویسین خیلی راحت رو هر سیستمی کار میکنن اما راستش بعد از ی مدت که شروع میکنین برنامه های چند پلتفرمی مینویسین میبینین که وقتی ی کار بزرگ به پایتون میدین چقدر نتیجه ی بدی داره، از این نظر که به هیچ وجه از مموری درست استفاده نمیشه، استفادش از سی-پی-یو بار ها بیشتره و رد نهایت زمان خیلی خیلی خیلی بیشتری ( در حد چند صد بار) بیشتر نیاز داره که کار مشابه رو انجام بده.زبون های اسکریپتی مثل پایتون و روبی و پرل برای ساختن پروژه های بزرگ تعریف نشدن (شاید خیلی از پروژّه های بزرگ البته ازشون استفاده کنن) ولی این زبون ها هدف اصلی تشکیل شدنشون «ساده کردن مدل سازی» بوده، برای این که ی پروتوتایپ از ی پروژه رو بسازین و بعد با ی زبون بهتر کارتون رو انجام بدین.مثل شما من خودم عاشق سی-شارپ (البته فقط روی سیستم مونو نه دات نت مایکروسافت) بودم. کدی که میزدید خیلی خیلی قشنگ بود، زبان بسیار غنی ای بود و هر کاری که دلتون میخواست انجام بدید براش ی کتابخونه ی فوق العاده وجود داشت و به لطف مونو کدی که مینوشتید صد در صد کراس-پلتفرم بود. اما وقتی که سعی کردم برای انجام محاسبات زیاد ازش استفاده کنم به شدت زبون افتضاحی درومد. بعدا که همون کد رو با سی نوشتم شاید باورتون نشه اما ۷۶۰ بار سریع تر محاسباتم انجام شد که خودش همه چیز رو توضیح میده.منظورم از همه ی این حرفا این بود که بعضی چیزا برای ساده بودن طراحی نمیشن، برای قوی بودن ساخته میشن. قطعا والا زبونی نیست که دوست داشته باشین باهاش برنامه نویسی رو شروع کنین ولی چیزی که من دیدم این بوده که کسانی که توی سی و خانواده ی سی موفق کد میزنن دیگه به هیچ وجه سراغ زبون هایی مثل پایتون نمیرم.با آروزی بهترین ها