Została wydana nowa wersja kompilatora dla języka programowania Vala 0.50.4. Zaktualizowano także gałąź wsparcia długoterminowego (LTS) Vala 0.48.14 (w pakiecie dla Ubuntu 18.04) i gałąź eksperymentalną Vala 0.51.3.
Język Vala to obiektowy język programowania, który zapewnia składnię podobną do C# lub Java. Jako model obiektowy używany jest Gobject (Glib Object System). Zarządzanie pamięcią odbywa się poprzez własność (powiązania własne/nieposiadane) lub za pomocą ARC (podstawianie destruktorów i zmniejszanie liczników referencji do obiektów na etapie kompilacji).
Język obsługuje introspekcję, funkcje lambda, interfejsy, delegaty i domknięcia, sygnały i gniazda, wyjątki, właściwości, typy inne niż null, wnioskowanie o typie zmiennych lokalnych. Zestaw zawiera dużą liczbę powiązań z bibliotekami w języku C (vala-girs, vala-extra-vapis). Programy Vala są tłumaczone na reprezentację C, a następnie kompilowane przez standardowy kompilator C. Możliwe jest uruchamianie programów w trybie skryptowym.
Lista zmian:
- Dodano dodatkową obsługę słowa kluczowego params dla konstruktorów klasy Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
- koder:
- Ulepszona obsługa konstruktorów struktur SimpleType (na przykład używanych do powiązania typedef uint32_t People_inside; z C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
- Poprawiona obsługa atrybutu „NoWrapper”.
- CCode.type_cname i get_ccode_type_name() są dozwolone dla klas.
- G_TYPE_INSTANCE_GET_CLASS/INTERFACE jest zawsze używany dla symboli zewnętrznych.
- Użyto g_boxed_free w darmowym opakowaniu do przydzielenia GLib.Value na stercie.
- Naprawiono wyciek pamięci podczas niejawnego rozpakowywania GLib.Value (uniwersalnego kontenera dowolnego typu wartości).
- Naprawiono wyciek pamięci podczas przenoszenia struktury przydzielonej stercie na stos.
- Zapewnione jest dziedziczenie destruktora struktury nadrzędnej
- Poprawiono prawidłowe pobieranie symbol_reference zagnieżdżonych wyrażeń rzutowanych.
- Usunięto wszystkie zagnieżdżone wystąpienia CCodeCastExpression.
- Zatrzymano niepoprawne wywoływanie domyślnej procedury obsługi sygnału.
- Połączono „string.h” dla strcmp() (profil POSIX, tryb, w którym Vala generuje kod korzystając wyłącznie ze standardowej biblioteki C).
- Wala:
- Ulepszone wykrywanie zduplikowanych plików źródłowych pakietów.
- Pola/właściwości GtkChild muszą zostać zadeklarowane jako nieposiadane.
- Ponowne przypisanie pola/właściwości GtkChild jest zabronione.
- Podczas delegowania przydziału wobec lambdy zastosowano bardziej rygorystyczny warunek.
- Zabrania się stosowania jednorazowych struktur SimpleType.
- Rozpakowanie GLib.Value gwarantuje, że zwrócona zostanie nieposiadana wartość.
- Rzutowanie GLib.Value na nullable struct/typ prosty jest zabronione.
- Dodano sprawdzanie argumentów typu w warunkach wstępnych typów podstawowych/klas/interfejsów.
- Przechwytywanie parametrów/zmiennych va_list jest zabronione.
- Obiekty generyczne zawierające wskaźnik do struktury muszą zostać rzutowane na właściwy typ podczas uzyskiwania dostępu, aby uniknąć CUB.
- Zaimplementowano wnioskowanie o typie dla „in” wewnątrz wyliczenia.
- Ulepszone sprawdzanie kontekstu przypisań do pola zapisywalnego.
- Dołączono „stdlib.h” dla Enum.to_string() (POSIX).
- Dla ukrytych zmiennych „this” i „result” ustawiono poprawne źródło_odniesienia
- Dostarczono komunikat o błędzie dotyczący nieprawidłowego wewnętrznego operandu wyrażeń jednoargumentowych.
- Сcodewriter: Zatrzymano dodawanie końcowego „;” po treści WithStatement.
- Girparser:
- Zapewnione jest przetwarzanie anonimowego delegata, który nie jest wspierany przez wirtualną metodę lub sygnał.
- Zastosowano metadane „delegate_target” dla metod i parametrów
- Zastosuj metadane „destroy_notify_cname” do pól
- Zastosuj metadane „type_get_function” dla klas i interfejsów
- Ustaw CCode.type_cname dla klas, jeśli nie jest to wartość domyślna.
- girwriter: Zapewnia zapisanie elementów parametrów instancji.
- girwriter: Zaimplementowano domyślne wyjście obsługi sygnału.
- libvaladoc/html: Usunięto sortowanie pól struktury, aby pozostawić ich pierwotną kolejność podczas generowania dokumentacji HTML valadoc.org
- libvaladoc: Upewnij się, że wartości dla Api.Class.is_compact są pobierane poprawnie
- libvaladoc: Dodano opakowanie dla biblioteki graphviz „agedge”.
- Wiązania:
- Drobne poprawki przy generowaniu powiązań: cairo, gobject-2.0, pango, goocanvas-2.0, curves, alsa, bzlib, sqlite3, libgvc, posix, gstreamer-1.0, gdk-3.0, gdk-x11-3.0, gtk+-3.0, gtk4, bezpiecznik, libxml-2.0
- gdk-pixbuf-2.0: Napraw Pixbuf.save_to_streamv_async()
- gio-2.0: poprawka wiązania PollableOutputStream.write*_nonblocking().
- gio-2.0,gtk+-3.0,gtk4: Jawne atrybuty typu c parametrów va_list są odrzucane
- gio-2.0: Wybrano brakującego wywołującego dla niektórych metod AppInfo/File.*().
- glib-2.0: Dodano wygodne metody GLib.[S]List.is_empty() dla wartości innych niż null
- glib-2.0: Powiązanie funkcji Assert_cmp* [#395]
- glib-2.0: Ulepszony typ pola OptionEntry.flags
- glib-2.0: PtrArray jest teraz podklasą GenericArray
- gstreamer-1.0: CCode.type_id MiniObjectu jest ustawiony na G_TYPE_BOXED [#1133]
- gtk+-2.0,javascriptcoregtk-4.0: Poprawione użycie atrybutu CCode.type_cname
- gtk+-3.0,gtk4: Naprawiono niektóre wartości i parametry zwracane przez delegatów
- gtk4: Zaktualizowano do wersji 4.0.2.
Źródło: opennet.ru