Wiem że tak się robi. Nie rozumiem jednak sensu pomysłu uniwersalnego języka, który byłby tłumaczony na inne języki. Gdyby coś takiego powstało nawet, to właśnie logikę byłoby łatwiej przetłumaczyć niz gui, bo wtedy wystarczyłoby przetłumaczyć samą składnię. W przypadku gui, na różnych platformach wymagana może być inna konfiguracja, inne zasoby jak np pliki graficzne i inne pomocnicze itd. Gdyby nawet się udało to zrobić, to te tłumaczenie musiałoby działać w kontekście platformy i frameworka, a nie tylko języka
Od początku podkreslam, że uniwersalny język do napisania całego programu i tak nie jest możliwy. Mi chodzi tylko o uniwersalny język do samej logiki obliczeniowej. Chce mieć apkę w C#+MAUI i w Java+JavaFX. Osobno robię tylko GUI i zdarzenia, a klasy zawierające kod niezależny od GUI robię w tym "uniwersalnym języku" i tylko kopiuję kod wytworzony przez narzędzie transpilujące. Nawet ręcznie pisząc, można "szablonowo" przerobić taką klasę z Java na C# i odwrotnie.
Nawet, taka rzecz, jak bitmapy, to co technologia to ma inne funkcje i inaczej wygląda malowanie na nich. Ale zawsze mozna ręcznie zrobić klasę będącą bitmapą, która ma takie same pola i metody w obu językach, a w sobie miałaby prywatne pole bitmapy typu właściwego dla danej technologii.
Ale po co sobie utrudniać gdy są technologie, gdzie piszesz cały program raz i kompilujesz na każdą platformę ten sam kod, łącznie z GUI? Po co ci potrzebne C# i JavaFX? Potraktuj to jako uniwersalny język programowania, w którym napiszesz cały program.
Jak dotąd to wygląda na to, że walczysz z problemami, które sobie sam wymyśliłeś
Problem może jest sztuczny (czyli nie istnieje, a sam sobie go wymyśliłem), jednak zauważyłem pewną rzecz: Dwie chyba najbardziej popularne technologie to chyba CLR, JVM założeniem obu jest to, że program pisze się jeden raz, kompiluje się jeden raz, a na każdym komputerze (obojętnie, jaki procek i jaki OS) można uruchomić. Obojętnie jaki jest założeniem zbyt trudny do spełnienia, ale w przypadku PC, to funkcjonują cztery platformy:
- Windows na x86
- Linux ne x86
- MacOS na x86
- MacOS na M1/M2
Oczywiście, że oprócz CLR i JVM jest dużo innych pośredników, choćby do Pythona, do Perla i jeszcze kilka można wymienić.
Rzecz w tym, że mając program, który chce się wypuścić w świat, to jeżeli jest i w Java i w C#, to na 80% można uruchomić na każdym z tych czterech, a co do instalowania CLR/JVM to jak jedno nie wyjdzie, to można drugie. Bo jeżeli tworzy się program tylko na własne potrzeby, to nie jest ważne, w czym się go robi, ważne, żeby działał na tym komputerze, na którym ma działać, nic więcej.
Zupełnie inną sprawą jest to, że tak postawiony problem przestaje istnieć, bo odchodzi się od aplikacji desktopowych na rzecz webowych w JavaScript i WASM. Będzie to działać na wszystkim, na komputerach, na telefonach itp. Jednak pojawia się inny problem. Przerobienie desktopowej na webową to już grubszy temat, bo np. w JavaScript nie ma wątków, nie ma możliwości automatycznego otwierania plików (to jest specjalnie zrobione, że nie da się hardkodować ścieżki do pliku, zeby apka HTML+CSS+JS mogła go otworzyć bez wskazywania go przez użytkownika).
Na przykład istnieją już w internecie dwie implementacje biblioteki ZXIng (odczyt i generowanie kodów obrazowych):
https://github.com/zxing/zxing
https://github.com/micjahn/ZXing.Net
Dwa razy napisany taki sam program. Teraz to spróbuj podłączyć biblioteję Java do programu w .NET lub bibliotekę.NET do programu w Java. Pewnie się da, ale nie będzie to proste i docelowy komputer będzie musiał mieć i CLR i JVM, bo jedno do programu, drugie do biblioteki.
Teraz np. mam jakąś apkę w Python i chce do niej dodać odczyt QR kodu. Mogę poszukać zupełnie innej biblioteki do Pythona (zapewne takowa istnieje), bądź próbować podłączyć jedną z powyższych. Dać, to się da, ale to nieco karkołomne.