|
2.12, Dzen Python (ok), 22:04, 15/02/2021 [^] [^^] [^^^] [ответить]
| –9 +/– |
Слишком ориентирован на gtk+ экосистему, за это низачот.
Нормальной работы С++ и QT нету.
| |
|
3.14, gavr (ok), 22:17, 15/02/2021 [^] [^^] [^^^] [ответить]
| +6 +/– |
Никто не может нормально работать с C++/Qt. Если думаешь что это может к примеру D то это неверно, хелловорды работают, а более сложные кейсы уже нет. Как пруф - посмотри как сделаны бинды к Qt для Go и Crystal -- просто обернули все в C API генераторами и вызывают по FFI.
К GTK Vala гвоздями не прибита, GLib это отдельная от GTK часть(по сути когда то давно GTK сильно разрослось и из него выделелась в отдельный проект часть не связанная с GUI, также было у WxWidgets). Кстати GLib полностью кроссплатформенна.
| |
3.16, Аноним (1), 22:20, 15/02/2021 [^] [^^] [^^^] [ответить]
| +1 +/– |
> Нормальной работы С++ и QT нету.
в Qt нету нормальной работы ни с чем, кроме с++.
| |
|
|
|
2.9, gavr (ok), 20:33, 15/02/2021 [^] [^^] [^^^] [ответить]
| +13 +/– |
> Брат-близнец vlang-a?
Да, только в отличии от vlang-a не такой смешной, появился в 2006 и юзался нокией для Maemo ( https://books.google.ru/books?id=9868DwAAQBAJ&pg=PA7&lpg=PA7&dq=Nokia+Maemo+va )
Синтаксически это такой 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.
| |
|
1.8, gavr (ok), 20:20, 15/02/2021 [ответить] [﹢﹢﹢] [ · · · ]
| +7 +/– |
Очень рад что кому то в СНГ сообществе не пофиг на валу настолько что не поленился перевести изменения не мажорного релиза.
Думаю некоторые пункты требуют пояснений.
>type narrowing
Теперь если на тип была сделана проверка, то внутри этой проверки объект будет автоматически приведен к данному типу
if (x is Obj) {x.ObjField вместо (x as Obj).ObjField}
>Добавлена поддержка "непрозрачных" (opaque) компактных классов;
Compact классы нужны добавления OOP к C библиотекам при биндах к Vala или просто для оптимизации производительности. По сути это легковесные классы с хитрым slice аллокатором, почитать него можно тут же на опеннете (https://www.opennet.ru/docs/RUS/glib_api/glib-Memory-Slices.html ).
Так вот раньше такие были крайне ограничены в функционале, по сути там были только публичные поля и функции, теперь возможны private, internal, и свойства.
| |
|
|
3.29, Аноним (-), 18:49, 16/02/2021 [^] [^^] [^^^] [ответить]
| –2 +/– |
Взял пример отсюда: 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)
| |
|
4.30, Совершенно другой аноним (?), 09:34, 17/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
Пример, который Вы пытались собрать, применим только к GTK3+, и не будет собираться с GTK4. Скорее всего руководства нет, есть гид по миграции с GTK3+ на GTK4 (https://developer.gnome.org/gtk4/unstable/gtk-migrating-3-to-4.html), но для C. Можно попытаться воспользоваться им, смотря что поменялось для C, и соответственно заменяя или используя другие подходы для Vala.
| |
|
5.45, Аноним (-), 13:10, 03/08/2021 [^] [^^] [^^^] [ответить]
| +/– |
Благодарю. Всё работает.
Есть ли надежды на некий базовый туториал по программированию GNOME + GTK4 на Vala?
| |
|
|
|
|
1.11, Аноним (11), 21:40, 15/02/2021 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А как с поддержкой платформ, отличных от Linux?
Qt ведь поддерживает полноценно Windows/macOS
| |
|
2.35, gavr (ok), 22:47, 17/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
> Хороший язык, всем хорош, кроме излишней завязки на гтк.
Завязки на GTK нет, по дефолту единственной зависимостью является GLib которая полностью кроссплатформена(можете попробовать на своем телефоне через Termux или Windows через msys2)
Если компилировать --profile=posix то будет генерироваться чистый С с единственной зависимостью libc вашего дистрибутива. Совместив это с биндингами к WINAPI или POSIX ( https://valadoc.org/posix/index.htm ) можно писать замечательный платформо зависимый код, правда эту и множество других проблем за вас решает GLib ( https://www.opennet.ru/docs/RUS/glib_api/ ).
| |
|
1.25, Аноним (25), 11:11, 16/02/2021 [ответить] [﹢﹢﹢] [ · · · ]
| –1 +/– |
А что там с поддержкой XML?
Ну то есть я вижу GXml, а не то, это реализация DOM4.
Вижу libxml2 - это вообще конченная... FFFFFFUUU~~~ (простите у меня вьетнамские флешбеки от этой либы)
Если есть тут люди писавшие на vala дальше чем хелловорлд, подскажите есть ли в Vala поддержка современного Xpath 2.1 / Xslt 3.0 ? Если там libxml2 вместо мозгов, то очевидно что нет. Но GXml вроде реализует свежий DOM...
Или вот еще. Есть XML-документы, точнее поток сериализованных XML-объектов. Я их хочу трансформировать и десериализовать внутрь своих типов на языке Vala. Я могу это сделать? Или мне надо для этого пердолиться в DOM как это делают всякие питонисты?
И наоборот, поддерживает ли XML-сериализатор аннотирование так чтобы я могу рулить элементами и атрибутами, чтобы получить желаемый формат документа при сериализации. DOM не предлагать.
| |
|
2.26, Аноним (26), 11:34, 16/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
А, то есть, Java и .Net уже непопулярный энтерпрайз?!
Да и вообще, вам точно нужен XML?
| |
|
3.27, Аноним (25), 12:10, 16/02/2021 [^] [^^] [^^^] [ответить]
| –1 +/– |
> Да и вообще, вам точно нужен 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?...
| |
|
4.34, gavr (ok), 22:01, 17/02/2021 [^] [^^] [^^^] [ответить] | +1 +/– | Давайте приведу пару не часов и календарей 1 Ядро Frida https github com fri... большой текст свёрнут, показать | |
|
|
|
3.36, Аноним (36), 11:04, 18/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
Наткнулся на такую особенность:
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
| |
|
4.37, gavr (ok), 11:53, 18/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
>[оверквотинг удален]
> 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 элемента.
| |
|
5.38, Аноним (38), 13:24, 18/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
Почему-то по-разному вывел размер массива (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;
...
Но компилятор таки надо будет попробовать посвежее, ага.
| |
5.39, Аноним (38), 13:40, 18/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
А свежие версии только из исходников компилить? В ppa тоже старая версия.
| |
|
|
7.43, Аноним (43), 22:35, 18/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
Отлично, спасибо! (хоть я и собрал таки уже из исходников)
Погляжу поближе, что он из себя представляет.
| |
|
|
5.40, Аноним (38), 14:25, 18/02/2021 [^] [^^] [^^^] [ответить]
| +/– |
>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));
...
Хм, и они говорят, что нет оверхеда по сравнению с Си?
| |
|
|
|
|
|