Vala

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Vala
Vala Logo.svg
Семантика структурное, императивное, объектно-ориентированное программирование
Класс языка язык программирования и объектно-ориентированный язык программирования
Появился в 2006
Автор Йюрг Биллетер, Раффаэле Сандрини
Расширение файлов .vala или .vapi
Выпуск 0.43.3 (April 8, 2019)
Система типов строгая, статическая
Основные реализации GNOME Desktop Project
Испытал влияние Си, C++, Groovy, Java, C#
Лицензия LGPL
Сайт wiki.gnome.org/Projects/…
ОС кроссплатформенность

Vala — язык программирования, предназначенный для прикладного и системного программирования на основе библиотек GLib Object System (GObject) рабочей среды GNOME/GTK+. Язык был разработан Йюргом Биллетером (Jürg Billeter) и Раффаэле Сандрини (Raffaele Sandrini).

Основные особенности[править | править код]

Vala по своему синтаксису очень похож на Java и полностью реализует объектно-ориентированный подход. Поддерживаются интроспекция, выведение типов, сборка мусора, основанная на подсчёте ссылок, лямбда-функции, концепция сигналов и слотов, подобная используемой в 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»

void main()
{
  print("Hello, World\n");
}

Пример № 2[править | править код]

Программа «Hello, World», демонстрирующая объектно-ориентированный подход

 class Sample
 {
         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;
}

Применение[править | править код]

Язык Vala активно используется для разработки приложений под GNOME, в частности для написания принципиально новых приложений, отвечающих запросам пользователей GNU Linux. С использованием Vala разрабатывается:

  • Elementary OS — дистрибутив, разработчики которого большое внимание уделяют дизайну системы
  • Akira — нативное приложение для GNU Linux, которое по замыслу создателей должно стать основным инструментом UX-протипирования и разработки для пользователей свободного программного обеспечения
  • Geary — почтовый клиент
  • Budgie — графическая оболочка на базе GTK+
  • Gee — библиотека коллекций
  • Ambition — Веб-фреймворк по модели MVC. Пример создания простого блога.
  • Valum — Веб-фреймворк
  • VDA — обертка написанной на си библиотеки GDA, которая предоставляет единый набор подключаемых API-интерфейсов, определенных как можно более универсальными, чтобы через них можно было получить доступ к любому типу источника данных (базы данных, информационные серверы, почтовые пулы). На данный момент поддерживает SQLite (и SQLCipher), MySQL, PostgreSQL, MSAccess, Berkeley Db (и является расширением SQL), Oracle и JDBC (разрешает доступ к любой базе данных через драйвер JDBC), работа ведется для других типов баз данных.


Образец кода[править | править код]

Если у вас возникли проблемы с компиляцией примера, попробуйте последнюю версию Vala.

Характеристики языка и вводные примеры[править | править код]

Основы: Коллекции, файлы, ввод/вывод, работа с сетью, IPC[править | править код]

Интерфейс пользователя[править | править код]

Мультимедиа и графика[править | править код]

GNOME платформа[править | править код]

Использование GLib[править | править код]

Работа с базами данных[править | править код]

Разное[править | править код]

  • Deprecated Samples (Examples using deprecated libraries such as GNOME 2 panel applets)

Примечания[править | править код]

  1. Bindings Status (англ.). Дата обращения 7 сентября 2011. Архивировано 10 марта 2012 года.
  2. External Bindings (англ.). Дата обращения 7 сентября 2011. Архивировано 10 марта 2012 года.

Интегрированная среда разработки[править | править код]

Редактор Подсветка синтаксиса Форматирование кода Статический анализ кода Авто-завершение Перейти к определению Комплексная документация Интегрированная сборка, тестирование и отладка
Anjuta Yes Yes Yes
Atom Yes Yes Yes
elementary OS Code Yes
Emacs Yes
Geany Yes Yes Yes
gedit Yes Yes
GNOME Builder Yes Yes Yes Yes Yes
IntelliJ IDEA Yes
medit Yes
SublimeText Yes Basic
TextMate Yes Basic
Vim Yes Yes Yes
Visual Studio Code Yes Yes Partial

В настоящее время существует две разрабатываемые реализации языкового сервера для Vala:

Другие инструменты[править | править код]

  • Valadoc - генерирует документацию из VAPI, GIR и других файлов
  • Gcovr - отчёты о покрытии кода, используйте ключ --debug с valac для включения номеров строк исходного файла
  • Uncrustify - авто-форматирование исходного кода
  • vala-lint - проверяет код на соответствие правилам оформления кода от elementary — Code-Style guidelines

Ссылки[править | править код]