زبان برنامهنویسی Vala
اوت 24, 2010 بیان دیدگاه
آیا برنامههای خود را توسط کتابخانههای GTK و Glib در زبان برنامهنویسی C مینویسید؟
پس زبان برنامهنویسی Vala میتواند کارهای شما را راحتتر کنید.
آیا برنامههای خود را توسط کتابخانههای GTK و Glib در زبان برنامهنویسی C# مینویسید؟
پس زبان برنامهنویسی Vala دقیقاً برای شما است. میتوانید C# و GTK# را هماکنون فراموش کنید.
زبان برنامهنویسی Vala یک زبان برنامهنویسی سطح بالا است که برای سادهسازی برنامهنویسی Glib و GTK در C بوجود آمده است. اگر شما قبلا با زبان C و توسط Glib و GTK برنامهنویسی میکردید ولی این برای شما سخت بود و در جستجوی گزینههای راحتتری هستید، زبان برنامهنویسی Vala هماکنون در پیش روی شماست. قواعد نحوی این زبان بسیار مشابه قواعد نحوی زبان برنامهنویسی C# است، میتوانید فکر کنید که Vala جایگزین C# برای برنامهنویسی با Glib و GTK است. زبان برنامهنویسی Vala برخلاف C# وابسته به مونو یا .NET نیست، بلکه زبان برنامهنویسی Vala نسبت به سایر زبانها کمی متفاوت است! چونکه زبان برنامهنویسی Vala پس از کامپایل به زبان برنامهنویسی C تبدیل میشود! بله درست شنیدید، زبان برنامهنویسی Vala پس از کامپایل به زبان برنامهنویسی C تبدیل میشود. همانطور که گفتم زبان برنامهنویسی Vala یک زبان برنامهنویسی سطح بالا است و بطور درونی از کلاسها، اشیاء، خصوصیات، رویدادها و از سایر قابلیتهای شیگرای زبانهایی مثل C# و جاوا پشتیبانی میکند. البته من نمیگویم که امکانات Vala در حد C# و جاوا است، خیر، بلکه Vala به شما اجازه میدهد که براحتی برای سکوی GNOME برنامهنویسی کنید.
کلاسهایی که در Vala ایجاد کردهاید، پس از کامپای، چطور توسط زبان C پیادهسازی میشوند؟ هر قابلیت شیگرایی که شما در Vala در اختیار دارید، بطور مستقیم همان قابلیتهایی است که توسط Glib ارائه میشود، در نهایت در زبان Vala همهٔ قابلیتهای شیگرا پس از کامپایل، به مجموعهای از دستورات و توابع Glib در زبان C تبدیل میشود. میتوانید اینطور فرض کنید که شما در Vala شیگرا کد میزنید و پس از کامپایل، هر آنچه که شما نوشتهاید به معادل آنها در Glib و زبان C تبدیل میشود. این همانند این است که شما توسط زبان Vala بطور خلاصه میگویید که کد برنامهٔ شما چطور باید توسط Glib و C پیادهسازی میشد. پس در نهایت، پس از کامپایل کد در زبان Vala، آن چیزی که در دستان شماست، برنامهای است که توسط Glib و زبان C کامپایل شده است. به همین خاطر است که میگویم، اگر میخواهید بطور ساده با GTK کار کنید ولی زبان C برای شما سخت است، پس بهتر است از Vala به همراه GTK استفاده کنید.
توجه کنید که اگر شما از کتابخانهٔ GTK در زبان Vala استفاده کنید، پس شما بطور مستقیم به GTK دسترسی خواهید داشت و هیچ لایهٔ اضافه بر روی کتابخانهٔ GTK برای دسترسی در زبان Vala وجود ندارد. شما بطور مستقیم با GTK در Vala کار میکنید همانطور که بطور مستقیم با GTK در زبان C کار میکردید، زیرا در زبان Vala توابع C موجود در کتابخانهٔ GTK توسط فایلهایی با پسوند vapi به توابع موجود در کتابخانهٔ این زبان map شدهاند. اما در زبانی مثل C# شما از کتابخانهٔ GTK# استفاده میکنید که یک لایهٔ اضافه بر روی کتابخانهٔ GTK است. یا بطور مثال در پایتون شما از PyGTK استفاده میکنید که آن هم یک لایهٔ اضافی بر روی کتابخانهٔ GTK است و برای GTKmm در C++ نیز این چنین است (هر چند که در C++ نیز میتوانید بدون استفاده از GTKmm بطور مستقیم از GTK استفاده کنید).
قواعد نحوی زبان Vala بسیار به قواعد زبان C# نزدیک است، امکانات Vala و شیگرایی آن در حد کتابخانهٔ Glib (و GObject) است، پس توجه داشته باشید که:
- این زبان هنوز به نسخهٔ 1.0 نرسیده است، اما بطور مناسبی قابل استفاده است.
- زبان Vala برخلاف C# زبالهروب ندارد، در زبان Vala ارجاعهای به یک متغیر در حافظهٔ پویا شمارش میشوند، دقیقا همانند روشی که Glib برای مدیریت حافظهٔ پویا استفاده میکند.
- کد نوشتهشده به زبان Vala برای کامپایل ابتدا به کد معادل در زبان C و کتابخانه Glib تبدیل شده و سپس توسط کامپایلر C به کد محلی (برنامه نهایی) کامپایل میشود.
- بعضی تفاوتها بین C# و Vala هم وجود دارد، آن هم بخاطر سازگاری Vala با C است، بطور مثال در Vala نمیتوان توابع را سربارگذاری (overload) کرد.
نمونه مثالی از سادگی این زبان:
bool b = "false".to_bool(); // => false int i = "-52".to_int(); // => -52 double d = "6.67428E-11".to_double(); // => 6.67428E-11 string s1 = true.to_string(); // => "true" string s2 = 21.to_string(); // => "21"
.
و یک نمونه مثال از برنامهٔ نوشتهشده با کتابخانهٔ GTK:
using Gtk;
class Demo : Window {
public Demo () {
this.title = "This is a window";
set_default_size (250, 200);
set_position (WindowPosition.CENTER);
this.destroy.connect (Gtk.main_quit);
var button = new Button.with_label ("Click");
add (button);
show_all ();
}
static void main (string[] args) {
Gtk.init (ref args);
new Demo ();
Gtk.main ();
}
}
.
این زبان به معنای مطلق نه خوب است و نه بد… ولی میتواند جوابگوی برخی از نیازها باشد.
[+] اطلاعات بیشتر و آشنایی بیشتر با این زبان
[+] مقایسه قواعد نحوی و رفتارهای دو زبان Vala و C#
دانلود کتاب آموزش پارسیکس