- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF124:Что за штука
Материал из Linuxformat.
Что за штука… Vala
- Дэн Дарт заинтересовался платформой, работающей как Mono, но без Mono-библиотек. Запутались? Ничего, к концу статьи распутаетесь…
- Mono? Я слышал это название. Не эту ли технологию использует Tomboy, инструмент для заметок в Ubuntu?
Да, но проект Mono гораздо крупнее. Это платформа, на которой можно разрабатывать и запускать переносимые приложения – что-то вроде Java. Она основана на технологиях Microsoft .NET, и многие (к сожалению) усматривают в этом элемент оппортунизма. С помощью Mono создано немало приложений, в том числе Beagle, система мгновенного поиска.
- Есть ли Mono в моем дистрибутиве?
В Ubuntu, до определенного времени – Fedora, OpenSUSE и даже новейшей версии Debian Mono устанавливается по умолчанию. Если нет, то нетрудно добавить его и самому через менеджер пакетов.
- Хорошо, но какое отношение это имеет к Vala?
Синтаксис Vala очень напоминает C#, основной язык Mono. Vala обладает многими новинками, появившимися в C# недавно: например, обобщенными типами (generics), неявной типизацией (type inference) и нессылочными типами, допускающими значение NULL, но Mono для работы ему не нужен – поэтому Vala можно воспользоваться, если вы не уверены в его наличии у своих клиентов.
- Вы же сказали, что Mono есть в большинстве дистрибутивов! Зачем нужно что-то еще?
Кроме универсальности, есть и другие причины. Например, программы на Vala работают гораздо быстрее, чем аналогичные на C#. Если разобраться, Mono поддерживает любые платформы и архитектуры, перерабатывая свои языки в подобие машинного кода, который крутится в собственной виртуальной машине (примерно как у Java) и обычно компилируется только в момент выполнения. Это неизбежно влечет определенные затраты системных ресурсов и, конечно, влияет на производительность. А скомпилированный C-код – это уже машинный код, и он выполняется очень быстро, ведь процессор работает с ним без лишних преобразований.
- Но… тогда ведь Vala тоже медленнее C?
Вместо использования виртуальной машины, код Vala конвертируется в код C, а уже затем компилируется в машинный код. Поэтому скорость исполнения почти такая же, как у C.
- Если уж углубляться в детали, то каковы отличия Vala от C, C++ и C# в скорости?
Скорость Vala сравнима с C: большинство сходных программ работает почти одинаково быстро. По сравнению с C++, Vala тоже не уступает, а порой (в зависимости от задачи) и превосходит – во всяком случае, скомпилированный код получается более компактным. В случае с Mono разница очевидна и составляет от двух до четырех раз, в зависимости от задачи.
- Так нужен ли Mono для работы приложений Vala?
Нет. Хотя код Vala визуально очень похож на C#, на котором пишут для Mono, он конвертируется в C, и библиотеки Mono не используются. Вот и выходит, что пользователю они ни к чему.
- Вот здорово: мои программы будут работать быстрее без всякого Mono! Но их пользователи обязаны работать на Linux, правда?
Вовсе нет! Библиотеки Gnome работают на многих платформах; то же справедливо для Vala. Поэтому программируйте что душе угодно – работать будет везде.
- Ура! Друзья не посмотрят на меня косо, ведь Mono мне больше ни к чему!
Вот это верно: для тех, кто недолюбливает Mono за близость к Microsoft, поводов для предубеждений против Vala уже не остается. Как говорится, в порочащих связях… и т. д.
- Ну, хорошо. А что можно программировать на Vala?
Да почти все, что работает в Gnome. Хотя бы еще один текстовый редактор или IRC-клиент (впрочем, вот этого не надо, их и так навалом!). Существуют привязки к библиотекам любых типов.
- Как вы сказали? Привязки? Боюсь, мы меня теряем…
Чтобы включить в свою Vala-программу какую-либо библиотеку, например мультимедиа-каркас GStreamer, графическую подсистему OpenGL или игровой инструментарий SDL, вам не обойтись без привязок (bindings) к ним. Привязки служат промежуточными звеньями между языками программирования и библиотеками, и к Vala можно добавить практически любую – привязки «знают», как обходиться с ними.
- А какие привязки можно использовать с Vala?
Можно брать многие существующие C-библиотеки, только укажите их в API-файле с объявлениями классов и методов, который хранится вместе с кодом Vala. Привязки дают возможность подключить GCrypt (систему шифрования Gnome), систему подключаемых модулей GEdit, проверку орфографии GSpell, аудиоплейер XMMS и, в скором времени, личные библиотеки. В стадии эксперимента – использование GLib и GTK, системы оконных виджетов (кнопки, поля ввода и т. п.). На подходе – полная привязка к платформе Gnome.
- Можно ли компоновать код Vala с моим готовым C-кодом?
Конечно. Достаточно установить заголовочные файлы, и можно запросто связать Vala с C-кодом, включая C-библиотеки. Другие языки, например C++, C#, Java и Python, планируется оснастить связями с Vala, но пока это только планы.
- А как программировать на этом языке? Каков синтаксис?
Синтаксис напоминает C#, но немного отличается. Присутствуют те же концепции, что в C#: например сигналы, циклы, интерфейсы различных типов и даже подключаемые модули.
- Круто. Но если эти системы так похожи, стоит ли менять шило на мыло? Не расскажете ли о преимуществах Vala перед Mono подробнее?
Допустим, вы хотите работать с Gnome, но не хотите пользоваться C# или Java; тогда Vala – неплохой выбор. Считается, что программировать на нем проще, чем на C, а приложения разрабатывать быстрее за счет наличия полезных встроенных функций, например, автоматизированного управления памятью. Эта функция предотвращает утечки памяти и повышает скорость выполнения программ. Кроме того, язык уже довольно широко используется.
- Что, люди и правда его используют?
Именно! Например, на Vala портирована Cheese, программа для работы с web-камерами, включенная в Ubuntu. Среди других программ, портированных или созданных заново, Scratchpad – текстовый редактор для Gnome, Seahorse – диспетчер шифровальных ключей для Gnome, докер панелей AllTray; Abraca – клиент XMMS2, Epris – музыкальный плейер на основе GStreamer с интерфейсом командной строки, программы просмотра PDF, IDE, системы цифровой видеозаписи и многое-многое другое. Полный список в сопровождении дополнительной информации доступен по адресу http://live.gnome.org/Vala.
- Раз эта система так популярна, значит, она и стабильна?
Увы, нет. По крайней мере, пока. Функции языка время от времени меняются: грядет версия 1.0. В этом году, например, добавлена поддержка выражений-инициализаторов массивов, значительно исправлен синтаксис, добавлены привязки к Lua, MySQL, Fuse, libdaemon, V4L2, librsvg, X11, xcb и POSIX, условная компиляция, улучшен синтаксический анализатор, добавлена поддержка профилей POSIX и сигналов в статическом D-BUS. Текущая версия, на момент написания статьи, имеет номер 0.7.7 (вышла 27 сентября 2009 г.).
- Где можно узнать о языке Vala? Есть ли источники для новичков?
Лучше всего начинать с руководства: http://live.gnome.org/Vala/Tutorial. С его помощью можно научиться писать программы на Vala «с нуля». Справочные материалы есть на http://www.vala-project.org/doc/vala.
- Откуда можно загрузить Vala? Может быть, он у меня уже есть?
По умолчанию Vala не включается в состав ни одного дистрибутива Linux; этим он похож на другие компиляторы. Обычно его можно загрузить и установить из официального репозитория. Нет, программы-то на Vala будут работать – только вот сразу сесть и написать приложение вы не сможете. Есть модули для использования Vala с MonoDevelop, Eclipse и другими IDE.
- А под какой лицензией распространяется Vala? Открыт ли исходный код? Можно ли распространять его свободно?
Vala распространяется на условиях GNU LGPL версии 2.1. Это означает, что вы можете делать все что угодно, но при распространении необходимо сохранить свободу. Похоже на стандартную лицензию GPL, с той разницей, что возможна комбинация Vala с проприетарными продуктами (но вы обязаны предоставить исходный код Vala по запросу). Причина выбора LGPL в том, что при изготовлении проприетарного ПО код Vala копируется непосредственно в C-код. Если взять GPL, то все ваше произведение нужно будет распространять на условиях GPL.
- А вот я нашел ошибку в Vala! Куда сообщить об этом?
Пройдите вот сюда: http://bugzilla.gnome.org/browse.cgi?product=vala. Это стандартный вариант Bugzilla, поэтому сперва создайте себе учетную запись. Обратите внимание: обнаружив проблему в конкретном приложении, используйте его собственную систему отслеживания ошибок. Ну, а связаться с ведущими разработчиками (и другими полезными людьми) можно по IRC на #vala по адресу irc.gimp.org. LXF