Vala

Материал из Циклопедии
Перейти к навигации Перейти к поиску
Vala
Файл:Vala_Logo_New.svg
Семантика:

структурное, императивное, объектно-ориентированное программирование

Автор(ы):

Йюрг Биллетер, Раффаэле Сандрини

Релиз:

0.57.0 (11 апреля 2023 года; 827 дней тому назад)

Типизация данных:

строгая, статическая

Основные реализации:

GNOME Desktop Project

Испытал влияние:

Си, C++, Groovy, Java, C#

Лицензия

LGPL

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 — менеджер и редактор изображений.

См. также[править]

GObject GLib GTK C#

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

 
Сообщество

GNOME Foundation • GUADEC • Проект GNOME • GNOME Mobile & Embedded Initiative

Люди

Мигель де Икаса • Федерико Мена • Хэвок Пеннингтон

Компоненты

freedesktop.org • GNOME Shell • Cinnamon • GNOME Panel • Mutter

Приложения
Графика

GIMP • Inkscape

Игры

GNOME Games • gbrainy • Шахматы

Интернет

Web • Empathy • Ekiga / SFLphone • Maps

Мультимедиа

Audacious • Exaile • Puddletag • Rhythmbox • Sound Juicer • Quod Libet • Totem • Snappy

Образование
Офис

AbiWord • Dia • Gnumeric • Evince • Evolution • Gnome-dictionary

Разработка

Anjuta • Meld

Система

Nautilus • GParted • Disks • Usage • GNOME Terminal • GDM

Утилиты

Brasero • File Roller • Eye of GNOME • gedit • Tomboy / gnote • Calculator • Boxes • gnome-screenshot

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

GNOME Panel • Docky • GNOME Do • Avant Window Navigator • GNOME Shell • Cinnamon • MATE

Basic

Clutter • GDK • GTK+ • Mutter • Hildon • MetaTracker

Компоненты

ATK • Bonobo • D-Bus • GConf • dconf • Genie • GLib (GObject • GIO) • Keyring • GVFS • Librsvg • MetaTracker • Mono • NetworkManager • Pango • Vala • Enlightened Sound Daemon • Gamin • GnomeVFS • ORBit • libxslt • libxml2

freedesktop.org

D-Bus • GStreamer • Poppler • Wayland • X.Org Server • PulseAudio

Категория Категория • List-Class article Список • Страница проекта Проект • Викисклад Commons

 
Используемые
в разработке

Ада A+ APL Atlast Forth AWL Язык ассемблера ActionScript ABAP/4 AutoIt AWK BeanShell Бейсик Си Кобол 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 IridiumJava 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

Категория Языки программирования

 
Версии
ПО
Связанное