ولا یک زبان برنامهنویسی است که هدف آن ارائه تجربهای مدرن در برنامهنویسی است در حالی که سازگاری با زبان برنامهنویسی C را تضمین میکند، بهویژه در سیستم نوع GObject. این زبان بهگونهای طراحی شده است که ساده و کارآمد باشد و بهطور عمده به توسعه برنامههای کاربردی برای محیط دسکتاپ GNOME هدفگذاری شده است. با سینتکسی که به زبانهایی مانند C# یا Java شباهت دارد، ولا ویژگیهایی مانند برنامهنویسی شیگرا، استنتاج نوع و عبارات لامبدا را پشتیبانی میکند و در عین حال به کد C کامپایل میشود تا عملکرد بومی را فراهم کند.
ولا توسط یورگ بیلتر ایجاد شد و اولین بار در سال 2006 به عنوان بخشی از پروژه GNOME ظاهر شد. توسعه آن عمدتاً به دلیل دشواری و پیچیدگی استفاده مستقیم از C برای توسعه GObject انگیزه داشت. یورگ هدف داشت که زبانی با سطح بالاتر ارائه دهد که قدرت C را حفظ کند در حالی که سینتکس را سادهتر کرده و بهرهوری را افزایش دهد.
ولا از زبانهایی مانند C# و Java الهام گرفته است، بهویژه در سینتکس و ویژگیهایی مانند جمعآوری زباله و ایمنی نوع. این زبان بهطور نزدیک با کتابخانههای GNOME و GObject، که بخشی اساسی از اکوسیستم GNOME است، یکپارچه میشود و آن را برای ساخت برنامهها در آن محیط مناسب میسازد. ولا پلی بین انتزاع سطح بالا و عملکرد سطح پایین ارائه میدهد و آن را در میان زبانهای مشابه متمایز میکند.
در حال حاضر، ولا بهطور قابل توجهی بالغ شده و دارای یک جامعه اختصاصی است. این زبان بهطور فعال نگهداری میشود و بهروزرسانیهای منظم و پشتیبانی از آخرین فناوریهای GNOME را ارائه میدهد. ولا بهطور فزایندهای در توسعه برنامههای دسکتاپ، بهویژه آنهایی که برای محیطهای لینوکس طراحی شدهاند، استفاده میشود و به دلیل سهولت استفاده و کارایی خود به پذیرش بیشتری دست یافته است.
ولا از برنامهنویسی شیگرا (OOP) از طریق کلاسها، وراثت و رابطها پشتیبانی میکند. کلاسها میتوانند با استفاده از کلمه کلیدی class
تعریف شوند.
class MyClass {
public int my_value;
public MyClass(int value) {
my_value = value;
}
}
ولا اجازه میدهد تا استنتاج نوع انجام شود، به این معنی که توسعهدهنده همیشه نیازی به مشخص کردن صریح نوع یک متغیر ندارد.
var greeting = "Hello, World!"; // نوع رشته استنتاج شده
ولا از عبارات لامبدا پشتیبانی میکند که امکان ایجاد توابع ناشناس را فراهم میکند.
void main() {
var add = (int a, int b) => a + b;
print("%d\n", add(3, 4));
}
ولا اجازه تعریف ویژگیها را میدهد و بهطور خودکار متدهای getter و setter را فراهم میکند.
class Point {
public int x { get; set; }
public int y { get; set; }
}
ولا از سیگنالها پشتیبانی میکند، که ویژگیای از سیستم GObject است که برنامهنویسی مبتنی بر رویداد را امکانپذیر میسازد.
signal my_signal(string message);
ولا دارای ویژگیهای داخلی مدیریت خطا است که مدیریت استثناها را آسانتر میکند.
void risky_function() throws Error {
// کدی که ممکن است خطا ایجاد کند
}
ولا نوعگذاری ایستا را تحمیل میکند که به شناسایی خطاها در زمان کامپایل کمک میکند.
int my_number = 42; // باید یک عدد صحیح باشد.
ولا از مجموعهها و نوعهای جنریک برای ایجاد ساختارهای داده انعطافپذیر پشتیبانی میکند.
List<string> my_list = new List<string>();
ولا میتواند بهطور مستقیم کتابخانهها و توابع C را فراخوانی کند و امکان تعامل بیوقفه با کدهای موجود C را فراهم میآورد.
public C.function(param1);
ولا اجازه استفاده از یادداشتها برای متاداده را میدهد که برای ارتباط با سیستمهای دیگر مفید است.
[CustomAnnotation]
class AnnotatedClass { }
کد ولا با استفاده از کامپایلر vala
کامپایل میشود که کد ولا را به C ترجمه میکند. سپس از یک کامپایلر C استاندارد (مانند GCC) برای کامپایل کد C حاصل به یک فایل اجرایی استفاده میشود. سیستم ساخت میتواند با Meson
که معمولاً در اکوسیستم GNOME استفاده میشود، یکپارچه شود.
چند محیط توسعه یکپارچه (IDE) وجود دارد که از توسعه ولا پشتیبانی میکند:
برای ساخت یک پروژه ولا، یک فایل با پسوند .vala
ایجاد کنید، سپس از خط فرمان استفاده کنید:
vala --pkg gtk+-3.0 my_program.vala -o my_program
این مثال my_program.vala
را کامپایل میکند و آن را به کتابخانه GTK+ لینک میکند.
ولا عمدتاً برای ساخت برنامههای دسکتاپ در اکوسیستم GNOME استفاده میشود. این زبان در پروژههایی که نیاز به توسعه مبتنی بر GObject دارند، رایج است. برنامههایی مانند ویرایشگرهای متن، پخشکنندههای رسانه و ابزارهای سیستمی در ولا توسعه یافتهاند. پروژههای قابل توجه شامل:
هنگام مقایسه با زبانهای مشابه، ولا به دلیل یکپارچگی با سیستم GObject و تمرکز بر برنامههای GNOME متمایز است.
یکی از ابزارهای موجود برای ترجمه کد ولا، خود کامپایلر ولا به C است، زیرا بهطور مؤثری کد منبع ولا را به C ترجمه میکند. اگر به دنبال ابزارهای عمومیتر هستید، ابزارهای خاصی برای ترجمه منبع به منبع بهطور گستردهای برای ولا وجود ندارد، اما ابزارهایی مانند GObject Introspection میتوانند برای ایجاد بایندینگ با زبانهای دیگر استفاده شوند.