Jump to content

Вала (язык программирования)

Налить
Парадигма Мультипарадигмальность : императивная , структурированная , объектно-ориентированная.
Разработчик Юрг Биллетер, Рафаэле Сандрини, Рико Тцшиххольц
Впервые появился 2006 год ; 18 лет назад ( 2006 )
Стабильная версия
0.57.0  Отредактируйте это в Викиданных / 11 апреля 2023 г .; 15 месяцев назад ( 11 апреля 2023 г. )
Дисциплина набора текста Статический , сильный , предполагаемый , структурный.
ТЫ Кроссплатформенность поддерживается GLib , но распространяется только в виде исходного кода.
Лицензия LGPLv2.1+
Расширения имен файлов .pour, .герб
Веб-сайт налить .dev
Под влиянием
C , C++ , C# , D , Java , Бу

Vala — это объектно-ориентированный язык программирования с автономным компилятором , который генерирует код C и использует систему GObject .

Vala синтаксически похожа на C# и включает в себя такие заметные функции, как анонимные функции , сигналы , свойства , дженерики , вспомогательное управление памятью , обработку исключений , вывод типа и операторы foreach . [1] Его разработчики, Юрг Биллетер и Раффаэле Сандрини, хотели перенести эти функции в простую среду выполнения C с небольшими накладными расходами и без специальной поддержки во время выполнения, ориентируясь на объектную систему GObject . Вместо прямой компиляции в машинный код или язык ассемблера, он компилируется в промежуточный язык более низкого уровня . Он компилируется из исходного кода в C, который затем компилируется с помощью компилятора C для данной платформы, например GCC или Clang . [2]

Использование функциональности из библиотек библиотеки нативного кода требует написания vapi-файлов, определяющих интерфейсы . Написание этих определений интерфейсов для библиотек C хорошо документировано. Привязки уже доступны для большого количества библиотек, включая библиотеки, не основанные на GObject, такие как мультимедийная библиотека SDL и OpenGL .

Описание

[ редактировать ]

Vala — это язык программирования, который сочетает в себе высокую во время выполнения производительность языков сценариев во время сборки с производительностью языков программирования низкого уровня . возможности современного языка программирования, Его цель — предоставить разработчикам GNOME не предъявляя каких-либо дополнительных требований к среде выполнения и не используя другой ABI по сравнению с приложениями и библиотеками, написанными на C. Синтаксис Vala аналогичен C# , модифицирован для лучшего соответствия системе типов GObject. . [3]

Vala была задумана Юргом Биллетером и реализована им и Раффаэле Сандрини, которые хотели иметь альтернативу более высокого уровня для разработки приложений GNOME вместо C. Им нравился синтаксис и семантика C#, но они не хотели использовать Mono , поэтому они закончили компилятор в мае 2006 года. Первоначально он был загружен с использованием C, а год спустя (с выпуском версии 0.1.0 в июле 2007 года) компилятор Vala стал автономным . В 2008 году был создан язык Genie, предоставляющий Python . компилятору Vala синтаксис, подобный [4] По состоянию на 2021 год текущая ветка стабильной версии с долгосрочной поддержкой — 0.48, и язык находится в стадии активной разработки с целью выпуска стабильной версии 1.0. [5]

Версия Дата выпуска [6]
Старая версия, больше не поддерживается: 0.0.1. 2006-07-15
Старая версия, больше не поддерживается: 0.1.0. 2007-07-09
Старая версия, больше не поддерживается: 0.10.0. 2010-09-18
Старая версия, больше не поддерживается: 0.20.0. 2013-05-27
Старая версия, больше не поддерживается: 0.30.0. 2015-09-18
Старая версия, больше не поддерживается: 0.40.0. 2018-05-12
Старая версия, больше не поддерживается: 0.42.0. 2018-09-01
Старая версия, больше не поддерживается: 0.44.0. 2019-05-09
Старая версия, больше не поддерживается: 0.46.0. 2019-09-05
Старая версия, больше не поддерживается: 0.48.0. 2020-03-03
Старая версия, больше не поддерживается: 0.50.0. 2020-09-10
Старая версия, больше не поддерживается: 0.52.0. 2021-05-17
Старая версия, больше не поддерживается: 0.54.0. 2021-09-16
Текущая стабильная версия: 0.56.14. 2023-11-12
Легенда:
Старая версия
Older version, still maintained
Последняя версия
Latest preview version
Future release
Для старых версий указаны только первые выпуски.

Языковой дизайн

[ редактировать ]

Vala использует GLib и ее подмодули ( GObject , GModule, GThread, GIO) в качестве базовой библиотеки, которая доступна для большинства операционных систем и предлагает такие вещи, как независимая от платформы потоковая обработка , ввод/вывод , управление файлами , сетевые сокеты , плагины , регулярные выражения и т. д. и т. д. Синтаксис Vala в настоящее время поддерживает следующие функции современного языка:

Графические пользовательские интерфейсы можно разрабатывать с помощью набора инструментов GTK GUI и конструктора Glade GUI .

Управление памятью

[ редактировать ]

Для управления памятью система GType или GObject обеспечивает подсчет ссылок . В C программист должен вручную управлять добавлением и удалением ссылок, но в Vala управление таким счетчиком ссылок автоматизировано, если программист использует встроенные в язык типы ссылок, а не простые указатели. Единственная деталь, о которой стоит побеспокоиться, — это избегать генерации опорных циклов , поскольку в этом случае эта система управления памятью не будет работать корректно. [7]

Vala также позволяет вручную управлять памятью с помощью указателей .

Привязки

[ редактировать ]

Vala предназначена для обеспечения доступа во время выполнения к существующим библиотекам C, особенно к библиотекам на основе GObject , без необходимости привязок во время выполнения. Чтобы использовать библиотеку с Vala, все, что нужно, — это файл API (.vapi), содержащий объявления классов и методов в синтаксисе Vala. Однако библиотеки C++ не поддерживаются. В настоящее время файлы vapi для большей части проекта GNU и платформы GNOME включены в каждый выпуск Vala, включая GTK . Существует также библиотека Gee, написанная на Vala, которая предоставляет GObject интерфейсы и классы на основе для часто используемых структур данных . [8]

Также должно быть легко написать генератор привязок для доступа к библиотекам Vala из приложений, написанных на других языках, например, C#, поскольку парсер Vala написан как библиотека, чтобы вся информация времени компиляции была доступна при создании привязки. .

Инструменты

[ редактировать ]

Редакторы

[ редактировать ]

За последние годы инструментарий для разработки Vala значительно улучшился. Ниже приведен список некоторых популярных IDE и текстовых редакторов с плагинами, которые добавляют поддержку программирования на Vala:

Кодовый интеллект

[ редактировать ]

В настоящее время существует два активно развивающихся языковых сервера , которые обеспечивают анализ кода для Vala следующим образом:

  • vala-lang/vala-language-server, предназначенный для любого редактора, поддерживающего LSP , включая VSCode, vim и GNOME Builder. [12]
  • esodan/gvls, в настоящее время языковой сервер по умолчанию для Vala в GNOME Builder и обеспечивает поддержку любого редактора с поддержкой LSP. [13]

Системы сборки

[ редактировать ]

В настоящее время существует ряд систем сборки , поддерживающих Vala, включая Automake , CMake , Meson и другие. [14]

Отладка программ Vala может выполняться с помощью GDB или LLDB . Для отладки в IDE ,

Привет, мир

[ редактировать ]

Простая программа « Hello, World! » на языке Vala:

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

Как можно отметить, в отличие от C или C++, в Vala нет заголовочных файлов. Связывание с библиотеками осуществляется путем указания --pkg параметры во время компиляции. Более того, библиотека GLib всегда связана и ее пространство имен можно опустить ( print на самом деле GLib.print).

Объектно-ориентированное программирование

[ редактировать ]

Ниже приведена более сложная версия, которая определяет подкласс HelloWorld наследование от базового класса GLib.Object, он же класс GObject . возможности Vala Он демонстрирует некоторые объектно-ориентированные :

class HelloWorld: Object {
	private uint year = 0;
	
	public HelloWorld () {
	}
	
	public HelloWorld.with_year (int year) {
		if (year>0)
			this.year = year;
	}

	public void greeting () {
		if (year == 0)
			print ("Hello World\n");
		else
			/* Strings prefixed with '@' are string templates. */
			print (@"Hello World, $(this.year)\n"); 
	}
}

void main (string[] args) {
	var helloworld = new HelloWorld.with_year (2021);
	helloworld.greeting ();
}

Как и в случае с библиотекой GObject , Vala не поддерживает множественное наследование , но класс в Vala может реализовывать любое количество интерфейсов , которые могут содержать реализации по умолчанию для своих методов. Вот фрагмент кода, демонстрирующий интерфейс Vala с реализацией по умолчанию (иногда называемый миксином ) .

using GLib;

interface Printable {
	public abstract string print ();

	public virtual string pretty_print () {
		return "Please " + print ();
	}
}

class NormalPrint: Object, Printable {
	string print () {
		return "don't forget about me";
	}
}

class OverridePrint: Object, Printable {
	string print () {
		return "Mind the gap";
	}

	public override string pretty_print () {
		return "Override";
	}
}

void main (string[] args) {
	var normal = new NormalPrint ();
	var overridden = new OverridePrint ();

	print (normal.pretty_print ());
	print (overridden.pretty_print ());
}

Сигналы и обратные вызовы

[ редактировать ]

Ниже приведен базовый пример, показывающий, как определить сигнал в некомпактном классе, в котором система сигналов встроена Vala через GLib. Затем функции обратного вызова регистрируются для сигнала экземпляра класса. Экземпляр может излучать сигнал, и каждая функция обратного вызова (также называемая обработчиком), подключенная к сигналу для экземпляра, будет вызываться в том порядке, в котором они были подключены:

class Foo {
    public signal void some_event ();   // definition of the signal

    public void method () {
        some_event ();                  // emitting the signal (callbacks get invoked)
    }
}

void callback_a () {
    stdout.printf ("Callback A\n");
}

void callback_b () {
    stdout.printf ("Callback B\n");
}

void main () {
    var foo = new Foo ();
    foo.some_event.connect (callback_a);      // connecting the callback functions
    foo.some_event.connect (callback_b);
    foo.method ();
}

Новый поток в Vala — это часть кода, например функция, которую требуется выполнить одновременно во время выполнения. Создание и синхронизация новых потоков выполняются с помощью Thread класс в GLib, который принимает функцию в качестве параметра при создании новых потоков, как показано в следующем (очень упрощенном) примере:

int question(){
    // Some print operations 
    for (var i = 0; i < 3; i++){
        print (".");
        Thread.usleep (800000);
        stdout.flush ();
    }

    return 42;
}

void main () {
    if (!Thread.supported ()) {
        stderr.printf ("Cannot run without thread support.\n");
        return;
    }
    print ("The Ultimate Question of Life, the Universe, and Everything");
    // Generic parameter is the type of return value
    var thread = new Thread<int> ("question", question);

    print(@" $(thread.join ())\n");
}

Графический интерфейс пользователя

[ редактировать ]

Ниже приведен пример использования GTK для создания графического интерфейса «Hello, World!» программа (см. также GTK hello world ) в 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;
}

Заявление Gtk.main () создает и запускает основной цикл прослушивания событий, которые передаются через сигналы функциям обратного вызова. Поскольку в этом примере используется пакет GTK , для него требуется дополнительный --pkg параметр (который вызывает pkg-config C в бэкэнде ) для компиляции:

valac --pkg gtk+-3.0 hellogtk.vala

См. также

[ редактировать ]
  • Shotwell — органайзер изображений, написанный на языке Vala.
  • Geary — почтовый клиент, написанный на Vala.
  • элементарная ОС , дистрибутив Linux со средой рабочего стола, запрограммированной в основном на Vala.
  • Budgie — среда рабочего стола Linux, написанная в основном на Vala.
  1. ^ «Вала: высокоуровневое программирование с меньшим количеством жира» . Арс Техника . 2 сентября 2007 года . Проверено 13 декабря 2011 г.
  2. ^ «Взгляд на два новых языка: Vala и Clojure» .
  3. ^ «Вала · GitLab» . ГНОМ . Проверено 16 марта 2021 г.
  4. ^ Янчар, М.; Чодарев, С. (2015). «Генеративная среда для разработки настольных приложений Linux на базе CRUD». 2015 IEEE 13-я Международная научная конференция по информатике . Попрад, Словакия. стр. 133–138. дои : 10.1109/Информатика.2015.7377821 . Компилятор Vala также поддерживает язык Genie, который почти равен Vala, за исключением синтаксиса. Это особенно полезно для определения моделей из-за простого синтаксиса Genie, напоминающего Python.
  5. ^ Майкл Лауэр (2019). Знакомство с программированием Vala . дои : 10.1007/978-1-4842-5380-9 . ISBN  978-1-4842-5379-3 . S2CID   207911698 . Проверено 16 марта 2021 г.
  6. ^ «Вала-релизы» . Проект Вала . Проверено 18 марта 2021 г.
  7. ^ «Объяснение управления памятью Валы» .
  8. ^ «Либджи на Gitlab» .
  9. ^ Jump up to: а б «Программирование в Vala с помощью кода Visual Studio» . Проверено 17 марта 2021 г.
  10. ^ «Программирование в Vala с помощью текстового редактора Vim» . Проверено 17 марта 2021 г.
  11. ^ «Включить подсветку синтаксиса Vala и поддержку браузера кода в GNU Emacs» . Проверено 17 марта 2021 г.
  12. ^ «vala-lang/vala-language-server на Github» . Гитхаб . Проверено 17 марта 2021 г.
  13. ^ «esodan/gvls на GitLab» . Проверено 17 марта 2021 г.
  14. ^ «Вала Тулс» . Проверено 29 марта 2021 г.
[ редактировать ]
Сравнение с другими языками
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: cd2fed1b3057ce0f529eb1df3a316970__1722633060
URL1:https://arc.ask3.ru/arc/aa/cd/70/cd2fed1b3057ce0f529eb1df3a316970.html
Заголовок, (Title) документа по адресу, URL1:
Vala (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)