زبان برنامه‌نویسی Vala

آیا برنامه‌های خود را توسط کتابخانه‌های 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#

مسئله این است! GTK یا Qt؟

وجود دو کتابخانه‌ی محبوب GTK و Qt باعث شده تا اغلب برنامه‌نویسان گنو/لینوکس در دو گروه جدا از هم قرار گیرند:

  1. گروهی که با GTK برای محیط رومیزی گنوم، Xfce و غیره، برنامه می‌نویسند.
  2. گروهی که با Qt برای محیط رومیزی KDE برنامه می‌نویسند.

برنامه‌های نوشته شده با GTK و Qt مستقل از سکو بوده و با حداقل تغییر در کدها توانایی کامپایل‌شدن بر روی انواع سیستم‌عامل‌ها را دارند. هم GTK هم Qt دارای مستندات و مطالب آموزشی فراوان و جامعه کاربری بزرگ بوده و از حمایت وسیعی برخوردار هستند. در حقیقت Qt یک چهارچوب (framework) است که برای برنامه‌نویسی واسط گرافیکی کاربر (GUI)، بانک اطلاعاتی، شبکه، OpenGL و … کاربرد دارد، اما GTK کتابخانه‌ای است که فقط برای برنامه‌نویسی واسط گرافیکی کاربر (GUI) (طراحی پنجره‌ها و دیالوگ‌ها) کاربرد دارد. GTK از کتابخانه‌های Glib و Cairo استفاده می‌کند. کتابخانه Glib یک کتابخانه کاربردی و شیئ‌گرا برای برنامه‌نویسان زبان C و کتابخانه Cairo یک کتابخانه برای ترسیم اشکال گرافیک برداری است. Qt دارای پشتوانه‌ی تجاری از طرف شرکت نوکیا است و در سه مجوز مجزای GPL و LGPL و Commercial منتشر می‌شود. GTK جزء پروژه‌ی گنو است و با مجوز LGPL منتشر می‌شود.

خصوصیات GTK

  • برای برنامه‌نویسان زبان C است.
  • تاحدودی سازگاری بهتر با محیط رومیزی گنوم، Xfce و غیره
  • ساختار تمیز و کارآمد؛ تنها قابلیت‌های ضروری در کتابخانه‌ی GTK قرار گرفته است.
  • استفاده از منابع سخت‌افزاری کمتر و کارآیی بیشتر (اختلاف با Qt زیاد نیست)
  • در سیستم‌عامل ویندوز، ظاهر برنامه‌های نوشته‌شده با GTK توسط GTK ترسیم می‌شود و با ظاهر سایر برنامه‌های ویندوزی متفاوت است.
  • برای طراحی پنجره یا دیالوگ می‌توان از برنامه‌ی Glade استفاده کرد، در اینصورت باید در کدهایتان از کتابخانه‌ی Glade هم استفاده کنید (ویرایش: این شرط عوض شده است).

ایراد: کار با سیگنال‌های کتابخانه‌ی GTK در زبان ++C با سختی (تاحدودی ناسازگاری) همراه است.

خصوصیات Qt

  • برای برنامه‌نویسان زبان ++C است.
  • تاحدودی سازگاری بهتر با محیط رومیزی KDE
  • ساختار پیچیده و پر امکانات؛ اکثر قابلیت‌های کاربردی در کتابخانه‌ی Qt قرار گرفته است.
  • استفاده از منابع سخت‌افزاری بیشتر و کارآیی کمتر (اختلاف با GTK زیاد نیست)
  • در سیستم‌عامل ویندوز، ظاهر برنامه‌های نوشته‌شده با Qt توسط توابع ویندوز ترسیم می‌شود و با ظاهر سایر برنامه‌های ویندوزی یکسان است.
  • برای طراحی پنجره یا دیالوگ و همچنین برای نوشتن کدها می‌توان از برنامه‌ی Qt Creator استفاده کرد که محیطی ساده و سریع را در اختیار توسعه‌دهندگان قرار داده است.

ایراد: استفاده از روش‌های غیر استاندارد برای کدنویسی و کامپایل (و نیاز به qmake قبل از کامپایل کدها)

و … مسئله این است! GTK یا Qt؟ جواب: نامشخص.

دنبال‌کردن

هر نوشتهٔ تازه‌ای را در نامه‌دان خود دریافت نمایید.