ОбновлСниС компилятора языка программирования Vala 0.50.4

Π’Ρ‹ΡˆΠ»Π° новая вСрсия компилятора для языка программирования Vala 0.50.4. Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π° Π²Π΅Ρ‚ΠΊΠ° с долгосрочной ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ (LTS) Vala 0.48.14 (упаковываСтся для Ubuntu 18.04) ΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° Vala 0.51.3.

Π―Π·Ρ‹ΠΊ Vala являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ языком программирования, прСдоставляСт синтаксис, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ языкам C# ΠΈΠ»ΠΈ Java. Π’ качСствС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Gobject (Glib Object System). Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ осущСствляСтся ΠΏΠΎ владСнию (owned/unowned ссылки) Π»ΠΈΠ±ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ARC(подстановка дСструкторов ΠΈ Π΄Π΅ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² счСтчиков ссылок ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° этапС компиляции).

Π’ языкС имССтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° интроспСкции, лямбда-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, интСрфСйсов, Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠ² ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π½ΠΈΠΉ, сигналов ΠΈ слотов, ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ, свойств, Π½Π΅Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², вывСдСния Ρ‚ΠΈΠΏΠΎΠ² для Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚Π΅ поставляСтся большоС количСство Π±ΠΈΠ½Π΄ΠΈΠ½Π³ΠΎΠ² ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌ Π½Π° языкС C (vala-girs, vala-extra-vapis). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС Vala Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² прСдставлСниС Π½Π° языкС C, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΡˆΡ‚Π°Ρ‚Π½Ρ‹ΠΌ компилятором для языка C. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ сцСнария.

Бписок измСнСний:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова params для конструкторов class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
  • codegen:
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° конструкторов SimpleType struct (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π±ΠΈΠ½Π΄ΠΈΡ‚ΡŒ typedef uint32_t people_inside; ΠΈΠ· C) [SimpleType] [CCode (cname = «people_inside»)] public struct PeopleInside : uint32 {}
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° «NoWrapper».
    • Для классов Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ CCode.type_cname ΠΈ get_ccode_type_name().
    • ВсСгда использован G_TYPE_INSTANCE_GET_CLASS/INTERFACE для Π²Π½Π΅ΡˆΠ½ΠΈΡ… символов.
    • Использован g_boxed_free Π² free-wrapper для размСщСния GLib.Value Π² ΠΊΡƒΡ‡Π΅.
    • Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти Π²ΠΎ врСмя нСявного анбоксинга GLib.Value (ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ любого value Ρ‚ΠΈΠΏΠ°).
    • Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Π° ΡƒΡ‚Π΅Ρ‡ΠΊΠ° памяти Π²ΠΎ врСмя пСрСмСщСния heap-allocated структуры Π² stack.
    • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ наслСдованиС дСструктора Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ структуры
    • НалаТСно ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ symbol_reference Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… cast-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
    • Π£Π΄Π°Π»Π΅Π½Ρ‹ всС Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ вхоТдСния CCodeCastExpression.
    • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Ρ‘Π½ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигналов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
    • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ «string.h» для strcmp() (POSIX ΠΏΡ€ΠΎΡ„Π°ΠΉΠ», Ρ€Π΅ΠΆΠΈΠΌ ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Vala Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π‘ Π±ΠΈΠ±Π»ΠΈΡ‚ΠΎΡ‚Π΅ΠΊΡƒ).
  • Vala:
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² исходных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ².
    • Поля/свойства GtkChild Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΠΊΠ°ΠΊ unowned.
    • Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ пСрСназначСния поля/свойства GtkChild.
    • ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ строгоС условиС для лямбды ΠΏΡ€ΠΈ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ назначСния.
    • Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅ΠΈΠ½Π΅ ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Ρ… структур SimpleType.
    • Π’ GLib.Value unboxing обСспСчСн Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ unowned-зничСния.
    • Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ GLib.Value ΠΊ Ρ‚ΠΈΠΏΡƒ nullable struct/simple.
    • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° Π² Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ…/прСдусловий класса/интСрфСйса.
    • Π—Π°ΠΏΡ€Π΅Ρ‰Ρ‘Π½ Π·Π°Ρ…Π²Π°Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²/ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… va_list.
    • Π”ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ, содСрТащиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΊ Π½ΡƒΠΆΠ½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΏΡ€ΠΈ доступС для избСТания Π‘ UB.
    • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ Ρ‚ΠΈΠΏΠΎΠ² для «in» Π²Π½ΡƒΡ‚Ρ€ΠΈ enum.
    • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° контСкста ΠΏΡ€ΠΈ присвоСниях Π² ΠΏΠΎΠ»Π΅ writeable.
    • ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Ρ‘Π½ «stdlib.h» для Enum.to_string() (POSIX).
    • УстановлСн ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ source_reference для нСявных ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… «this» ΠΈ «result»
    • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ Π²Ρ‹Π²ΠΎΠ΄ сообщСния ΠΎΠ± ошибкС для нСдопустимого Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΡƒΠ½Π°Ρ€Π½Ρ‹Ρ… Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.
  • Π‘odewriter: ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ «;» послС Ρ‚Π΅Π»Π° WithStatement.
  • Girparser:
    • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° Π°Π½ΠΎΠ½ΠΈΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°, Π½Π΅ ΠΏΠΎΠ΄ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΈΠ»ΠΈ сигналом.
    • ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ «delegate_target» для ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
    • ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ «destroy_notify_cname» для ΠΏΠΎΠ»Π΅ΠΉ
    • ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½Ρ‹ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ «type_get_function» для классов ΠΈ интСрфСйсов
    • УстановлСн CCode.type_cname для классов, Ссли ΠΎΠ½ Π½Π΅ соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
  • girwriter: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° запись элСмСнтов ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² экзСмпляра.
  • girwriter: Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигналов ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.
  • libvaladoc/html: Π£Π±Ρ€Π°Π½Π° сортировка ΠΏΠΎΠ»Π΅ΠΉ структур Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΡ… ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ порядок ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ html Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ valadoc.org
  • libvaladoc: ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для Api.Class.is_compact
  • libvaladoc: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Π²Ρ€Π°ΠΏΠ΅Ρ€ для «agedge» Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ graphviz
  • Π‘ΠΈΠ½Π΄ΠΈΠ½Π³ΠΈ:
    • МСлкиС исправлСния ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ привязок: 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
    • gdk-pixbuf-2.0: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Pixbuf.save_to_streamv_async()
    • gio-2.0: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ привязки PollableOutputStream.write*_nonblocking()
    • gio-2.0,gtk+-3.0,gtk4: ΠžΡ‚Π±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ явныС Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ c-Ρ‚ΠΈΠΏΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² va_list
    • gio-2.0: Π’Ρ‹Π±Ρ€Π°Π½ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ invoker для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² AppInfo/File.*()
    • glib-2.0: Π”ΠΎΠ±Π°Π²Π»Π΅Π½ GLib.[S]List.is_empty() convenience methods for non-null
    • glib-2.0: Π‘ΠΈΠ½Π΄ΠΈΠ½Π³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assert_cmp* [#395]
    • glib-2.0: Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ Ρ‚ΠΈΠΏ поля OptionEntry.flags
    • glib-2.0: PtrArray Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ подкласс GenericArray
    • gstreamer-1.0: CCode.type_id ΠΌΠΈΠ½ΠΈ-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°(MiniObject) выставляСтся ΠΊΠ°ΠΊ G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0: ΠžΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ использованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° CCode.type_cname
    • gtk+-3.0,gtk4: Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½Ρ‹ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Π΄Π΅Π»Π΅Π³Π°Ρ‚ΠΎΠΌ значСния ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹
    • gtk4: ΠžΠ±Π½ΠΎΠ²Π»Ρ‘Π½ Π΄ΠΎ вСрсии 4.0.2.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru