software.wikisort.org - Язык_программирования

Search / Calendar

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

Vala
Семантика структурное, императивное, объектно-ориентированное программирование
Класс языка объектно-ориентированный язык программирования
Появился в 2006
Автор Йюрг Биллетер, Раффаэле Сандрини
Расширение файлов .vala или .vapi
Выпуск 0.56.3[1] (3 сентября 2022; 2 месяца назад (2022-09-03))
Система типов строгая, статическая
Основные реализации GNOME Desktop Project
Испытал влияние Си, C++, Groovy, Java, C#
Лицензия LGPL
Сайт wiki.gnome.org/Projects/…
ОС кроссплатформенность
 Медиафайлы на Викискладе

Основные особенности


Vala по своему синтаксису очень похож на Java и полностью реализует объектно-ориентированный подход. Поддерживаются интроспекция, выведение типов, сборка мусора, основанная на подсчёте ссылок, лямбда-функции, концепция сигналов и слотов, подобная используемой в Qt, но реализованная на уровне языка, строковые типы, обобщённое программирование, срезы массивов, оператор перечисления элементов коллекции foreach, делегаты, замыкания, интерфейсы, свойства и исключения.

Особенность системы разработки состоит в том, что программа на Vala транслируется в программу на языке C, которая, в свою очередь, компилируется в исполняемый код целевой платформы со стандартными библиотеками C, Glib и выполняется со скоростью откомпилированного в объектный код целевой платформы приложения C. Чтобы получить транслируемый код на языке С, нужно указать параметр -C компилятору Vala. При наличии в программе графического интерфейса пользователя во время компиляции используется библиотека GTK+ (параметр --pkg gtk+-3.0 компилятора). Благодаря такому подходу откомпилированный код на Vala бинарно совместим с системными библиотеками, написанными на C. Для подключения сторонних библиотек к программам на языке Vala используются специальные vapi-файлы, в которых даётся описание интерфейса библиотеки. Для многих библиотек уже существуют vapi-файлы, входящие в штатную поставку компилятора Vala[2]. Кроме того, имеются vapi-файлы для библиотек, поддерживаемые сторонними пользователями, пока не включенные в штатную поставку[3].

Существуют неофициальные сборки компилятора для ОС Windows, поддерживаемые сторонними разработчиками.


Причины создания


Язык Vala был создан для эффективной разработки на платформе GNOME сложных прикладных и системных приложений с графическим интерфейсом пользователя, базирующимся на стандартной библиотеке GTK+, с применением современных языковых средств и техник программирования.

Объектно-ориентированный язык Java предоставляет программисту достаточно возможностей, но программы исполняются в виртуальных машинах, что делает невозможным прямое обращение к ним из бинарного кода на языке 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 разрабатывается:



Расширенные примеры кода


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


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



Основные примеры


Простой Hello, World:

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

Компиляция и запуск:

$ valac hello.vala

$ ./hello

В режиме "скриптинга":

#!/usr/bin/vala
print ("hello, world\n");

Запуск: сделать файл исполнительным использовать команду vala (тогда первая строчка не обязательна)

$ vala hello.vala


Чтение ввода пользователя

void main () {
    stdout.printf ("Введите свое имя: ");
    string name = stdin.read_line ();
    stdout.printf (@"Привет, $name!\n");
}

Чтение и запись в файл

Это очень простая обработка текстовых файлов. Для продвинутого ввода/вывода используйте мощные потоковые классы GIO.

void main () {
    try {
        // Запись
        string content = "hello, world";
        FileUtils.set_contents (data.txt, content);

        // Чтение
        string read;
        FileUtils.get_contents (filename, out read);

        stdout.printf (@"The content of file '$filename' is:\n$read\n");
    } catch (FileError e) {
        stderr.printf (@"$(e.message)\n");
    }
}

Порождение процессов

void main () {
    try {
        // Non-blocking
        Process.spawn_command_line_async ("ls");

        // Blocking (waits for the process to finish)
        Process.spawn_command_line_sync ("ls");

        // Blocking with output
        string standard_output, standard_error;
        int exit_status;
        Process.spawn_command_line_sync ("ls", out standard_output,
                                               out standard_error,
                                               out exit_status);
        //print output of process exec
        stdout.printf (standard_output);
    } catch (SpawnError e) {
        stderr.printf ("%s\n", e.message);
    }
}

Продвинутый пример

/* class derived from GObject */
public class AdvancedSample : Object {

    /* automatic property, data field is implicit */
    public string name { get; set; }

    /* signal */
    public signal void foo ();

    /* creation method */
    public AdvancedSample (string name) {
        this.name = name;
    }

    /* public instance method */
    public void run () {
        /* assigning anonymous function as signal handler */
        this.foo.connect ((s) => {
            stdout.printf ("Lambda expression %s!\n", this.name);
        });

        /* emitting the signal */
        this.foo ();
    }

    /* application entry point */
    public static int main (string[] args) {
        foreach (string arg in args) {
            var sample = new AdvancedSample (arg);
            sample.run ();
            /* "sample" is freed as block ends */
        }
        return 0;
    }
}

Работа со строками


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



Интерфейс пользователя



Мультимедиа и графика



GNOME платформа



Использование GLib



Работа с базами данных



Разное



Примечания


  1. Vala 0.56.3.
  2. Bindings Status (англ.). Дата обращения: 7 сентября 2011. Архивировано 10 марта 2012 года.
  3. 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 Yes Yes Yes Partial Video("Vala Debug" on YouTube)
Kate Yes

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


Другие инструменты



Ссылки





Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.org внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.org - проект по пересортировке и дополнению контента Википедии