The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

15.02.2021 14:42

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

В языке имеется поддержка интроспекции, лямбда-функций, интерфейсов, делегатов и замыканий, сигналов и слотов, исключений, свойств, ненулевых типов, выведения типов для локальных переменных (var). Для языка разработана библиотека обобщённого программирования libgee, предоставляющая возможность создания коллекций для пользовательских типов данных. Поддерживается перечисление элементов коллекций при помощи оператора foreach. Программирование графических программ осуществляется при помощи графической библиотеки GTK+. В комплекте поставляется большое количество биндингов к библиотекам на языке C.

Программы на языке Vala транслируются в представление на языке C, а затем компилируются штатным компилятором для языка C. Имеется возможность запуска программ в режиме сценария. Транслятором Vala осуществляется поддержка языка Genie, который предоставляет аналогичные возможности, но с синтаксисом, вдохновлённым языком программирования Python.

Язык Vala развивается под эгидой проекта GNOME. На Vala написаны такие программы, как почтовый клиент Geary, графическая оболочка Budgie, программа управления коллекцией фото и видео Shotwell и другие. Vala активно используется при разработке компонентов Linux-дистрибутива Elementary OS.

В новой версии:

  • Добавлена поддержка автоматического приведения типов (type narrowing) в выражениях;
    
       if (x is Foo){
           x.SomeFooField // нет необходимости явного приведения "x" к "Foo"
       }
    
  • Добавлена поддержка вызова цепочек конструкторов для шаблонов;
  • Добавлена проверка версии libvala в процессе выполнения;
  • Добавлена поддержка "непрозрачных" (opaque) компактных классов;
  • Расширена поддержка параметров-массивов в конструкторах;
  • В girparser добавлена обработка анонимных делегатов не поддерживаемых виртуальными методами или сигналами;
  • Исправлены недоработки в valadoc, libvaladoc и girwriter;
  • Добавлен биндинг к SDL 2.x, прекращена поддержка биндинга SDL 1.x;
  • Добавлен биндинг к Enchant 2.x;
  • Устранена утечка памяти при явном копировании массивов, использовании Glib.Value, переносе выделенной в "Куче" структуры на стек;
  • Биндинг к gdk-pixbuf-2.0 обновлён до версии 2.42.3;
  • Добавлен биндинг функции getopt_long() и ещё нескольких функций GNU;
  • Добавлен биндинг к libunwind-generic;
  • Исправлены биндинги к cairo, gobject-2.0, pango, goocanvas-2.0, curses, alsa, bzlib, sqlite3, libgvc, posix, gstreamer-1.0, gdk-3.0, gdk-x11-3.0, gtk+-3.0, gtk4, fuse, libxml-2.0;
  • Биндинг к gio-2.0 обновлён до версии 2.67.3;
  • Биндинг к gobject-2.0 обновлён до версии 2.68;
  • Биндинг к gstreamer обновлён до версии 1.19.0+ git master;
  • Биндинг к gtk4 обновлён до версии 4.1.0+2712f536;
  • Добавлены биндинги к API регулярных выражений для POSIX, GNU и BSD;
  • Биндинг к webkit2gtk-4.0 обновлён до версии 2.31.1;
  • Исправлены накопившиеся ошибки и недоработки компилятора.


  1. Главная ссылка к новости (http://www.mail-archive.com/re...)
  2. OpenNews: Выпуск компилятора для языка программирования Vala 0.49.1
  3. OpenNews: Выпуск компилятора для языка программирования Vala 0.50.0
  4. OpenNews: Релиз браузерного движка WebKitGTK 2.30.0 и web-браузера Epiphany 3.38
  5. OpenNews: Выпуск графического тулкита GTK 4.0
  6. OpenNews: Опубликован GTK 4.0.1 с улучшением поддержки мультимедиа
Автор новости: Совершенно другой аноним
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/54584-vala
Ключевые слова: vala
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (38) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 19:39, 15/02/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +15 +/
    Хороший язык здорового программиста.
     
     
  • 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 нету нормальной работы ни с чем, кроме с++.

     
     
  • 4.23, Аноним (23), 08:02, 16/02/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Python - PyQt
     
     
  • 5.28, Аноним (28), 15:59, 16/02/2021 [^] [^^] [^^^] [ответить]  
  • –1 +/
    это ужас, только для хеловорлдов.
     
     
  • 6.31, Аноним (31), 16:51, 17/02/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да ладно: говорим AI, подразумеваем Python.
     

  • 1.2, Какаянахренразница (ok), 19:45, 15/02/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Брат-близнец vlang-a?
     
     
  • 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.3, Аноним (3), 19:50, 15/02/2021 Скрыто ботом-модератором [﹢﹢﹢] [ · · · ]     [к модератору]
  • –9 +/
     

     ....ответы скрыты (2)

  • 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, и свойства.
        
        

     
  • 1.10, Аноним (-), 21:25, 15/02/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Можете порекомендовать готовые примеры/самоучитель по Vala?
     
     
  • 2.15, gavr (ok), 22:18, 15/02/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Вот тут коллекция ссылок.
    https://wiki.gnome.org/Projects/Vala/Documentation
     
     
  • 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.
     
  • 4.32, gavr (ok), 21:23, 17/02/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Примеры с GTK 4 есть вот тут https://github.com/aeldemery?tab=repositories
     
     
  • 5.45, Аноним (-), 13:10, 03/08/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Благодарю. Всё работает.

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

     

  • 1.11, Аноним (11), 21:40, 15/02/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как с поддержкой платформ, отличных от Linux?  
    Qt ведь поддерживает полноценно Windows/macOS
     
     
  • 2.17, Совершенно другой аноним (?), 22:20, 15/02/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Есть поддержка и Windows https://wiki.gnome.org/Projects/Vala/ValaOnWindows и macOS https://wiki.gnome.org/Projects/Vala/ValaOnOSX
     
  • 2.18, Аноним (1), 22:23, 15/02/2021 [^] [^^] [^^^] [ответить]  
  • +1 +/
    GLib - кроссплатформенна.
     

  • 1.13, Dzen Python (ok), 22:07, 15/02/2021 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    Хороший язык, всем хорош, кроме излишней завязки на гтк.
     
     
  • 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... большой текст свёрнут, показать
     
  • 2.33, gavr (ok), 21:32, 17/02/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Да, 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)

     
     
  • 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 тоже старая версия.
     
     
  • 6.41, gavr (ok), 21:15, 18/02/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Написал разрабу в IRC, обновил https://launchpad.net/~vala-team/+archive/ubuntu/next
     
     
  • 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));
    ...
    Хм, и они говорят, что нет оверхеда по сравнению с Си?

     
     
  • 6.42, gavr (ok), 21:41, 18/02/2021 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Vala делает много разных трюков для оптимизации и избегания сишного UB.
    Это кстати в данном случае и то и другое

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

    https://stackoverflow.com/questions/54058529/why-valac-generates-these-meaning

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

     
     
  • 7.44, Аноним (43), 22:42, 18/02/2021 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо за терпеливое разъяснение.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру