URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 123271
[ Назад ]

Исходное сообщение
"Выпуск экспериментальной версии транслятора языка программирования Vala 0.51.1  "

Отправлено opennews , 15-Фев-21 19:39 
Вышла новая версия транслятора языка программирования Vala 0.51.1. Язык Vala является объектно-ориентированным языком программирования, предоставляет синтаксис, подобный языкам C# или Java. В качестве объектной модели используется Gobject (Glib Object System). Управление памятью осуществляется на основании подсчёта ссылок...

Подробнее: https://www.opennet.dev/opennews/art.shtml?num=54584


Содержание

Сообщения в этом обсуждении
"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 15-Фев-21 19:39 
Хороший язык здорового программиста.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Dzen Python , 15-Фев-21 22:04 
Слишком ориентирован на gtk+ экосистему, за это низачот.
Нормальной работы С++ и QT нету.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 15-Фев-21 22:17 
Никто не может нормально работать с C++/Qt. Если думаешь что это может к примеру D то это неверно, хелловорды работают, а более сложные кейсы уже нет. Как пруф - посмотри как сделаны бинды к Qt для Go и Crystal -- просто обернули все в C API генераторами и вызывают по FFI.

К GTK Vala гвоздями не прибита, GLib это отдельная от GTK часть(по сути когда то давно GTK сильно разрослось и из него выделелась в отдельный проект часть не связанная с GUI, также было у WxWidgets). Кстати GLib полностью кроссплатформенна.


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 15-Фев-21 22:20 
> Нормальной работы С++ и QT нету.

в Qt нету нормальной работы ни с чем, кроме с++.


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 16-Фев-21 08:02 
Python - PyQt

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 16-Фев-21 15:59 
это ужас, только для хеловорлдов.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 17-Фев-21 16:51 
Да ладно: говорим AI, подразумеваем Python.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Какаянахренразница , 15-Фев-21 19:45 
Брат-близнец vlang-a?

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 15-Фев-21 20:33 
> Брат-близнец vlang-a?

    Да, только в отличии от vlang-a не такой смешной, появился в 2006 и юзался нокией для Maemo ( https://books.google.ru/books?id=9868DwAAQBAJ&pg=PA7&lpg=PA7... )

    Синтаксически это такой C# или по желанию Python(Genie), который транслируется в C и использует в качестве STD GLib.
    Runtime GC нет, память менеджит либо по владению (owned/unowned ссылки) либо через ARC(подставляет вызовы деструкторов(или дикремент счетчика ссылок) на этапе компиляции), но в этом случае нужно вручную фиксить циклические ссылки делая одну из них weak (если A -> B, и B -> A, то в одном из классов нужно добавить weak модификатор). Из этого следует что память полностью менеджится на этапе компиляции и объекты дохнут детерменированно, а значит для всего(вроде открытых сокетов/дескрипторов файлов) работает RAII.
    Из-за GIR( https://gi.readthedocs.io/en/latest/ )(то почему GTK есть для всех языков) можно использовать из любого языка бесплатна получая высокоуровневые бинды.
    Можно заставить генерировать чистый C без GLib, но тогда ООП пропадает (есть PR чтоб продолжили работать Compact классы)

    Куда высокоуровневее zig/odin/jai, так что это не замена С, я бы сказал что это такая смесь Java/C#/Go с очень простым вызовом C кода (кстати при бинде C либ ресурсами Vala управляет также как и своими, никакого unsafe). Перешел 2 года назад с Qt на Vala + GTK.


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 15-Фев-21 19:50 
Синтаксис хуже котлина в 10 раз, хуже в 5 раз раста, в 2,5 чем С++ 2020.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 15-Фев-21 19:57 
Перечисли ещё языки, которые ты хотел бы знать, но башка слишком тупая

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Сишник , 15-Фев-21 20:02 
Спасибо, твой коммент побудил меня глянуть синтаксис - вполне приятный классический синтаксис, надо будет поюзать где-нибудь.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 15-Фев-21 20:20 
    Очень рад что кому то в СНГ сообществе не пофиг на валу настолько что не поленился перевести изменения не мажорного релиза.
    Думаю некоторые пункты требуют пояснений.

>type narrowing

    Теперь если на тип была сделана проверка, то внутри этой проверки объект будет автоматически приведен к данному типу
    if (x is Obj) {x.ObjField вместо (x as Obj).ObjField}

>Добавлена поддержка "непрозрачных" (opaque) компактных классов;

    Compact классы нужны добавления OOP к C библиотекам при биндах к Vala или просто для оптимизации производительности. По сути это легковесные классы с хитрым slice аллокатором, почитать него можно тут же на опеннете (https://www.opennet.dev/docs/RUS/glib_api/glib-Memory-Slices.... ).
    Так вот раньше такие были крайне ограничены в функционале, по сути там были только публичные поля и функции, теперь возможны private, internal, и свойства.
    
    


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 15-Фев-21 21:25 
Можете порекомендовать готовые примеры/самоучитель по Vala?

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 15-Фев-21 22:18 
Вот тут коллекция ссылок.
https://wiki.gnome.org/Projects/Vala/Documentation

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 16-Фев-21 18:49 
Взял пример отсюда: https://wiki.gnome.org/Projects/Vala/GTKSample
Сделал так: valac --pkg gtk4 program_test_01.vala

Сыпануло ошибками. Есть ли готовые руководства по программированию GTK4 на Vala?

program_test_01.vala:4.5-4.23: error: 1 extra arguments for `void Gtk.init ()'
    Gtk.init (ref args);
    ^^^^^^^^^^^^^^^^^^^
program_test_01.vala:8.5-8.23: error: The name `border_width' does not exist in the context of `Gtk.Window' (gtk4)
    window.border_width = 10;
    ^^^^^^^^^^^^^^^^^^^
program_test_01.vala:9.5-9.26: error: The name `window_position' does not exist in the context of `Gtk.Window' (gtk4)
    window.window_position = WindowPosition.CENTER;
    ^^^^^^^^^^^^^^^^^^^^^^
program_test_01.vala:11.5-11.26: error: The name `connect' does not exist in the context of `Gtk.Window.destroy'
    window.destroy.connect (Gtk.main_quit);
    ^^^^^^^^^^^^^^^^^^^^^^
program_test_01.vala:18.5-18.14: error: The name `add' does not exist in the context of `Gtk.Window' (gtk4)
    window.add (button);
    ^^^^^^^^^^
program_test_01.vala:19.5-19.19: error: The name `show_all' does not exist in the context of `Gtk.Window' (gtk4)
    window.show_all ();
    ^^^^^^^^^^^^^^^
program_test_01.vala:21.5-21.12: error: The name `main' does not exist in the context of `Gtk' (gtk4)
    Gtk.main ();
    ^^^^^^^^
Compilation failed: 7 error(s), 0 warning(s)


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Совершенно другой аноним , 17-Фев-21 09:34 
Пример, который Вы пытались собрать, применим только к GTK3+, и не будет собираться с GTK4. Скорее всего руководства нет, есть гид по миграции с GTK3+ на GTK4 (https://developer.gnome.org/gtk4/unstable/gtk-migrating-3-to...), но для C. Можно попытаться воспользоваться им, смотря что поменялось для C, и соответственно заменяя или используя другие подходы для Vala.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 17-Фев-21 21:23 
Примеры с GTK 4 есть вот тут https://github.com/aeldemery?tab=repositories

"VALA"
Отправлено Аноним , 03-Авг-21 13:10 
Благодарю. Всё работает.

Есть ли надежды на некий базовый туториал по программированию GNOME + GTK4 на Vala?


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 15-Фев-21 21:40 
А как с поддержкой платформ, отличных от Linux?  
Qt ведь поддерживает полноценно Windows/macOS

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Совершенно другой аноним , 15-Фев-21 22:20 
Есть поддержка и Windows https://wiki.gnome.org/Projects/Vala/ValaOnWindows и macOS https://wiki.gnome.org/Projects/Vala/ValaOnOSX

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 15-Фев-21 22:23 
GLib - кроссплатформенна.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Dzen Python , 15-Фев-21 22:07 
Хороший язык, всем хорош, кроме излишней завязки на гтк.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 17-Фев-21 22:47 
> Хороший язык, всем хорош, кроме излишней завязки на гтк.

Завязки на GTK нет, по дефолту единственной зависимостью является GLib которая полностью кроссплатформена(можете попробовать на своем телефоне через Termux или Windows через msys2)

Если компилировать --profile=posix то будет генерироваться чистый С с единственной зависимостью libc вашего дистрибутива. Совместив это с биндингами к WINAPI или POSIX ( https://valadoc.org/posix/index.htm ) можно писать замечательный платформо зависимый код, правда эту и множество других проблем за вас решает GLib ( https://www.opennet.dev/docs/RUS/glib_api/ ).


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 16-Фев-21 11:11 
А что там с поддержкой XML?

Ну то есть я вижу GXml, а не то, это реализация DOM4.
Вижу libxml2 - это вообще конченная... FFFFFFUUU~~~ (простите у меня вьетнамские флешбеки от этой либы)

Если есть тут люди писавшие на vala дальше чем хелловорлд, подскажите есть ли в Vala поддержка современного Xpath 2.1 / Xslt 3.0 ? Если там libxml2 вместо мозгов, то очевидно что нет. Но GXml вроде реализует свежий DOM...

Или вот еще. Есть XML-документы, точнее поток сериализованных XML-объектов. Я их хочу трансформировать и десериализовать внутрь своих типов на языке Vala. Я могу это сделать? Или мне надо для этого пердолиться в DOM как это делают всякие питонисты?

И наоборот, поддерживает ли XML-сериализатор аннотирование так чтобы я могу рулить элементами и атрибутами, чтобы получить желаемый формат документа при сериализации. DOM не предлагать.


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 16-Фев-21 11:34 
А, то есть, Java и .Net уже непопулярный энтерпрайз?!

Да и вообще, вам точно нужен XML?


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 16-Фев-21 12:10 
> Да и вообще, вам точно нужен XML?

Да, по двум причинам:
1. Я не могу исправить/переписать софт который это шлёт. Теоретически это возможно, но чисто технически это невменяемый объем беспричинных изменений.
2. Если есть "обмен", это когда 2 энтерпрайзные соплекухи на бекендах шлют поток взаимосвязанных объектов разной степени упитанности, то SOAP и XML это правильный выбор.

> А, то есть, Java и .Net уже непопулярный энтерпрайз?!

.Net прекрасно решает все эти задачи до тех пор пока тебе не нужно писать портянки на Xpath 1.0, видимо Vala и весь GNOME точно также как и MS со своим Windows и .Net намертво застрял в старых версиях XML, потому что обновиться сложно... от этого полетит .Net Standard и зависимости Windows от этого API и вообще они отказались обновляться причем заявили об этом публично. Да, в Java поддержка XML в разы лучше, но зато там всё остальное... Vala + GTK даст твоему приложению нормальный интерфейс. Java кроме вебни в томкате выглядит и работает так, что пользователю такое не поставишь.

Не ну чисто теоретически можно их подружить отделив и переписав куски бекенда на Java, но это не упростит работу а усложнит.

Мне просто любопытно, есть ли смысл соваться в Vala, которая сильно-сильно похожа на C#, или это маленький язык для написания приложений типа Часы и Календарь в GNOME3?...


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 17-Фев-21 22:01 
>или это маленький язык для написания приложений типа Часы и Календарь в GNOME3

Давайте приведу пару не часов и календарей
1) Ядро Frida( https://github.com/frida/frida frida-core) https://frida.re/ это такой дизасемблер с возможностью скриптинга на разных языках(как раз из-за GIR)
2) Akira ( https://github.com/akiraux/Akira/pull/485 ) сейчас в активной разработке, будет векторным редактором ориентированным на дизайнеров UI.
3) Planner ( https://github.com/alainm23/planner ) лучшая тудушка под линь из нативный, синхронит с Todoist
4) Coanda ( https://coanda.ca/ ), довольно большая АСУТП компания содержит в своих репах Vala код, в том числе SCADA систему. ( https://github.com/coanda?q=&type=&language=vala )
5) Dino ( https://github.com/dino/dino ) Jabber клиент
6) https://www.ev3dev.org/ любители перепрошить лего на дебиан( https://github.com/ev3dev/ev3devKit ), а также их brickman и grx-widgets(виджеты под чернобелые маленькие экраны) написаны на Vala
7) https://documatrix.com/ Компания специализируется на обработке документов, к сожелению большая часть софта закрыта, но в открытой видно что они используют достаточно много Vala ( https://github.com/documatrix?q=&type=&language=vala ) и она обновляется.
8) https://birdfont.org/ Программа для создания шрифтов ( https://github.com/johanmattssonm/birdfont ), кстати у них своя XML либа, тоже на Vala( https://github.com/johanmattssonm/xmlbird )
9) Rygel достаточно большое медиа-решение, у автора есть данные что оно используется некоторыми автопроизводителями https://wiki.gnome.org/Projects/Rygel/Development сурсы https://gitlab.gnome.org/GNOME/rygel/
10) DE Elementary OS и Budgie
11) Во времена N900 Nokia использовала Vala для интерфейсов, у нас сохранились биндинги к их UI фреймворку Hildon https://valadoc.org/hildon-1/Hildon.html https://valadoc.org/hildon-fm-2/Hildon.html

Также заявили что используют Vala, но код закрыт компании: https://www.untangle.com/ https://www.cablelabs.com/ https://www.realmacsoftware.com/


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 17-Фев-21 21:32 
Да, GXml неплоха, кстати целиком написана на Vala ( https://gitlab.gnome.org/GNOME/gxml ) не нравится забиндите любую понравившуюся либу поддерживающую C FFI, благо это довольно просто.

Вот пример ( https://gitlab.com/gavr123456789/xml-object-mapping-example ) её использования двумя способами, оба делают одно и тоже, достают отсюда ( http://www.cbr.ru/scripts/XML_daily.asp ) курс Гонконгских долларов.

Первый способ мапит объекты XML на объекты Vala(строка 44), второй способ использует упомянутый вами Xpath(строка 12)


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 18-Фев-21 11:04 
Наткнулся на такую особенность:

int main(string[] args) {
    var arr = new int[1] {1, 2, 3};
    int[1] arr2 = {1, 2, 3};
    stdout.printf("Length of arr = %d\n", arr.length);
    stdout.printf("Length of arr2 = %d\n", arr2.length);

    return 0;
}

$ vala main.vala
Length of arr = 1
Length of arr2 = 3

$ valac --version
Vala 0.48.6


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 18-Фев-21 11:53 
>[оверквотинг удален]
>  int[1] arr2 = {1, 2, 3};
>  stdout.printf("Length of arr = %d\n", arr.length);
>  stdout.printf("Length of arr2 = %d\n", arr2.length);
>  return 0;
> }
> $ vala main.vala
> Length of arr = 1
> Length of arr2 = 3
> $ valac --version
> Vala 0.48.6

v.vala:3.5-3.10: error: syntax error, no expression allowed between array brackets
    int[1] arr2 = {1, 2, 3};
    ^^^^^^
Compilation failed: 1 error(s), 0 warning(s)

valac --version
Vala 0.50.3


int[] arr в стиле C# - массив на куче, в него можно динамически добавлять данные через arr += 2;
int arr[] в стиле C - массив на стеке
Предполагаю что на твоей старой версии компилятора массив просто расширился чтобы вместить 3 элемента.


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 18-Фев-21 13:24 
Почему-то по-разному вывел размер массива (main.c):
...
_tmp0_ = g_new0 (gint, 1);
_tmp0_[0] = 1;
_tmp0_[1] = 2;
_tmp0_[2] = 3;
arr = _tmp0_;
arr_length1 = 1;
_arr_size_ = arr_length1;
_tmp1_ = g_new0 (gint, 3);
_tmp1_[0] = 1;
_tmp1_[1] = 2;
_tmp1_[2] = 3;
arr2 = _tmp1_;
arr2_length1 = 3;
_arr2_size_ = arr2_length1;
...

Но компилятор таки надо будет попробовать посвежее, ага.


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 18-Фев-21 13:40 
А свежие версии только из исходников компилить? В ppa тоже старая версия.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 18-Фев-21 21:15 
Написал разрабу в IRC, обновил https://launchpad.net/~vala-team/+archive/ubuntu/next

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 18-Фев-21 22:35 
Отлично, спасибо! (хоть я и собрал таки уже из исходников)
Погляжу поближе, что он из себя представляет.

"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 18-Фев-21 14:25 
>int arr[] в стиле C - массив на стеке

main.vala:
int main(string[] args) {
    int arr3[] = {1, 2, 3};
    return 0;
}

main.c:
...
gint arr3[3] = {0};
gint _tmp0_[3] = {0};
FILE* _tmp1_;
gint result = 0;
_tmp0_[0] = 1;
_tmp0_[1] = 2;
_tmp0_[2] = 3;
memcpy (arr3, _tmp0_, 3 * sizeof (gint));
...
Хм, и они говорят, что нет оверхеда по сравнению с Си?


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено gavr , 18-Фев-21 21:41 
Vala делает много разных трюков для оптимизации и избегания сишного UB.
Это кстати в данном случае и то и другое

https://ru.wikipedia.org/wiki/SSA

https://stackoverflow.com/questions/54058529/why-valac-gener...

Проверяйте сначала ассемблер https://godbolt.org/z/c8cs5Y


"Выпуск экспериментальной версии транслятора языка программир..."
Отправлено Аноним , 18-Фев-21 22:42 
Спасибо за терпеливое разъяснение.