Uniwersalny język programowania

1
BurgundowyKangur napisał(a):

Kiedyś ktoś chciał stworzyć coś takiego jak uniwersalny język którym mieliby komunikować się wszyscy, a przynajmniej więdzkość ludzi na tej planecie. Ów język nazwali esperanto. Dziś mało kto pamięta o takim tworze. Dlaczego takowy nie ma sensu to można książki o tym pisać.

Esperanto nie wypalił, ale takim uniwersalnym językiem stał się język angielski. Gdzie się nie pojedzie w świat, to w większości przypadków po angielsku można się dogadać.

0
gajusz800 napisał(a):
andrzejlisek napisał(a):
gajusz800 napisał(a):

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:

  1. Windows na x86
  2. Linux ne x86
  3. MacOS na x86
  4. 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.

0

Jak ktoś chce szukać faktycznie uniwersalnych języków programowania, które są szeroko używane, to:

  • XML
  • JSON
  • YAML

Wiem, XML jest przegadany, JSON jest prymitywny, a YAML niejednoznaczny, ale jednak poziom uniwersalności jest bardzo duży.
Co prawda same w sobie nie są językami programowania, ale przy odpowiednim silniku można w nich programować (np. YAML jest używany w devo-psach do pisania prostych skryptów konfigurujących różne rzeczy na serwerach).

Poza tym można odejść od programowania i po prostu zapisywać jakieś dane deklaratywnie. W jednym języku zapiszesz, w drugim odczytasz.

1

Uniwersalnym jezykiem jest angielski, pewien słynny pan stand-uper od Javy mówił. Ewentualnie mozemy druga strone isc, ze jakis low level jezyk np. assembler.

2

Świta mi w głębokich odmętach pamięci mem gdzie dwóch programistów rozmawia że wśród 50 jezyków programowania nie ma idealnego rozwiazania.
I tworzą 51 jezyk programowania :D
Jak by ktoś kojarzył taki obrazek to chętne zweryfikuje moją pamięć

Ciekawe w jakim jezyku będzie pisać AI , bo może kompatybilność z "ludzkimi językami programowania" stanie się kłodą u nogi ?

0

Wątek się wykoleił więc czas wrócić do źródeł.

andrzejlisek napisał(a):

Pytanie jest takie: Czy istnieje "język programowania", w którym mogę napisać jakiś fragment programu, a najlepiej klasę obiektu, i ten kod byłby podstawą części obliczeniowej programu?

Tak, nie, nie wiem.

0
loza_prowizoryczna napisał(a):

Wątek się wykoleił więc czas wrócić do źródeł.

andrzejlisek napisał(a):

Pytanie jest takie: Czy istnieje "język programowania", w którym mogę napisać jakiś fragment programu, a najlepiej klasę obiektu, i ten kod byłby podstawą części obliczeniowej programu?

Tak, nie, nie wiem.

Wykoleił się, ale jakaś sensowna odpowiedź już padła: https://github.com/fusionlanguage/fut

A tego nie znam https://flutter.dev/ wiem, ze w tym można pisać na telefony, ale nie wiem, czy generuje kod w Java/C#.

Przy okazji, można wywnioskować, że zapotrzebowanie na istnienie takiego czegoś jest marginalne.

0
andrzejlisek napisał(a):

Przy okazji, można wywnioskować, że zapotrzebowanie na istnienie takiego czegoś jest marginalne.

Myślę, że zapotrzebowanie jest marginalne, bo bieżące rozwiązania są upierdliwe. Jeśli ktoś zrobiłby taką kooperację pomiędzy taką Javą i Rustem (który uznaje za uniwersalny język, bo niskopoziomowy i można uruchomić wszędzie na WebAssembly), gdzie:

  • pisanie glue codu jest proste i w dużym stopniu zautomatyzowane
  • kompilator ogarnia temat tj. zepsuję coś w jednym języku i dostanę ładny komunikat w drugim
  • debugger ogarnia skakanie pomiędzy językami
  • IDE ogarnia temat
  • budowanie jest tak samo przyjemne jak w przypadku programowania pod jedną platformę

to programisci nie mieliby tyle oporów. Ostatni punkt jest IMO najgorszy. Możliwe, że w przyszłości dostaniemy coś obiecującego, bo systemy budowania stają się coraz mniej upierdliwe, przez co ich łączenie pewnie będzie prostsze.

Dodam tylko, że googlowy system do budowania tj. Bazel jest bardzo upierdliwy, jeśli chodzi o devexp, ale ma jedną wielką siłę: wszystkie technologie buduje się w ten sam sposób tj. nie ma problemu, żeby połączyć javową apkę z libką napisaną w C, bo na poziomie systemu budowania wygląda to identycznie. To naturalnie zachęca do eksperymentowania w tym kierunku

Alternatywę widzę w podejściu nasza platforma jest najważniesza i próbujemy wszystko inne dostosować do niej jak GraalVM, gdzie JVM działa po staremu, ale budowanie i obsługa innych języków jest możliwa poprzez https://www.graalvm.org/latest/graalvm-as-a-platform/language-implementation-framework/

0
andrzejlisek napisał(a):

Wykoleił się, ale jakaś sensowna odpowiedź już padła: https://github.com/fusionlanguage/fut

Przecież to zwykły obfuskator jest a nie uniwersalny język.

7

Kiedy programista mówi że programuje w języku X to ma na myśli zwykle nie sam język, a cały ekosystem języka. Bo języki w praktyce wymagają otoczki - narzędzi, bibliotek, frameworków, kompilatorów, systemów runtime itp. I ekosystem jest zwykle znacznie większy i bardziej złożony niż sam język.

Dlatego koncepcja transpilacji z jednego języka wysokiego poziomu do innego tak słabo chwyciła - bo o ile to fajny akademicki temat na którym można napisać pewnie wiele doktoratów, to w praktyce jest to bardzo trudne do realizacji w takim stopniu aby było użyteczne. Zwyczajnie nie wystarczy tłumaczyć samych konstruktów języka, ale musisz też mapować API pochodzące z różnych ekosystemów, integrować narzędzia itp. W sumie to chyba narzędzia oparte o GPT sprawdzają się w tym na razie najlepiej choć daleko im do ideału.

Zdecydowanie bardziej chwyciła idea języka pośredniego, do którego kompiluje się inne języki wyższych poziomów. I integracja następuje na poziomie języka pośredniego. Czyli nie mamy transpilacji Java -> Scala ale Java -> bajtkod Java, Scala -> bajtkod Java. I w ten sposób można tworzyć rozwiązania wielojęzykowe, w obrębie jednego środowiska i kod w różnych językach może się wzajemnie wywoływać.

Takich języków pośrednich które się spopularyzowały jest kilka - np. bajtkod Java, bajtkod .NET, kod pośredni LLVM, WebAssembly. W pewnym stopniu za języki pośrednie służą też C i JS, mimo że mogą być używane samodzielnie.

BTW: "język praktycznie uniwersalny" można rozumieć jeszcze inaczej - jako język który ma bardzo dużo zastosowań (można w nim napisać wszystko) i/lub jako język którym można zaprogramować różne typy urządzeń - od superkomputerów po mikrokontrolery z 128 B RAMu. Takimi językami są języki o bardzo minimalnych zależnościach wykonawczych - np. C, C++, Rust, Zig. W ich przypadku wystarczy przeportować backend kompilatora aby dodać wsparcie dla nowej platformy.

0
Marius.Maximus napisał(a):

Ciekawe w jakim jezyku będzie pisać AI , bo może kompatybilność z "ludzkimi językami programowania" stanie się kłodą u nogi ?

Wydaje mi się, że AI musi się na czymś wytrenować, a ludzie chyba najczęściej korzystają z języków wysokiego poziomu, tutaj króluje JS i Python i niebardzo AI będzie miało wybór :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1