Vala: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
Нет описания правки Метка: визуальный редактор отключён |
Alter73 (обсуждение | вклад) Новый логотип Метки: с мобильного устройства из мобильной версии через расширенный мобильный режим |
||
(не показано 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. |
|latest_release_version = 0.. |
||
|latest_release_date |
|latest_release_date |
||
}} |
}} |
||
Строка 17: | Строка 17: | ||
== Основные особенности == |
== Основные особенности == |
||
Vala по своему синтаксису очень похож на [[ |
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]], как и использование в таких программах системных низкоуровневых библиотек, таких как GObject. Поэтому , как и любые другие, исполняющие байт-код в виртуальных машинах, не быть в рамках платформы [[GNOME]]. Управляемые приложения имеют также ограничения в производительности, что является критичным для работы некоторых программ (например, системных), которые должны исполняться в бинарном коде ([[ABI]]). Это и стало причиной появления нового языка Vala. |
||
== Примеры кода == |
== Примеры кода == |
||
=== Пример № 1 === |
=== Пример № 1 === |
||
Простая программа «[[Программа Hello world|Hello World]]» |
Простая программа «[[Программа Hello world|Hello World]]» |
||
<source lang="vala"> |
<source lang="vala"> |
||
main() |
|||
{ |
{ |
||
("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 |
|||
{ |
|||
void run() |
|||
{ |
|||
stdout.printf("Hello World\n"); |
|||
} |
|||
static int main(string[] args) |
|||
{ |
|||
var sample = new Sample(); |
|||
sample.run(); |
|||
return 0; |
|||
} |
|||
} |
|||
</source> |
</source> |
||
=== Пример № 3 === |
=== Пример № 3 === |
||
Это пример использования [[GTK+]] для создания [[Graphical user interface|GUI]] |
Это пример использования [[GTK+]] для создания [[Graphical user interface|GUI]]программ на языке Vala: |
||
<source lang="vala"> |
<source lang="vala"> |
||
using Gtk; |
using Gtk; |
||
int main |
int main(string[] args) |
||
{ |
|||
Gtk.init |
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 |
window.set_default_size(350, 70); |
||
window.destroy.connect |
window.destroy.connect(Gtk.main_quit); |
||
var label = new Label |
var label = new Label("Hello, World!"); |
||
window.add |
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) |
|||
== Примечания == |
== Примечания == |
||
{{примечания}} |
{{примечания}} |
||
== |
== Интегрированная среда разработки== |
||
{| 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 = |
|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 = |
|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 = |
|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 = |
|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 = |
| accessdate = 2013 |
||
| lang = ru |
| lang = ru |
||
| archiveurl = |
| archiveurl = |
||
Строка 155: | Строка 626: | ||
|last = Снастин |
|last = Снастин |
||
|first = Алексей |
|first = Алексей |
||
|datepublished = |
|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 = |
|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 = |
|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 = |
|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 = |
|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 = |
|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 = |
|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 = |
|accessdate = 2010 |
||
|lang = ru |
|lang = ru |
||
|archiveurl = |
|||
|archiveurl = https://www.webcitation.org/664F5FZaj?url=http://www.rusdoc.ru/articles/chto_takoe_vala/19533/ |
|||
|archivedate = |
|archivedate = |
||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
| datepublished = |
| 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 = |
| accessdate = 2011 |
||
| lang = en |
| lang = en |
||
}} |
}} |
||
* {{cite web |
* {{cite web |
||
|datepublished = |
|datepublished = 2011 |
||
|url = http://live.gnome.org/Vala/BindingsStatus |
|url = http://live.gnome.org/Vala/BindingsStatus |
||
|title = Поддержка подключения библиотек написанных на C |
|title = Поддержка подключения библиотек написанных на C |
||
|accessdate = |
|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 ) |
Система типов | строгая, статическая |
Основные реализации | 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
[править | править код]- Gee (Коллекции: lists, sets, maps, iterables)
- GIO (Ввод/вывод, файловые операции)
- Сжатие GIO (упаковка/распаковка файлов)
- Настройки GIO (Параметры приложения)
- Работа с сетью GIO (Работа с сетевыми сокетами)
- Примеры Soup (HTTP клиент / сервер)
- Базовые примеры работы с D-Bus клиент/сервер (Взаимодействие между процессами)
- Пример клиента D-Bus (пример клиента D-Bus "real world")
- Методы Async (использование специального синтаксиса Vala для асинхронных операций)
Интерфейс пользователя
[править | править код]- GTK+ (GUI toolkit)
- GTK+ Custom Widget Samples
- GTK+ Custom CellRenderer Samples
- GTK+ Drag and Drop
- GTK DnD Order ListBox widget by doublehourglass
- GDL Sample (Docking widgets)
- Mx Samples (MeeGo netbook UX toolkit)
- WebKit Sample (Embeddable web browser engine)
- StatusIcon Sample (Showing icons in the systray/notification area)
Мультимедиа и графика
[править | править код]- GStreamer Samples (Multimedia: Audio, Video)
- Cairo Sample (2D vector graphics)
- Clutter Sample (Animation framework)
- Pango Sample (Font rendering)
- Poppler Sample (PDF rendering)
- SDL Samples (Full screen graphics and game programming)
- OpenGL Samples (2D and 3D graphics)
- PulseAudio Samples (Audio playback)
GNOME платформа
[править | править код]- Gnome-Desktop и GMenu (Inspecting the application menu)
- Gedit 3.0 Plugin
Использование GLib
[править | править код]- Date and Time Sample
- IO Channels Sample
- List Sample
- MarkupParser Sample (Parsing simple XML files)
- Plugin Sample (Loading modules at runtime)
- Threading Samples (Concurrency and Synchronization)
- Unit Tests Sample
- Value Sample — динамический контейнер переменных
- TypeModule Sample
Работа с базами данных
[править | править код]Разное
[править | править код]- Curses Sample (Terminal control library)
- GSF Sample (Deflating ZIP archives)
- GSL Samples (Numerical calculations)
- Input Samples
- Implementing Vala interfaces in C
- Loudmouth Sample (Jabber instant messaging)
- Lua Sample (Scripting)
- Tiff Sample (Image loading/saving)
- USB Sample
- XML Sample
- 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)
Примечания
[править | править код]- ↑ Bindings Status (англ.). Дата обращения: 7 сентября 2011. Архивировано 10 марта 2012 года.
- ↑ 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:
- benwaffle/vala-language-server
- davidmhewitt/vala-language-server
- Daniel Espinosa/GNOME Vala Language Server
- philippejer/vala-language-server-alpha (Работает с VS Code)
Другие инструменты
[править | править код]- Valadoc - генерирует документацию из VAPI, GIR и других файлов
- Gcovr - отчёты о покрытии кода, используйте ключ
--debug
сvalac
для включения номеров строк исходного файла - Uncrustify - авто-форматирование исходного кода
- vala-lint - проверяет код на соответствие правилам оформления кода от elementary — Code-Style guidelines
Ссылки
[править | править код]- The Vala Programming Language, on GNOME Live! (англ.) (23 августа 2011). — официальный сайт. Дата обращения: 16 августа 2011. Архивировано 10 марта 2012 года.
- Benchmark of Vala versus C# and C (англ.) (9 марта 2008). — A collections of some simples benchmarks written in Vala. Дата обращения: 2 мая 2009. Архивировано 10 марта 2012 года.
- valadoc.org (англ.). — Документация по языку Vala. Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Учебник Vala на русском
- Учебник Vala . Дата обращения: 19 июля 2013.
- Снастин, Алексей Обзор языка программирования Vala. Часть 1: Общие свойства и характеристики языка Vala (27 января 2010). Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Часть 2. Объектно-ориентированное программирование на языке Vala (4 февраля 2010). Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Часть 3. Расширенные возможности языка Vala (9 февраля 2010). Дата обращения: 9 февраля 2010. Архивировано 10 марта 2012 года.
- Что такое Vala (23 июля 2010). Дата обращения: 31 июля 2010.
- Неофициальная сборка для ОС Windows (англ.) (16 августа 2011). Дата обращения: 16 августа 2011.
- Поддержка подключения библиотек написанных на C (англ.) (7 сентября 2011). Дата обращения: 17 сентября 2011. Архивировано 10 марта 2012 года.
- Сообщество в Google+ (англ.).