Vala: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Нет описания правки
Новый логотип
Метки: с мобильного устройства из мобильной версии через расширенный мобильный режим
 
(не показано 46 промежуточных версий 23 участников)
Строка 1: Строка 1:
{{язык программирования
{{язык программирования
| name = Vala
| name = Vala
| logo =
| logo =
| semantics = [[структурное программирование|структурное]], [[императивное программирование|императивное]], [[объектно-ориентированное программирование]]
| semantics = [[структурное программирование|структурное]], [[императивное программирование|императивное]], [[объектно-ориентированное программирование]]
| designer = Йюрг Биллетер, Раффаэле Сандрини
| designer = Йюрг Биллетер, Раффаэле Сандрини
| typing = строгая, статическая
| typing = строгая, статическая
Строка 8: Строка 8:
| license = [[LGPL]]
| license = [[LGPL]]
| influenced_by = [[Си (язык программирования)|Си]], [[C++]], [[Groovy]], [[Java]], [[C Sharp|C#]]
| influenced_by = [[Си (язык программирования)|Си]], [[C++]], [[Groovy]], [[Java]], [[C Sharp|C#]]
| influenced =
| influenced =
|latest_release_version = 0.42.2
|latest_release_version = 0..
|latest_release_date = 24.09.2018
|latest_release_date
}}
}}


Строка 17: Строка 17:
== Основные особенности ==
== Основные особенности ==


Vala по своему синтаксису очень похож на [[C Sharp|C#]] и полностью реализует [[объектно-ориентированный подход]]. Поддерживаются [[Интроспекция (программирование)|интроспекция]], [[Вывод типов|выведение типов]], [[сборка мусора (программирование)|сборка мусора]] основанная на [[Подсчёт ссылок|подсчёте ссылок]], [[Лямбда-выражения|лямбда-функции]], концепция [[Сигналы и слоты|сигналов и слотов]], подобная используемой в [[Qt]], но реализованная на уровне языка, [[Строковый тип|строковые типы]], [[обобщённое программирование]], срезы [[Массив (программирование)|массивов]], оператор перечисления элементов [[Коллекция (программирование)|коллекции]] [[Цикл просмотра#foreach|foreach]], [[Делегирование (программирование)|делегаты]], [[Замыкание (программирование)|замыкания]], [[Интерфейс (объектно-ориентированное программирование)|интерфейсы]], [[Свойство (программирование)|свойства]] и [[Обработка исключений|исключения]].
Vala по своему синтаксису очень похож на [[]] и полностью реализует [[объектно-ориентированный подход]]. Поддерживаются [[Интроспекция (программирование)|интроспекция]], [[Вывод типов|выведение типов]], [[сборка мусора (программирование)|сборка мусора]] основанная на [[Подсчёт ссылок|подсчёте ссылок]], [[Лямбда-выражения|лямбда-функции]], концепция [[Сигналы и слоты|сигналов и слотов]], подобная используемой в [[Qt]], но реализованная на уровне языка, [[Строковый тип|строковые типы]], [[обобщённое программирование]], срезы [[Массив (программирование)|массивов]], оператор перечисления элементов [[Коллекция (программирование)|коллекции]] [[Цикл просмотра#foreach|foreach]], [[Делегирование (программирование)|делегаты]], [[Замыкание (программирование)|замыкания]], [[Интерфейс (объектно-ориентированное программирование)|интерфейсы]], [[Свойство (программирование)|свойства]] и [[Обработка исключений|исключения]].


Особенность системы разработки состоит в том, что программа на Vala транслируется в программу на языке [[Си (язык программирования)|C]], которая в свою очередь компилируется в исполняемый код целевой платформы со стандартными [[Библиотека (программирование)|библиотеками]] [[Си (язык программирования)|C]], [[Glib]] и выполняется со скоростью откомпилированного в объектный код целевой платформы приложения [[Си (язык программирования)|C]]. Чтобы получить транслируемый код на языке С, нужно указать параметр -C компилятору Vala. При наличии в программе [[Графический интерфейс пользователя|графического интерфейса пользователя]] во время компиляции используется библиотека [[GTK+]] (параметр --pkg gtk+-3.0 компилятора). Благодаря такому подходу откомпилированный код на Vala [[Двоичная совместимость|бинарно совместим]] с систем��ыми библиотеками, написанными на C. Для подключения сторонних библиотек к программам на языке Vala используются специальные vapi-файлы, в которых даётся описание интерфейса библиотеки. Для многих библиотек уже существуют vapi-файлы, входящие в штатную поставку компилятора Vala<ref>{{cite web | url = http://live.gnome.org/Vala/BindingsStatus | accessdate = 2011-09-07 | title = Bindings Status | lang = en | description = | archiveurl = https://www.webcitation.org/664EzGUkh?url=http://live.gnome.org/Vala/BindingsStatus | archivedate = 2012-03-10 }}</ref>. Кроме того, имеются vapi-файлы для библиотек, поддерживаемые сторонними пользователями, пока не включенные в штатную поставку<ref>{{cite web | url = http://live.gnome.org/Vala/ExternalBindings | accessdate = 2011-09-07 | title = External Bindings | lang = en | description = | archiveurl = https://www.webcitation.org/664EzhZUW?url=http://live.gnome.org/Vala/ExternalBindings | archivedate = 2012-03-10 }}</ref>.
Особенность системы разработки состоит в том, что программа на Vala транслируется в программу на языке [[Си (язык программирования)|C]], которая в свою очередь компилируется в исполняемый код целевой платформы со стандартными [[Библиотека (программирование)|библиотеками]] [[Си (язык программирования)|C]], [[Glib]] и выполняется со скоростью откомпилированного в объектный код целевой платформы приложения [[Си (язык программирования)|C]]. Чтобы получить транслируемый код на языке С, нужно указать параметр -C компилятору Vala. При наличии в программе [[Графический интерфейс пользователя|графического интерфейса пользователя]] во время компиляции используется библиотека [[GTK+]] (параметр --pkg gtk+-3.0 компилятора). Благодаря такому подходу откомпилированный код на Vala [[Двоичная совместимость|бинарно совместим]] с системными библиотеками, написанными на C. Для подключения сторонних библиотек к программам на языке Vala используются специальные vapi-файлы, в которых даётся описание интерфейса библиотеки. Для многих библиотек уже существуют vapi-файлы, входящие в штатную поставку компилятора Vala<ref>{{cite web | url = http://live.gnome.org/Vala/BindingsStatus | accessdate = 2011-09-07 | title = Bindings Status | lang = en | description = | archiveurl = https://www.webcitation.org/664EzGUkh?url=http://live.gnome.org/Vala/BindingsStatus | archivedate = 2012-03-10 }}</ref>. Кроме того, имеются vapi-файлы для библиотек, поддерживаемые сторонними пользователями, пока не включенные в штатную поставку<ref>{{cite web | url = http://live.gnome.org/Vala/ExternalBindings | accessdate = 2011-09-07 | title = External Bindings | lang = en | description = | archiveurl = https://www.webcitation.org/664EzhZUW?url=http://live.gnome.org/Vala/ExternalBindings | archivedate = 2012-03-10 }}</ref>.


Существуют неофициальные сборки компилятора для ОС [[Windows]], поддерживаемые сторонними разработчиками.
Существуют неофициальные сборки компилятора для ОС [[Windows]], поддерживаемые сторонними разработчиками.
Строка 27: Строка 27:
Язык Vala был создан для эффективной разработки на платформе GNOME сложных прикладных и системных приложений с [[Графический интерфейс пользователя|графическим интерфейсом]] пользователя, базирующимся на стандартной библиотеке GTK+, с применением современных языковых средств и техник программирования.
Язык Vala был создан для эффективной разработки на платформе GNOME сложных прикладных и системных приложений с [[Графический интерфейс пользователя|графическим интерфейсом]] пользователя, базирующимся на стандартной библиотеке GTK+, с применением современных языковых средств и техник программирования.


[[Объектно-ориентированное программирование|Объектно-ориентированные]] языки [[Java]] и [[C Sharp|C#]] предоставляют программисту достаточно возможностей, но их программы исполняются в виртуальных машинах, что делает невозможным прямое обращение к ним из бинарного кода на языке [[Си (язык программирования)|C]], как и использование в таких программах системных низкоуровневых библиотек, таких как GObject. Поэтому эти языки, как и любые другие, исполняющие байт-код в [[виртуальная машина|виртуальных машинах]], не могут быть приняты в рамках платформы [[GNOME]]. Управляемые приложения имеют также ограничения в производительности, что является критичным для работы некоторых программ (например, системных), которые должны исполняться в бинарном коде ([[ABI]]). Это и стало причиной появления нового языка Vala.
[[Объектно-ориентированное программирование|Объектно-]] [[Java]] программисту достаточно возможностей, но программы исполняются в виртуальных машинах, что делает невозможным прямое обращение к ним из бинарного кода на языке [[Си (язык программирования)|C]], как и использование в таких программах системных низкоуровневых библиотек, таких как GObject. Поэтому , как и любые другие, исполняющие байт-код в виртуальных машинах, не быть в рамках платформы [[GNOME]]. Управляемые приложения имеют также ограничения в производительности, что является критичным для работы некоторых программ (например, системных), которые должны исполняться в бинарном коде ([[ABI]]). Это и стало причиной появления нового языка Vala.


== Примеры кода ==
== Примеры кода ==


=== Пример № 1 ===
=== Пример № 1 ===
Простая программа «[[Программа Hello world|Hello World]]»
Простая программа «[[Программа Hello world|Hello World]]»


<source lang="vala">
<source lang="vala">
int main ()
main()
{
{
print ("Hello World\n");
("Hello World\n");
return 0;
}
}
</source>
</source>


=== Пример № 2 ===
=== Пример № 2 ===
Программа «[[Программа Hello world|Hello World]]», демонстрирующая [[Объектно-ориентированное программирование|объектно-ориентированный]] подход
Программа «[[Программа Hello world|Hello World]]», демонстрирующая [[Объектно-ориентированное программирование|объектно-ориентированный]] подход


<source lang="vala">
<source lang="vala">
class Sample : GLib.Object
class Sample
{
{
void run ()
void run()
{
{
stdout.printf ("Hello World\n");
stdout.printf("Hello World\n");
}
}
static int main (string[] args)
static int main(string[] args)
{
{
var sample = new Sample ();
var sample = new Sample();
sample.run ();
sample.run();
return 0;
return 0;
}
}
}
}
</source>
</source>


=== Пример № 3 ===
=== Пример № 3 ===
Это пример использования [[GTK+]] для создания [[Graphical user interface|GUI]] программ на языке Vala:
Это пример использования [[GTK+]] для создания [[Graphical user interface|GUI]]программ на языке Vala:


<source lang="vala">
<source lang="vala">
using Gtk;
using Gtk;
int main (string[] args) {
int main(string[] args)
{
Gtk.init (ref args);
Gtk.init(ref args);
var window = new Window ();
var window = new Window();
window.title = "Hello, World!";
window.title = "Hello, World!";
window.border_width = 10;
window.border_width = 10;
window.window_position = WindowPosition.CENTER;
window.window_position = WindowPosition.CENTER;
window.set_default_size (350, 70);
window.set_default_size(350, 70);
window.destroy.connect (Gtk.main_quit);
window.destroy.connect(Gtk.main_quit);
var label = new Label ("Hello, World!");
var label = new Label("Hello, World!");
window.add (label);
window.add(label);
window.show_all();
window.show_all();
Строка 87: Строка 87:
}
}
</source>
</source>

== Применение ==

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

* [[Elementary OS]] — дистрибутив, разработчики которого большое внимание уделяют дизайну системы
*[https://github.com/akiraux/Akira Akira] — нативное приложение для [[GNU Linux|GNU/Linux]], которое по замыслу создателей должно стать основным инструментом UX-протипирования и разработки для пользователей свободного программного обеспечения
* [[Geary]] — почтовый клиент
* [[Budgie_(графическая_оболочка)|Budgie]] — графическая оболочка на базе [[GTK+]]
*[https://valadoc.org/gee-0.8/index.htm Gee] — библиотека коллекций
*[https://web.archive.org/web/20150419223441/http://www.ambitionframework.org/wiki/etc/faq Ambition] — Веб-фреймворк по модели [[Model-View-Controller|MVC]]. [https://web.archive.org/web/20150419223517/http://www.ambitionframework.org/wiki/tutorial/blog Пример] создания простого блога.
*[https://valum-framework.readthedocs.io/en/stable/getting-started/ Valum] — Веб-фреймворк
*[https://gitlab.gnome.org/esodan/libvda VDA] — обертка написанной на си библиотеки [https://wiki.gnome.org/Projects/Vala/GDA GDA], которая предоставляет единый набор подключаемых API-интерфейсов, определенных как можно более универсальными, чтобы через них можно было получить доступ к любому типу источника данных ([[База данных|базы данных]], [[информационные серверы]], почтовые пулы). На данный момент поддерживает [[SQLite]] (и SQLCipher), [[MySQL]], [[PostgreSQL]], [[Microsoft Access|MSAccess]], [[Berkeley DB|Berkeley Db]] (и является расширением SQL), [[Oracle Database|Oracle]] и [[Jdbc|JDBC]] (разрешает доступ к любой базе данных через драйвер [[Java Database Connectivity|JDBC]]), работа ведется для других типов баз данных.

<br />

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

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

* [https://wiki.gnome.org/Projects/Vala/BasicSample/ru Основные примеры]

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


Простой Hello, World:<syntaxhighlight lang="vala">
void main () {
print ("Hello, world\n");
}
</syntaxhighlight>Компиляция и запуск:

<code>$ valac hello.vala</code>

<code>$ ./hello</code>

В режиме "скриптинга":<syntaxhighlight lang="vala">
#!/usr/bin/vala
print ("hello, world\n");
</syntaxhighlight>Запуск: сделать файл исполнительным использовать команду vala (тогда первая строчка не обязательна)

<code>$ vala hello.vala</code>

===== Чтение ввода пользователя =====
<syntaxhighlight lang="vala">
void main () {
stdout.printf ("Введите свое имя: ");
string name = stdin.read_line ();
stdout.printf (@"Привет, $name!\n");
}
</syntaxhighlight>

===== Чтение и запись в файл =====
Это очень простая обработка текстовых файлов. Для продвинутого ввода/вывода используйте [https://wiki.gnome.org/Vala/GIOSamples мощные потоковые классы GIO].<syntaxhighlight lang="vala" line="1">
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");
}
}
</syntaxhighlight>

===== Порождение процессов =====
<syntaxhighlight lang="vala">
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);
}
}
</syntaxhighlight>

==== Продвинутый пример ====
<syntaxhighlight lang="vala">
/* 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;
}
}
</syntaxhighlight>

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

*<syntaxhighlight lang="vala">
void println (string str) {
stdout.printf ("%s\n", str);
}

void main () {

/* Strings are of data type 'string' and can be concatenated with the plus
* operator resulting in a new string:
*/

string a = "Concatenated ";
string b = "string";
string c = a + b;
println (c);

/* If you want to have a mutable string you should use StringBuilder.
* With its help you are able to build strings ad libitum by prepending,
* appending, inserting or removing parts. It's faster than multiple
* concatenations. In order to obtain the final product you access the
* field '.str'.
*/

var builder = new StringBuilder ();
builder.append ("built ");
builder.prepend ("String ");
builder.append ("StringBuilder");
builder.append_unichar ('.');
builder.insert (13, "by ");
println (builder.str); // => "String built by StringBuilder."

/* You can create a new string according to a format string by calling the
* method 'printf' on it. Format strings follow the usual rules, known from
* C and similar programming languages.
*/

string formatted = "PI %s equals %g.".printf ("approximately", Math.PI);
println (formatted);

/* Strings prefixed with '@' are string templates. They can evaluate
* embedded variables and expressions prefixed with '$'.
* Since Vala 0.7.8.
*/

string name = "Dave";
println (@"Good morning, $name!");
println (@"4 + 3 = $(4 + 3)");

/* The equality operator compares the content of two strings, contrary to
* Java's behaviour which in this case would check for referential equality.
*/

a = "foo";
b = "foo";
if (a == b) {
println ("String == operator compares content, not reference.");
} else {
assert_not_reached ();
}

/* You can compare strings lexicographically with the < and > operators: */

if ("blue" < "red" && "orange" > "green") {
// That's correct
}

// Switch statement

string pl = "vala";
switch (pl) {
case "java":
assert_not_reached ();
case "vala":
println ("Switch statement works fine with strings.");
break;
case "ruby":
assert_not_reached ();
}

/* Vala offers a feature called verbatim strings. These are strings in
* which escape sequences (such as \n) won't be interpreted, line breaks
* will be preserved and quotation marks don't have to be masked. They are
* enclosed with triple double quotation marks. Possible indentations
* after a line break are part of the string as well. Note that syntax
* highlighting in this Wiki is not aware of verbatim strings.
*/

string verbatim = """This is a so-called "verbatim string".
Verbatim strings don't process escape sequences, such as \n, \t, \\, etc.
They may contain quotes and may span multiple lines.""";
println (verbatim);

/* You can apply various operations on strings. Here's a small selection: */

println ("from lower case to upper case".up ());
println ("reversed string".reverse ());
println ("...substring...".substring (3, 9));

/* The 'in' keyword is syntactic sugar for checking if one string contains
* another string. The following expression is identical to
* "swordfish".contains ("word")
*/

if ("word" in "swordfish") {
// ...
}

// Regular expressions

try {
var regex = new Regex ("(jaguar|tiger|leopard)");
string animals = "wolf, tiger, eagle, jaguar, leopard, bear";
println (regex.replace (animals, -1, 0, "kitty"));
} catch (RegexError e) {
warning ("%s", e.message);
}
}
</syntaxhighlight>
*[https://wiki.gnome.org/Projects/Vala/CharacterSample Работа с символами]
*[https://wiki.gnome.org/Projects/Vala/SignalsAndCallbacks Сигналы и Слоты]
*[https://wiki.gnome.org/Projects/Vala/PropertiesSample Работа со свойствами]
*[https://wiki.gnome.org/Projects/Vala/ConditionalCompilationSample Пример условной компиляции]

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

* [https://wiki.gnome.org/Projects/Vala/GeeSamples Gee] (Коллекции: lists, sets, maps, iterables)
* [https://wiki.gnome.org/Projects/Vala/GIOSamples GIO] (Ввод/вывод, файловые операции)
* [https://wiki.gnome.org/Projects/Vala/GIOCompressionSample Сжатие GIO] (упаковка/распаковка файлов)
* [https://wiki.gnome.org/Projects/Vala/GSettingsSample Настройки GIO] (Параметры приложения)
* [https://wiki.gnome.org/Projects/Vala/GIONetworkingSample Работа с сетью GIO] (Работа с сетевыми сокетами)
* [https://wiki.gnome.org/Projects/Vala/LibSoupSample Примеры Soup] (HTTP клиент / сервер)
* [https://wiki.gnome.org/Projects/Vala/DBusServerSample Базовые примеры работы с D-Bus клиент/сервер] (Взаимодействие между процессами)
* [https://wiki.gnome.org/Projects/Vala/DBusClientSamples Пример клиента D-Bus] (пример клиента D-Bus "real world")
* [https://wiki.gnome.org/Projects/Vala/AsyncSamples Методы Async] (использование специального синтаксиса Vala для асинхронных операций)

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

* [https://wiki.gnome.org/Projects/Vala/GTKSample GTK+] (GUI toolkit)
* [https://wiki.gnome.org/Projects/Vala/CustomWidgetSamples GTK+ Custom Widget Samples]
* [https://wiki.gnome.org/Projects/Vala/GtkCellRendererSample GTK+ Custom CellRenderer Samples]
* [https://wiki.gnome.org/Projects/Vala/DragAndDropSample GTK+ Drag and Drop]
* [https://gitlab.com/doublehourglass/dnd_order_list_box GTK DnD Order ListBox widget] by doublehourglass
* [https://wiki.gnome.org/Projects/Vala/GdlSample GDL Sample] (Docking widgets)
* [https://wiki.gnome.org/Projects/Vala/MxSample Mx Samples] (MeeGo netbook UX toolkit)
* [https://wiki.gnome.org/Projects/Vala/WebKitSample WebKit Sample] (Embeddable web browser engine)
* [https://wiki.gnome.org/Projects/Vala/StatusIcon StatusIcon Sample] (Showing icons in the systray/notification area)

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

* [https://wiki.gnome.org/Projects/Vala/GStreamerSample GStreamer Samples] (Multimedia: Audio, Video)
* [https://wiki.gnome.org/Projects/Vala/CairoSample Cairo Sample] (2D vector graphics)
* [https://wiki.gnome.org/Projects/Vala/ClutterSamples Clutter Sample] (Animation framework)
* [https://wiki.gnome.org/Projects/Vala/PangoCairoSample Pango Sample] (Font rendering)
* [https://wiki.gnome.org/Projects/Vala/PopplerSample Poppler Sample] (PDF rendering)
* [https://wiki.gnome.org/Projects/Vala/SDLSample SDL Samples] (Full screen graphics and game programming)
* [https://wiki.gnome.org/Projects/Vala/OpenGLSamples OpenGL Samples] (2D and 3D graphics)
* [https://wiki.gnome.org/Projects/Vala/PulseAudioSamples PulseAudio Samples] (Audio playback)

=== GNOME платформа ===

* [https://wiki.gnome.org/Projects/Vala/GnomeDesktopAndGMenuExample Gnome-Desktop и GMenu] (Inspecting the application menu)
* [https://wiki.gnome.org/Projects/Vala/Gedit3PluginSample Gedit 3.0 Plugin]

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

* [https://wiki.gnome.org/Projects/Vala/TimeSample Date and Time Sample]
* [https://wiki.gnome.org/Projects/Vala/IoChannelsSample IO Channels Sample]
* [https://wiki.gnome.org/Projects/Vala/ListSample List Sample]
* [https://wiki.gnome.org/Projects/Vala/MarkupSample MarkupParser Sample] (Parsing simple XML files)
* [https://wiki.gnome.org/Projects/Vala/TypeModules Plugin Sample] (Loading modules at runtime)
* [https://wiki.gnome.org/Projects/Vala/ThreadingSamples Threading Samples] (Concurrency and Synchronization)
* [https://wiki.gnome.org/Projects/Vala/TestSample Unit Tests Sample]
* [https://wiki.gnome.org/Projects/Vala/ValueSample Value Sample] — динамиче��кий контейнер переменных
* [https://wiki.gnome.org/Projects/Vala/TypeModuleSample TypeModule Sample]

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

* [https://wiki.gnome.org/Projects/Vala/SqliteSample SQLite Sample]
* [https://wiki.gnome.org/Projects/Vala/PostgreSQL PostgreSQL Sample]
* [https://wiki.gnome.org/Projects/Vala/GDA GNOME Data Access library Sample]

=== Разное ===

* [https://wiki.gnome.org/Projects/Vala/CursesSample Curses Sample] (Terminal control library)
* [https://wiki.gnome.org/Projects/Vala/GSFSample GSF Sample] (Deflating ZIP archives)
* [https://wiki.gnome.org/Projects/Vala/GSLSample GSL Samples] (Numerical calculations)
* [https://wiki.gnome.org/Projects/Vala/InputSamples Input Samples]
* [https://wiki.gnome.org/Projects/Vala/MultiImplementInC Implementing Vala interfaces in C]
* [https://wiki.gnome.org/Projects/Vala/LoudmouthSample Loudmouth Sample] (Jabber instant messaging)
* [https://wiki.gnome.org/Projects/Vala/LuaSample Lua Sample] (Scripting)
* [https://wiki.gnome.org/Projects/Vala/TiffSample Tiff Sample] (Image loading/saving)
* [https://wiki.gnome.org/Projects/Vala/USBSample USB Sample]
* [https://wiki.gnome.org/Projects/Vala/XmlSample XML Sample]
* [https://wiki.gnome.org/Projects/Vala/JsonSample Json Sample]
* Shared Library Sample and how to call Vala code using GObject introspection
* WIN32 Cross Build Sample
* Using GUPnP

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


== Примечания ==
== Примечания ==
{{примечания}}
{{примечания}}


== [[Интегрированная среда разработки]] <small>[https://wiki.gnome.org/Projects/Vala/Tools]</small>==
== Интегрированная среда разработки==
{| class="wikitable"
* [[Anjuta]]
|'''Редактор'''
* [[Geany]]
|<small>'''Подсветка синтаксиса'''</small>
* [[MonoDevelop]] (после 2 версии поддержки нет)
|<small>'''Форматирование кода'''</small>
* Val(a)IDE (не развивается с 2011 года)
|<small>'''Статический анализ кода'''</small>
* '''{{нп3|GNOME Builder}}'''
|<small>'''Авто-завершение'''</small>
|<small>'''Перейти к определению'''</small>
|<small>'''Комплексная документация'''</small>
|<small>'''Интегрированная сборка, тестирование и отладка'''</small>
|-
|<span class="anchor" id="line-27"></span>[[Anjuta]]
|Yes
|
|Yes
|Yes
|
|
|
|-
|<span class="anchor" id="line-28"></span>[[Atom (текстовый редактор)|Atom]]
|[https://atom.io/packages/language-vala-modern Yes]
|
|
|[https://atom.io/packages/valhalla Yes]
|
|[https://atom.io/packages/valhalla Yes]
|
|-
|<span class="anchor" id="line-29"></span>[https://github.com/elementary/code elementary OS Code]
|Yes
|
|
|
|
|
|
|-
|<span class="anchor" id="line-30"></span>[[Emacs]]
|[https://wiki.gnome.org/Projects/Vala/Emacs Yes]
|
|
|
|
|
|
|-
|<span class="anchor" id="line-31"></span>[[Geany]]
|Yes
|
|
|Yes
|Yes
|
|
|-
|<span class="anchor" id="line-32"></span>[[gedit]]
|Yes
|
|[https://gitlab.gnome.org/Archive/gedit-code-assistance Yes]
|
|
|
|
|-
|<span class="anchor" id="line-33"></span>[https://wiki.gnome.org/Apps/Builder GNOME Builder]
|Yes
|
|Yes
|Yes
|[https://wiki.gnome.org/Projects/Vala/Tools/GNOMEBuilder#Jump_to_Definition Yes]
|
|Yes
|-
|<span class="anchor" id="line-34"></span>[[IntelliJ IDEA]]
|[https://github.com/gregorej/vala-intellij-plugin Yes]
|
|
|
|
|
|
|-
|<span class="anchor" id="line-35"></span>[[medit]]
|Yes
|
|
|
|
|
|
|-
|<span class="anchor" id="line-36"></span>[[Sublime Text|SublimeText]]
|[https://packagecontrol.io/packages/Vala Yes]
|
|
|[https://packagecontrol.io/packages/Vala Basic]
|
|
|
|-
|<span class="anchor" id="line-37"></span>[[TextMate]]
|[https://github.com/technosophos/Vala-TMBundle Yes]
|
|
|[https://github.com/technosophos/Vala-TMBundle Basic]
|
|
|
|-
|<span class="anchor" id="line-38"></span>[[Vim]]
|[https://wiki.gnome.org/Projects/Vala/Tools/Vim#Syntax_Highlighting Yes]
|
|[https://wiki.gnome.org/Projects/Vala/Tools/Vim#Static_Code_Analysis Yes]
|
|[https://wiki.gnome.org/Projects/Vala/Tools/Vim#Jump_to_Definition Yes]
|
|
|-
|<span class="anchor" id="line-39"></span>[[Visual Studio Code]]
|[https://wiki.gnome.org/Projects/Vala/Tools/VisualStudioCode#Syntax_Highlighting Yes]
|[https://wiki.gnome.org/Projects/Vala/Tools/VisualStudioCode#Code_Formatting Yes]
|[https://github.com/philippejer/vala-language-client-alpha Yes]
|[https://github.com/philippejer/vala-language-client-alpha Yes]
|[https://github.com/philippejer/vala-language-client-alpha Yes]
|
|[https://wiki.gnome.org/Projects/Vala/Tools/VisualStudioCode#Debugging Partial] Video("Vala Debug" on YouTube)
|-
|[[Kate]]
|Yes
|
|
|
|
|
|
|}
В настоящее время существует 4 разрабатываемые реализации языкового сервера для Vala:

* [https://github.com/benwaffle/vala-language-server benwaffle/vala-language-server]
* [https://github.com/davidmhewitt/vala-language-server davidmhewitt/vala-language-server]
* [https://gitlab.gnome.org/esodan/gvls Daniel Espinosa/GNOME Vala Language Server]
*[https://github.com/philippejer/vala-language-server-alpha philippejer/vala-language-server-alpha] (Работает с VS Code)

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

* [https://wiki.gnome.org/Projects/Valadoc Valadoc] - генерирует документацию из VAPI, GIR и других файлов
* [https://gcovr.com/ Gcovr] - отчёты о покрытии кода, используйте ключ <code>--debug</code> с <code>valac</code> для включения номеров строк исходного файла
* [http://uncrustify.sourceforge.net/ Uncrustify] - авто-форматирование исходного кода
* [https://github.com/elementary/vala-lint vala-lint] - проверяет код на соответствие правилам оформления кода от elementary — [https://elementary.io/ru/docs/code/reference#code-style Code-Style guidelines]


== Ссылки ==
== Ссылки ==
* {{cite web
* {{cite web
|datepublished = 23 августа 2011
|datepublished = 2011
|url = https://wiki.gnome.org/Projects/Vala
|url = https://wiki.gnome.org/Projects/Vala
|title = The Vala Programming Language, on GNOME Live!
|title = The Vala Programming Language, on GNOME Live!
|accessdate = 16 августа 2011
|accessdate = 2011
|lang = en
|lang = en
|description = официальный сайт
|description = официальный сайт
Строка 111: Строка 590:


* {{cite web
* {{cite web
|datepublished = 2008-03-09
|url = https://launchpad.net/valide
|title = Val(a)IDE среда разработки для Vala
|lang = en
|description = Launchpad
|archiveurl = https://www.webcitation.org/664F0aAnP?url=https://launchpad.net/valide
|archivedate = 2012-03-10
}}

* {{cite web
|datepublished = 9 марта 2008
|url = http://code.google.com/p/vala-benchmarks/
|url = http://code.google.com/p/vala-benchmarks/
|title = Benchmark of Vala versus C# and C
|title = Benchmark of Vala versus C# and C
|accessdate = 2 мая 2009
|accessdate = 2009
|lang = en
|lang = en
|description = A collections of some simples benchmarks written in Vala.
|description = A collections of some simples benchmarks written in Vala.
Строка 133: Строка 603:
|url = http://valadoc.org/
|url = http://valadoc.org/
|title = valadoc.org
|title = valadoc.org
|accessdate = 9 февраля 2010
|accessdate = 2010
|lang = en
|lang = en
|description = Документация по языку Vala.
|description = Документация по языку Vala.
Строка 139: Строка 609:
|archivedate = 2012-03-10
|archivedate = 2012-03-10
}}
}}
*[https://vala.gitbook.io/vala/ Учебник Vala] на русском


* {{cite web
* {{cite web
Строка 146: Строка 617:
| url = https://wiki.gnome.org/Vala/Tutorial/ru
| url = https://wiki.gnome.org/Vala/Tutorial/ru
| title = Учебник Vala
| title = Учебник Vala
| accessdate = 19 июля 2013
| accessdate = 2013
| lang = ru
| lang = ru
| archiveurl =
| archiveurl =
Строка 155: Строка 626:
|last = Снастин
|last = Снастин
|first = Алексей
|first = Алексей
|datepublished = 27 января 2010
|datepublished = 2010
|url = http://www.ibm.com/developerworks/ru/library/l-vala_1/index.html
|url = http://www.ibm.com/developerworks/ru/library/l-vala_1/index.html
|title = Обзор языка программирования Vala. Часть 1: Общие свойства и характеристики языка Vala
|title = Обзор языка программирования Vala. Часть 1: Общие свойства и характеристики языка Vala
|accessdate = 9 февраля 2010
|accessdate = 2010
|lang = ru
|lang = ru
|archiveurl = https://www.webcitation.org/664F3RHdq?url=http://www.ibm.com/developerworks/ru/library/l-vala_1/index.html
|archiveurl = https://www.webcitation.org/664F3RHdq?url=http://www.ibm.com/developerworks/ru/library/l-vala_1/index.html
Строка 164: Строка 635:
}}
}}
** {{cite web
** {{cite web
|datepublished = 4 февраля 2010
|datepublished = 2010
|url = http://www.ibm.com/developerworks/ru/library/l-vala_2/index.html
|url = http://www.ibm.com/developerworks/ru/library/l-vala_2/index.html
|title = Часть 2. Объектно-ориентированное программирование на языке Vala
|title = Часть 2. Объектно-ориентированное программирование на языке Vala
|accessdate = 9 февраля 2010
|accessdate = 2010
|lang = ru
|lang = ru
|archiveurl = https://www.webcitation.org/664F46cL6?url=http://www.ibm.com/developerworks/ru/library/l-vala_2/index.html
|archiveurl = https://www.webcitation.org/664F46cL6?url=http://www.ibm.com/developerworks/ru/library/l-vala_2/index.html
Строка 173: Строка 644:
}}
}}
** {{cite web
** {{cite web
|datepublished = 9 февраля 2010
|datepublished = 2010
|url = http://www.ibm.com/developerworks/ru/library/l-vala_3/index.html
|url = http://www.ibm.com/developerworks/ru/library/l-vala_3/index.html
|title = Часть 3. Расширенные возможности языка Vala
|title = Часть 3. Расширенные возможности языка Vala
|accessdate = 9 февраля 2010
|accessdate = 2010
|lang = ru
|lang = ru
|archiveurl = https://www.webcitation.org/664F4hoQr?url=http://www.ibm.com/developerworks/ru/library/l-vala_3/index.html
|archiveurl = https://www.webcitation.org/664F4hoQr?url=http://www.ibm.com/developerworks/ru/library/l-vala_3/index.html
Строка 183: Строка 654:


* {{cite web
* {{cite web
|last =
|last =
|first =
|first =
|datepublished = 23 июля 2010
|datepublished = 2010
|url = http://www.rusdoc.ru/articles/chto_takoe_vala/19533/
|url = http://www.rusdoc.ru/articles/chto_takoe_vala/19533/
|title = Что такое Vala
|title = Что такое Vala
|accessdate = 31 июля 2010
|accessdate = 2010
|lang = ru
|lang = ru
|archiveurl =
|archiveurl = https://www.webcitation.org/664F5FZaj?url=http://www.rusdoc.ru/articles/chto_takoe_vala/19533/
|archivedate = 2012-03-10
|archivedate =
}}
}}


* {{cite web
* {{cite web
| datepublished = 16 августа 2011
| datepublished = 2011
| url = https://code.google.com/p/vala-win32/downloads/list
| url = https://code.google.com/p/vala-win32/downloads/list
| title = Неофициальная ��борка для ОС Windows
| title = Неофициальная сборка для ОС Windows
| accessdate = 16 августа 2011
| accessdate = 2011
| lang = en
| lang = en
}}
}}


* {{cite web
* {{cite web
|datepublished = 7 сентября 2011
|datepublished = 2011
|url = http://live.gnome.org/Vala/BindingsStatus
|url = http://live.gnome.org/Vala/BindingsStatus
|title = Поддержка подключения библиотек написанных на C
|title = Поддержка подключения библиотек написанных на C
|accessdate = 17 сентября 2011
|accessdate = 2011
|lang = en
|lang = en
|archiveurl = https://www.webcitation.org/664EzGUkh?url=http://live.gnome.org/Vala/BindingsStatus
|archiveurl = https://www.webcitation.org/664EzGUkh?url=http://live.gnome.org/Vala/BindingsStatus
Строка 227: Строка 698:
[[Категория:GTK+]]
[[Категория:GTK+]]
[[Категория:Свободные компиляторы и интерпретаторы]]
[[Категория:Свободные компиляторы и интерпретаторы]]
[[Категория:Транспиляция]]

Текущая версия от 21:22, 28 июня 2024

Vala
Изображение логотипа
Семантика структурное, императивное, объектно-ориентированное программирование
Класс языка объектно-ориентированный
Появился в 2006
Автор Йюрг Биллетер, Раффаэле Сандрини
Разработчик Jürg Billeter[вд]
Расширение файлов .vala или .vapi
Выпуск 0.57.0 (11 апреля 2023; 15 месяцев назад (2023-04-11))
Система типов строгая, статическая
Основные реализации GNOME Desktop Project
Испытал влияние Си, C++, Groovy, Java, C#
Лицензия LGPL
Сайт vala.dev (англ.)
ОС кроссплатформенность
Логотип Викисклада Медиафайлы на Викискладе

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, как и использование в таких программах системных низкоуровневых библиотек, таких как 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.

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

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

Простой 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;
    }
}

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

[править | править код]
  • void println (string str) {
        stdout.printf ("%s\n", str);
    }
    
    void main () {
    
        /* Strings are of data type 'string' and can be concatenated with the plus
         * operator resulting in a new string:
         */
    
        string a = "Concatenated ";
        string b = "string";
        string c = a + b;
        println (c);
    
        /* If you want to have a mutable string you should use StringBuilder.
         * With its help you are able to build strings ad libitum by prepending,
         * appending, inserting or removing parts. It's faster than multiple
         * concatenations. In order to obtain the final product you access the
         * field '.str'.
         */
    
        var builder = new StringBuilder ();
        builder.append ("built ");
        builder.prepend ("String ");
        builder.append ("StringBuilder");
        builder.append_unichar ('.');
        builder.insert (13, "by ");
        println (builder.str);      // => "String built by StringBuilder."
    
        /* You can create a new string according to a format string by calling the
         * method 'printf' on it. Format strings follow the usual rules, known from
         * C and similar programming languages.
         */
    
        string formatted = "PI %s equals %g.".printf ("approximately", Math.PI);
        println (formatted);
    
        /* Strings prefixed with '@' are string templates. They can evaluate
         * embedded variables and expressions prefixed with '$'.
         * Since Vala 0.7.8.
         */
    
        string name = "Dave";
        println (@"Good morning, $name!");
        println (@"4 + 3 = $(4 + 3)");
    
        /* The equality operator compares the content of two strings, contrary to
         * Java's behaviour which in this case would check for referential equality.
         */
    
        a = "foo";
        b = "foo";
        if (a == b) {
            println ("String == operator compares content, not reference.");
        } else {
            assert_not_reached ();
        }
    
        /* You can compare strings lexicographically with the < and > operators: */
    
        if ("blue" < "red" && "orange" > "green") {
            // That's correct
        }
    
        // Switch statement
    
        string pl = "vala";
        switch (pl) {
        case "java":
            assert_not_reached ();
        case "vala":
            println ("Switch statement works fine with strings.");
            break;
        case "ruby":
            assert_not_reached ();
        }
    
        /* Vala offers a feature called verbatim strings. These are strings in
         * which escape sequences (such as \n) won't be interpreted, line breaks
         * will be preserved and quotation marks don't have to be masked. They are
         * enclosed with triple double quotation marks. Possible indentations
         * after a line break are part of the string as well. Note that syntax
         * highlighting in this Wiki is not aware of verbatim strings.
         */
    
        string verbatim = """This is a so-called "verbatim string".
    Verbatim strings don't process escape sequences, such as \n, \t, \\, etc.
    They may contain quotes and may span multiple lines.""";
        println (verbatim);
    
        /* You can apply various operations on strings. Here's a small selection: */
    
        println ("from lower case to upper case".up ());
        println ("reversed string".reverse ());
        println ("...substring...".substring (3, 9));
    
        /* The 'in' keyword is syntactic sugar for checking if one string contains
         * another string. The following expression is identical to
         * "swordfish".contains ("word")
         */
    
        if ("word" in "swordfish") {
            // ...
        }
    
        // Regular expressions
    
        try {
            var regex = new Regex ("(jaguar|tiger|leopard)");
            string animals = "wolf, tiger, eagle, jaguar, leopard, bear";
            println (regex.replace (animals, -1, 0, "kitty"));
        } catch (RegexError e) {
            warning ("%s", e.message);
        }
    }
    
  • Работа с символами
  • Сигналы и Слоты
  • Работа со свойствами
  • Пример условной компиляции

Основы: Коллекции, файлы, ввод/вывод, работа с сетью, 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 Yes Yes Yes Partial Video("Vala Debug" on YouTube)
Kate Yes

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

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

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