Vala
Vala | |
---|---|
![]() | |
Семантика | структурное, императивное, объектно-ориентированное программирование |
Класс языка | объектно-ориентированный |
Появился в | 2006 |
Автор | Йюрг Биллетер, Раффаэле Сандрини |
Разработчик | Jürg Billeter[вд] |
Расширение файлов |
.vala или .vapi |
Выпуск | 0.42.2 (24.09.2018) |
Система типов | строгая, статическая |
Основные реализации | GNOME Desktop Project |
Испытал влияние | Си, C++, Groovy, Java, C# |
Лицензия | LGPL |
Сайт | vala.dev (англ.) |
ОС | кроссплатформенность |
![]() |
Vala — язык программирования, предназначенный для прикладного и системного программирования на основе библиотек GLib Object System (GObject) рабочей среды GNOME/GTK+. Язык был разработан Йюргом Биллетером (Jürg Billeter) и Раффаэле Сандрини (Raffaele Sandrini).
Основные особенности
[править | править код]Vala по своему синтаксису очень похож на C# и полностью реализует объектно-ориентированный подход. Поддерживаются интроспекция, выведение типов, сборка мусора основанная на подсчёте ссылок, лямбда-функции, концепция сигналов и слотов, подобная используемой в Qt, но реализованная на уровне языка, строковые типы, обобщённое программирование, срезы массивов, оператор перечисления элементов коллекции foreach, делегаты, замыкания, интерфейсы, свойства и исключения.
Особенность системы разработки состоит в том, что программа на Vala транслируется в программу на языке C, которая в свою очередь компилируется в исполняемый код целевой платформы со стандартными библиотеками C, Glib и выполняется со скоростью откомпилированного в объектный код целевой платформы приложения C. Чтобы получить транслируемый код на языке С, нужно указать параметр -C компилятору Vala. При наличии в программе графического интерфейса пользователя во время компиляции используется библиотека GTK+ (параметр --pkg gtk+-3.0 компилятора). Благодаря такому подходу откомпилированный код на Vala бинарно совместим с системными библиотеками, написанными на C. Для подключения сторонних библиотек к программам на языке Vala используются специальные vapi-файлы, в которых даётся описание интерфейса библиотеки. Для многих библиотек уже существуют vapi-файлы, входящие в штатную поставку компилятора Vala[1]. Кроме того, имеются vapi-файлы для библиотек, поддерживаемые сторонними пользователями, пока не включенные в штатную поставку[2].
Существуют неофициальные сборки компилятора для ОС Windows, поддерживаемые сторонними разработчиками.
Причины создания
[править | править код]Язык Vala был создан для эффективной разработки на платформе GNOME сложных прикладных и системных приложений с графическим интерфейсом пользователя, базирующимся на стандартной библиотеке GTK+, с применением современных языковых средств и техник программирования.
Объектно-ориентированные языки Java и C# предоставляют программисту достаточно возможностей, но их программы исполняются в виртуальных машинах, что делает невозможным прямое обращение к ним из бинарного кода на языке C, как и использование в таких программах системных низкоуровневых библиотек, таких как GObject. Поэтому эти языки, как и любые другие, исполняющие байт-код в виртуальных машинах, не могут быть приняты в рамках платформы GNOME. Управляемые приложения имеют также ограничения в производительности, что является критичным для работы некоторых программ (например, системных), которые должны исполняться в бинарном коде (ABI). Это и стало причиной появления нового языка Vala.
Примеры кода
[править | править код]Пример № 1
[править | править код]Простая программа «Hello World»
int main ()
{
print ("Hello World\n");
return 0;
}
Пример № 2
[править | править код]Программа «Hello World», демонстрирующая объектно-ориентированный подход
class Sample : GLib.Object
{
void run ()
{
stdout.printf ("Hello World\n");
}
static int main (string[] args)
{
var sample = new Sample ();
sample.run ();
return 0;
}
}
Пример № 3
[править | править код]Это пример использования GTK+ для создания GUI программ на языке Vala:
using Gtk;
int main (string[] args) {
Gtk.init (ref args);
var window = new Window ();
window.title = "Hello, World!";
window.border_width = 10;
window.window_position = WindowPosition.CENTER;
window.set_default_size (350, 70);
window.destroy.connect (Gtk.main_quit);
var label = new Label ("Hello, World!");
window.add (label);
window.show_all();
Gtk.main();
return 0;
}
Примечания
[править | править код]- ↑ Bindings Status (англ.). Дата обращения: 7 сентября 2011. Архивировано 10 марта 2012 года.
- ↑ External Bindings (англ.). Дата обращения: 7 сентября 2011. Архивировано 10 марта 2012 года.
- Anjuta
- Geany
- MonoDevelop (после 2 версии поддержки нет)
- Val(a)IDE (не развивается с 2011 года)
- GNOME Builder?!
Ссылки
[править | править код]- The Vala Programming Language, on GNOME Live! (англ.) (23 августа 2011). — официальный сайт. Дата обращения: 16 августа 2011. Архивировано 10 марта 2012 года.
- Val(a)IDE среда разработки для Vala (англ.). — Launchpad. Архивировано 10 марта 2012 года.
- Benchmark of Vala versus C# and C (англ.) (9 марта 2008). — A collections of some simples benchmarks written in Vala. Дата обращения: 2 мая 2009. Архивировано 10 марта 2012 года.
- valadoc.org (англ.). — Документация по языку Vala. Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Учебник Vala . Дата обращения: 19 июля 2013.
- Снастин, Алексей Обзор языка программирования Vala. Часть 1: Общие свойства и характеристики языка Vala (27 января 2010). Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Часть 2. Объектно-ориентированное программирование на языке Vala (4 февраля 2010). Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Часть 3. Расширенные возможности языка Vala (9 февраля 2010). Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Что такое Vala (23 июля 2010). Дата обращения: 31 июля 2010. Архивировано 10 марта 2012 года.
- Неофициальная сборка для ОС Windows (англ.) (16 августа 2011). Дата обращения: 16 августа 2011.
- Поддержка подключения библиотек написанных на C (англ.) (7 сентября 2011). Дата обращения: 17 сентября 2011. Архивировано 10 марта 2012 года.
- Сообщество в Google+ (англ.).