Uniwersalny język programowania

Uniwersalny język programowania
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 5 godzin
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ć.

BK
BurgundowyKangur
Można albo nie można. W Rosji procent populacji mówi po angielsku, podobnie ma się rzecz w krajach azjatyckich.
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 5 godzin
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.

edytowany 2x, ostatnio: andrzejlisek
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 6 godzin
  • Postów:8406
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.


edytowany 3x, ostatnio: LukeJL
KE
Z tym YAML-em to trochę przesada :) jeśli mówisz o Ansible, które po prostu interpretuje tego YAML-a i odpala jakieś komendy, to w rezultacie takim uniwersalnym językiem jest Python. Może tu jest trop.
WO
  • Rejestracja:prawie 9 lat
  • Ostatnio:ponad rok
  • Lokalizacja:Kraków
  • Postów:135
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.


/We learn not for school but for our life/ Pozdrawiam
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:około 12 godzin
  • Postów:2069
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 ?


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
KamilAdam
A to nie było o standardach w Javie? Było 10 standardów i miał powstać standard łączoący wszystkie standardy. I teraz jest 11 standardów :P
KE
Google "xkcd standards"
Grzyboo
Ciekawe w jakim jezyku będzie pisać AI. Już wystarczająco długo programuję i wiem jak złośliwi są programiści, żeby z całą stanowczością stwierdzić, że będzie to javascript ( ͡° ʖ̯ ͡°)
Marius.Maximus
a ja nadal nie rozumiem popularności js
loza_prowizoryczna
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 15 godzin
  • Postów:1604
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.


Przetrzyma wszystko
AN
  • Rejestracja:prawie 19 lat
  • Ostatnio:około 5 godzin
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.

SL
  • Rejestracja:około 7 lat
  • Ostatnio:około 8 godzin
  • Postów:872
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/

loza_prowizoryczna
  • Rejestracja:ponad 2 lata
  • Ostatnio:około 15 godzin
  • Postów:1604
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.


Przetrzyma wszystko
KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:około 20 godzin
  • Postów:2964
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.

edytowany 1x, ostatnio: Krolik
bakunet
  • Rejestracja:prawie 8 lat
  • Ostatnio:20 minut
  • Lokalizacja:Polska
  • Postów:1596
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 :)

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)