Vala programmēšanas valodas kompilatora atjauninājums 0.50.4

Ir izlaista jauna Vala programmēšanas valodas 0.50.4 kompilatora versija. Atjaunināta arī ilgtermiņa atbalsta (LTS) filiāle Vala 0.48.14 (iepakota Ubuntu 18.04) un eksperimentālā filiāle Vala 0.51.3.

Vala valoda ir objektorientēta programmēšanas valoda, kas nodrošina C# vai Java līdzīgu sintaksi. Kā objekta modelis tiek izmantots Gobject (Glib Object System). Atmiņas pārvaldība tiek veikta, pamatojoties uz īpašumtiesībām (piederošās/nepiederošās saites) vai izmantojot ARC (destruktoru aizstāšana un objektu atsauces skaitītāju samazināšana kompilācijas stadijā).

Valoda atbalsta introspekciju, lambda funkcijas, saskarnes, delegātus un slēgšanu, signālus un laika nišas, izņēmumus, rekvizītus, veidus, kas nav nulles, tipu secinājumus vietējiem mainīgajiem. Komplektā ir liels skaits iesējumu bibliotēkām C valodā (vala-girs, vala-extra-vapis). Vala programmas tiek tulkotas C attēlojumā un pēc tam kompilētas ar standarta kompilatoru C. Ir iespēja palaist programmas skripta režīmā.

Izmaiņu saraksts:

  • Pievienots papildu atbalsts params atslēgvārdam konstruktoru klasei Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
  • kodētājs:
    • Uzlabots SimpleType struktūru konstruktoru atbalsts (piemēram, izmanto, lai saistītu typedef uint32_t people_inside; no C) [SimpleType] [CCode (cname = "people_inside")] publiskā struktūra PeopleInside : uint32 {}
    • Uzlabota atribūta “NoWrapper” apstrāde.
    • Klasēm ir atļauts izmantot CCod.type_cname un get_ccode_type_name().
    • G_TYPE_INSTANCE_GET_CLASS/INTERFACE vienmēr tiek izmantots ārējiem simboliem.
    • Izmantots g_boxed_free brīvajā iesaiņojumā, lai kaudzītē piešķirtu GLib.Value.
    • Novērsta atmiņas noplūde GLib.Value (jebkura vērtības veida universālā konteinera) netiešās izņemšanas laikā.
    • Novērsta atmiņas noplūde, pārvietojot kaudzes piešķirto struktūru uz steku.
    • Tiek nodrošināta vecāku struktūras destruktora pārmantošana
    • Ir uzlabota ligzdoto izteicienu symbol_reference pareiza izguve.
    • Noņemti visi ligzdotie CCodeCastExpression gadījumi.
    • Pārtraukta nepareiza izsaukšana noklusējuma signāla apstrādātājam.
    • Savienots "string.h" strcmp() (POSIX profils, režīms, kurā Vala ģenerē kodu, izmantojot tikai standarta C bibliotēku).
  • Vala:
    • Uzlabota pakotņu avota failu dublikātu noteikšana.
    • GtkChild lauki/īpašumi ir jāpaziņo par nepiederošiem.
    • GtkChild lauka/īpašuma atkārtota piešķiršana ir aizliegta.
    • Deleģējot uzdevumu, lambda ir piemērots stingrāks nosacījums.
    • Aizliegts izmantot vienreizējās SimpleType struktūras.
    • GLib.Value unboxing nodrošina, ka tiek atgriezta nepiederošā vērtība.
    • GLib.Value apraide nullējamā struktūrā/vienkāršā veidā ir aizliegta.
    • Pievienota tipa argumentu pārbaude bāzes tipu/klases/interfeisa priekšnosacījumos.
    • Ir aizliegts tvert va_list parametrus/mainīgos.
    • Vispārīgajiem līdzekļiem, kas satur rādītāju uz struktūru, piekļūstot, ir jāievada pareizais veids, lai izvairītos no C UB.
    • Ieviests tipa secinājums "in" enum iekšpusē.
    • Uzlabota konteksta pārbaude uzdevumiem rakstāmajam laukam.
    • Iekļauts "stdlib.h" Enum.to_string() (POSIX).
    • Pareizā avota_atsauce ir iestatīta netiešajiem mainīgajiem "this" un "result"
    • Nodrošināts kļūdas ziņojums par nederīgu iekšēju unāru izteiksmju operandu.
  • Сodewriter: pārtraukta beigu ";" pievienošana pēc ķermeņa WithStatement.
  • Girparser:
    • Tiek nodrošināta anonīma delegāta apstrāde, kas nav nodrošināta ar virtuālu metodi vai signālu.
    • Metodēm un parametriem lietoti "delegate_target" metadati
    • Lietojiet laukiem metadatus "destroy_notify_cname".
    • Lietojiet "type_get_function" metadatus klasēm un saskarnēm
    • Iestatiet klasēm CCod.type_cname, ja tā nav noklusējuma vērtība.
  • girwriter: nodrošina, ka tiek ierakstīti instances parametru elementi.
  • girwriter: ieviesta noklusējuma signālu apstrādātāja izeja.
  • libvaladoc/html: noņemta struktūras lauku šķirošana, lai, ģenerējot html dokumentāciju, atstātu to sākotnējo secību valadoc.org
  • libvaladoc: nodrošiniet, lai Api.Class.is_compact vērtības tiktu izgūtas pareizi
  • libvaladoc: pievienots iesaiņojums graphviz bibliotēkai "agedge".
  • Saites:
    • Nelieli labojumi, ģenerējot saitējumus: cairo, gobject-2.0, pango, goocanvas-2.0, lāsti, alsa, bzlib, sqlite3, libgvc, posix, gstreamer-1.0, gdk-3.0, gdk-x11-3.0, gtk-3.0, gtk+t. drošinātājs, libxml-4
    • gdk-pixbuf-2.0: labojiet Pixbuf.save_to_streamv_async()
    • gio-2.0: PollableOutputStream.write*_nonblocking() saistīšanas labojums
    • gio-2.0,gtk+-3.0,gtk4: va_list parametru skaidrie c-veida atribūti tiek atmesti
    • gio-2.0: dažām AppInfo/File.*() metodēm atlasīts trūkstošais izsaucējs
    • glib-2.0: pievienotas GLib.[S]List.is_empty() ērtības metodes, kas nav nulles
    • glib-2.0: funkcijas assert_cmp* saistīšana [#395]
    • glib-2.0: uzlabots lauka tips OptionEntry.flags
    • glib-2.0: PtrArray tagad ir GenericArray apakšklase
    • gstreamer-1.0: MiniObject CCode.type_id ir iestatīts uz G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0: izlabota atribūta CCode.type_cname izmantošana
    • gtk+-3.0,gtk4: izlabotas dažas delegāta atgriešanas vērtības un parametri
    • gtk4: atjaunināts uz versiju 4.0.2.

Avots: opennet.ru

Pievieno komentāru