Aktualizacja kompilatora języka programowania Vala 0.50.4

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

Dodaj komentarz