Vala
| Vala | |
|---|---|
| Файл:Vala Logo New.svg | |
| Семантика: |
структурное, императивное, объектно-ориентированное программирование |
| Автор(ы): |
Йюрг Биллетер, Раффаэле Сандрини |
| Релиз: |
0.57.0 (11 апреля 2023 года) |
| Типизация данных: |
строгая, статическая |
| Основные реализации: | |
| Испытал влияние: | |
| Лицензия | |
Vala — компилируемый объектно-ориентированный язык программирования, разработанный для упрощения создания приложений на базе системных библиотек GObject и GLib. Основная цель Vala — предоставить разработчикам синтаксис, близкий к современным языкам (таким как C#), при сохранении производительности и бинарной совместимости с языком C. Ключевой особенностью Vala является то, что его исходный код транслируется в C-код, который затем компилируется стандартным C-компилятором (например, GCC). Этот подход позволяет избежать использования виртуальной машины или дополнительной среды выполнения (runtime), обеспечивая высокую производительность и низкое потребление ресурсов.
Концепция и философия[править]
Язык был создан для решения следующих задач: Сокращение шаблонного кода: Автоматизировать рутинные операции при работе с GObject/C, такие как определение классов, свойств и сигналов. Современный синтаксис: Предоставить высокоуровневые конструкции, такие как пространства имён, свойства, делегаты, лямбда-функции и обработку исключений. Производительность и совместимость: Обеспечить производительность на уровне C и полную совместимость с существующими C-библиотеками. Автоматическое управление памятью: Использовать встроенный в GObject механизм подсчёта ссылок для упрощения работы с памятью.
История[править]
Язык был представлен в 2006 году сообществом разработчиков GNOME при участии Мигеля де Икаса. К 2008 году он стал стабильной частью GNOME SDK, а в последующие годы его инструментарий (компилятор valac, генератор привязок vapigen) и интеграция с системами сборки (Meson, Autotools) были значительно улучшены.
Ключевые особенности языка[править]
Объектно-ориентированная модель: Классы, интерфейсы, наследование, пространства имён.
Свойства и сигналы: Упрощённый синтаксис для работы с ключевыми механизмами GObject.
Автоматическое управление памятью: На основе подсчёта ссылок.
Обработка исключений: Конструкции try/catch/finally и тип Error.
Функциональные элементы: Делегаты, анонимные функции и лямбды.
Обобщённые типы (Generics): Поддержка параметризованных классов и методов.
Асинхронность: Встроенная поддержка async/await на базе GLib.MainLoop.
Атрибуты: Метаданные для управления генерацией C-кода.
Пример кода[править]
Пример демонстрирует объявление класса с автоматическим свойством и сигналом, что является типичным для Vala.
// Класс, наследуемый от GObject.Object
public class Speaker : GLib.Object {
Generated code
// Автоматическое свойство с геттером и сеттером
public string name { get; set; }
// Объявление сигнала с одним строковым параметром
[Signal]
public signal void spoke (string message);
// Метод, который отправляет (излучает) сигнал
public void say_hello () {
spoke ("Hello, " + this.name);
}
Use code with caution.
}
Архитектура и компиляция[править]
Компилятор Vala (valac) анализирует исходный .vala-файл и, используя файлы описаний API (.vapi), транслирует его в промежуточный .c-файл. Этот C-файл затем компилируется и линкуется с необходимыми библиотеками (например, libgobject-2.0). В результате получается нативное приложение без дополнительных зависимостей, кроме указанных C-библиотек.
Преимущества и недостатки[править]
| Преимущества | Недостатки |
|---|---|
| Высокая производительность, сравнимая с C | Сильная зависимость от экосистемы GObject/GLib |
| Лаконичный и современный синтаксис | Относительно небольшое сообщество разработчиков |
| Отсутствие виртуальной машины и runtime | Отладка может быть сложнее из-за трансляции в C |
| Полная интеграция с C-библиотеками | Ограниченная популярность за пределами Linux-экосистем |
Области применения и известные проекты[править]
Vala широко используется для разработки приложений и компонентов для рабочего стола GNOME и других сред, использующих GTK. Настольные приложения: Файловые менеджеры, почтовые клиенты, календари. Системные утилиты и демоны: Инструменты, требующие высокой производительности и интеграции с системными библиотеками Linux.
Примеры проектов[править]
Geary — почтовый клиент. Pantheon Files — файловый менеджер в elementary OS. GNOME Calendar — стандартный календарь GNOME. gThumb — менеджер и редактор изображений.
См. также[править]
Ссылки[править]
- https://vala.dev/ — официальный сайт Vala
- Репозиторий на GitLab GNOME
- Документация по API (Valadoc)
Основные языки программирования (сравнение, по синтаксису • IDE • история • хронология • список по категориям) ↑ | |
|---|---|
| Используемые в разработке |
Ада • A+ • APL • Atlast Forth • AWL • Язык ассемблера • ActionScript • ABAP/4 • AutoIt • AWK • BeanShell • Бейсик • Си • Кобол • C++ • C# • Cω • Clarion • Clojure • ColdFusion • Common Lisp • D • dBase • Delphi • DuAL • Eiffel • Erlang • Euphoria • F# • Форт • Фортран • Gambas • Go • Groovy • HAL/S • Haskell • IBM PL/S • Icon • Iridium • Java • JavaScript • Limbo • Lua • Модула-3 • Object Pascal • Objective-C • OCaml • Oz • Parser • Паскаль • Компонентный Паскаль • Perl • Pixilang • PHP • PowerBASIC • Python • ПЛ/1 • Пролог • Qi • Ruby • Scala • Scheme • Seed7 • Smalltalk • SQL • PL/SQL • Tcl • TouchDesigner • Vala • Visual Basic (.NET) • X-Robot |
| Академические |
Agda • Clean • Curry • Idris • Лого • ML • Оберон • Planning C • РЕФАЛ • Симула • |
| IEC 61131-3 |
Instruction List • ST • FBD • Ladder Diagram (LD) • SFC |
| Прочие |
Алгол • Алгол 68 • Модула-2 • Миранда • Hope • НОРМИН • Санда |
| Эзотерические |
HQ9+/HQ9++ • INTERCAL • Brainfuck • Befunge • Malbolge • Piet • Spoon • Unlambda • Whitespace • FALSE • LOLCODE • Глагол |
| Визуальные |
G (LabVIEW) • Microsoft VPL • Sikuli • VisSim • Алиса • ДРАКОН • Скретч |
| Прочее |
Динамические • Для создания компьютерных игр • Компилируемые • С ключевыми словами не на английском языке • С C-style синтаксисом • Синтаксис • YoptaScript |
↑ | |
|---|---|
| Версии | |
| ПО | |
| Связанное | |