Vala 0.15
Vala, це сучасна мова програмування, схожа на c#, але на відміну від c#, Vala компілює свої програми у машинні коди, а не в інструкції віртуальної машини, що робить цю мову, в принципі, цікавою навіть (в певних рамках) для системного програмування.Ще однією цікавою особливістю Vala є те, що вона базується на об'єктній моделі GObject, на ній легко створювати програми з графічним інтерфейсом користувача GTK/GNOME, при компіляції Vala не тягне з собою ніяких runtime-бібліотек, крім (стандартної в багатьох дистрибутивах Linux) бібліотеки GLib, що дозволяє створювати досить компактні виконавчі модулі.
Ще одною особливістю Vala є чудова інтеграція з мовою С (фактично, Vala компілює свої програми в програму на мові C, яка вже далі компілюється в машинний код). Це дозволяє дуже легко підключати до Vala бібліотеки на C, а також легко створювати (навіть об'єктно-орієнтовані, з використанням GObject) бібліотеки, які легко можна підлючити з програми, написаній на С та інших мовах програмування.
У Vala є "брат-близнюк", мова Genius, схожа на Python, але можливостями один-в-один як у Vala. До речі, компілятор для цих двох мов у них один - valac.
Vala дуже молода мова і швидко розвивається. Тому, для найдопитливіших буде цікаво встановити собі найсвіжішу версію цієї мови...
Насамперед, вилучаємо всі встановлені версії vala через пакетний менеджер (насправді різні версії Vala можуть співіснувати разом, але я цей момент не досліджував):
$ sudo aptitude purge valac vala-doc vala-utils libgee2 libgee-dev
Далі я отримав архів із останньою стабільною версією vala звідси (я, наприклад, завантажив собі vala-0.15.0.tar.xz (вваваємо, що всі завантаження зберігаються в папці ~/Downloads)
Для експериментів з різними проектами я собі створив папку projects:
$ mkdir ~/projects
Для експериментів з vala створив собі підкаталог vala:
$ cd ~/projects $ mkdir vala $ cd vala
Розгорнув тут архів з джерельними кодами vala-0.15:
$ cp ~/Downloads/vala-0.15.0.tar.zx ~/projects/vala $ tar xvf vala-.15.0.tar.zx
тепер компіляція (якщо є якісь помилки, виправляємо і йдемо далі):
$ ./configure $ make $ sudo make installЗАУВАЖЕННЯ! За замовчуванням, інсталяція пройде в каталог /usr/local/
Якщо при тестовому запуску Vala командою valac буде видаватись така помилка:
valac: error while loading shared libraries: libvala-0.16.so.0: cannot open shared object file: No such file or directoryЦе означає, що завантажувач динамічних бібліотек (.so) не знає де знаходиться файл libvala-0.16.so.0
Для вирішення цього питання потрібно запустити таку команду:
$ sudo ldconfig
Якщо ж це не спрацює, то таку:
$ sudo ldconfig -n /usr/local/lib(якщо виникла необхідність в останній комаді, значить шлях /usr/local/lib не використовується для автоматичного пошуку динамічних бібліотек у файлі ld.so.conf або папці ld.so.conf.d).
Бажано це виправити, наприклад так:
$ echo "/usr/local/lib" | sudo tee /etc/ld.so.conf.d/usr-local.conf $ sudo ldconfig
Тепер можна протестувати компілятор:
$ cd tests $ make check-TESTS
Всі тести в мене пройшли на 'ok', крім останнього:
...
/gir/bug651773: FAIL
error: Package `GLib-2.0' not found in specified Vala API directories or GObject-Introspection GIR directories
error: Package `GObject-2.0' not found in specified Vala API directories or GObject-Introspection GIR directories
Generation failed: 2 error(s), 0 warning(s)
1 of 145 tests failed
make: *** [check-TESTS] Помилка 1
Вилікувалось це встановкою наступних симлінків:
$ cd /usr/local/share/vala/vapi $ sudo ln -s glib-2.0.vapi GLib-2.0.vapi $ sudo ln -s gobject-2.0.vapi GObject-2.0.vapi
Якщо man valac видає таку помилку:
man: can't resolve /usr/share/man/man1/valac.1.gz: No such file or directoryзначить деінсталяція попередньої версії valac пройшла не до кінця (залишились записи в кеші системи документації man про стару версію).
Лікується дуже просто:
$ sudo mandb
Libgee
Беремо Libgee звідси, але тільки 6-ї гілки (бо вищі версії не бажає valadoc, який ми будемо компілювати далі) - останній на момент написання статті - libgee-0.6.3
$ cp ~/Dovnloads/libgee-0.6.3.tar.xz ~/projects/vala $ cd ~/projects/vala $ cd tar xvf libgee-0.6.3.tar.zx $ cd libgee-0.6.3 $ ./configure $ make $ sudo make install $ sudo ldconfig
Тестуємо Libgee:
$ cd tests $ ./tests(все має бути 'ок')
Valadoc з git
Беремо Valadoc з git (якщо git не встановлено, то встановлюємо: sudo aptitude install git):
$ cd ~/projects/vala $ git clone git://git.gnome.org/valadoc $ cd valadoc
На момент написання статті valadoc має помилку, яка не дає йому працювати з Vala версією більшою за 0.14.x. Щоб це виправити потрібно зробити невелику правку в першоджерелах, а саме у файлі
./src/valadoc/valadoc.vala:
247 DriverMetaData[] lut = { 248 DriverMetaData (LibvalaVersion (0, 10, 0), LibvalaVersion (0, 10, -4), "0.10.x"), 249 DriverMetaData (LibvalaVersion (0, 11, 0), LibvalaVersion (0, 11, 0), "0.11.0"), 250 DriverMetaData (LibvalaVersion (0, 11, 1), LibvalaVersion (0, 11, -1), "0.11.x"), 251 DriverMetaData (LibvalaVersion (0, 12, 0), LibvalaVersion (0, 12, -1), "0.12.x"), 252 DriverMetaData (LibvalaVersion (0, 13, 0), LibvalaVersion (0, 13, -1), "0.13.x"), 253 DriverMetaData (LibvalaVersion (0, 14, 0), LibvalaVersion (0, 14, -1), "0.14.x"), 254 DriverMetaData (LibvalaVersion (0, 15, 0), LibvalaVersion (0, 16, -1), "0.16.x") 255 };Потрібно у файлі valadoc.vala добавити рядок позначений червоним (254) і не забути додати кому наприкінці попереднього (253) рядка(!).
Ще Valadoc не хоче показувати кирилицю в згенерованому html файлі. Для виправлення цього потрібно підправити два файли:./src/libvaladoc/html/htmlmarkupwriter.vala (добавити новий метод meta_content в клас Valadoc.Html.MarkupWriter)
public MarkupWriter meta_content(string charset) { simple_tag ("meta", {"content", "text/html; charset=" + charset, "http-equiv", "content-type"}); return this; }
./src/libvaladoc/html/basicdoclet.vala (добавити виклик методу meta_content у функцію write_file_header() (позначено червоним))
821 protected void write_file_header (string css, string js, string? title) {
822 writer.start_tag ("html");
823 writer.start_tag ("head");
824 if (title == null) {
825 writer.start_tag ("title").text ("Vala Binding Reference").end_tag ("title");
826 } else {
827 writer.start_tag ("title").text (title).text (" -- Vala Binding Reference").end_tag ("title");
828 }
829 writer.meta_content("UTF-8");
830 writer.stylesheet_link (css);
831 writer.javascript_link (js);
832 writer.end_tag ("head");
833 writer.start_tag ("body");
834 writer.start_tag ("div", {"class", css_site_header});
835 writer.text ("%s Reference Manual".printf (title == null ? "" : title));
836 writer.end_tag ("div");
837 writer.start_tag ("div", {"class", css_style_body});
838 }
Тепер можна компілювати valadoc:
$ ./autogen.sh $ make $ sudo make install
Тестуємо Valadoc:
$ cd tests $ make check-TESTSмає отриматись щось таке:
TEST: Building... OK /libvaladoc/errorreporter: OK All 1 tests passed
Тепер можемо собі написати "Привіт світ!" з документуванням (правила розмітки знаходиться тут):
hello.vala:
/** * ==Простір імен "test"== * * ''Детальний'' опис простору імен __"Тест"__ <<BR>> * ''жирний'' <<BR>> * //курсив// <<BR>> * __підкреслений__ <<BR>> * ``друкарська машинка`` * * ``{{{а це моноширинна вставка "як є" * другий рядок * третій рядок (зміщений на 3 символи вправо) * }}}`` * **/ namespace test { /** * Тестова функція ''main()'' * * Друк у стандартний вивід тексту "Привіт, Vala!" * * @param args - параметри командного рядка //(ігноруються)// **/ int main (string[] args) { stdout.printf("Привіт, Vala!\n"); return 0; } }ЗАУВАЖЕННЯ: На даний момент valadoc досить "нервово" реагує на не англійський utf-8 (читай, більше одного байту на символ). Тому, часом, для відображення форматованого тексту потрібно відступати від "зірочки" (лівого краю) то один, то два пропуски. Що воно таке за диво - ще розбираюсь...
Компіляція:
$ valac hello.vala
Документування:
$ valadoc --force --internal -o hello-vala hello.vala
Поки що - все!
Вердикт: Vala - працює. Valadoc - ще трохи сира.
Немає коментарів:
Дописати коментар