Jak mogę powiedzieć, że język programowania kompiluje się do innych języków?

22

Jak mogę powiedzieć po angielsku, że język programowania można skompilować na inne języki programowania?

Przykładem może być Haxe . Na stronie internetowej język jest opisany jako „Multiplatform”:

Multiplatform: Haxe można kompilować na wszystkie popularne platformy programistyczne za pomocą szybkiego kompilatora - JavaScript, Flash, NekoVM, PHP, C ++, C # i Java (wkrótce)

ale wieloplatformowe mogą być źle rozumiane jako platformy sprzętowe lub programowe (Win, Mac, Linux).

Jakie jest zatem najbardziej odpowiednie słowo opisujące tę umiejętność?

danilo2
źródło
3
Chciałbym usunąć „kompilacje” i po prostu powiedzieć, że ten język programowania można przekształcić w inny, używając jakiegoś interpretera.
Neil
6
Możesz użyć tego samego słowa, co w przypadku zwykłych języków: tłumacz, tłumacz. Jest jasne i słyszałem, że słowo to jest używane w tym znaczeniu.
superM
4
@teresko Jak to? Jedynym sposobem, w jaki mogłem zobaczyć, jak się kłócisz, jest użycie zbyt restrykcyjnej i bezużytecznej definicji kompilacji (która ogranicza dane wyjściowe do kodu maszynowego).
18
@ Neil: przekształcenie programu napisanego w jednym języku na inny nie jest interpretacją. W rzeczywistości, jest to definicja z kompilacji .
Jörg W Mittag
2
@Neil, kompilacja z definicji jest transformacją z jednego języka na inny. A „transformacja” brzmi równie niejasno i tajemniczo jak „kompilacja”, o ile czytelnik nie jest dobrze zorientowany w przepisywaniu terminów i tym podobne. Sugerowałbym więc użycie słowa „targetowanie”, np. „Haxe celuje w JavaScript, Flash, cokolwiek i tak dalej”.
SK-logic

Odpowiedzi:

41

Zwykłym terminem jest „transkompilacja” - nie jest to termin powszechny, ale poprawny technicznie. Nie dotyczy to także modnych nowych języków skryptowych (CoffeeScript -> JavaScript); pierwsze kompilatory C ++ były w rzeczywistości transkompilatorami do C.

Kilian Foth
źródło
2
Również „transpiles” jak w „Transpiler transpiluje CoffeeScript do Javascript”
4
Nigdy wcześniej nie słyszałem tego terminu, będąc w terenie od dziesięcioleci. Umysł wskazujący na jego pochodzenie (link do pierwszego artykułu, w którym się pojawił, byłby najlepszy)?
SK-logic
Z Wikipedii : „Kompilator typu źródło-źródło [alias.„ Transkompilator ”,„ transpiler ”] tłumaczy języki programowania, które działają w przybliżeniu na tym samym poziomie abstrakcji, podczas gdy tradycyjny kompilator tłumaczy z języka programowania wyższego poziomu na niższy język programowania na poziomie. ”
l0b0 17.04.13
4
@ l0b0, wikipedia nie komentuje pochodzenia tego terminu i zdecydowanie nie powinno być oryginalnym źródłem.
SK-logic
3
... wyszukiwanie w Google „transkompilacji” nie daje żadnego pokrewnego wyniku ...
Bakuriu,
27

Przepraszam panowie, ale słowo to po prostu „skompilowane” . Oznacza to przekształcenie jednego rodzaju kodu w inny typ kodu. Nie ma żadnej różnicy, czy ten kod to angielski, C ++, kod maszynowy x86, kod maszynowy ARM, Java, kod bajtowy lub z powrotem do angielskiego. Zasadniczo używamy go do oznaczania przejścia z języka programowania do kodu maszynowego, ale jest to aspekt, który słowo zyskało z czasem. I hej, jeśli wystarczająca liczba osób zacznie używać słowa niepoprawnie, to rzeczywiście zyska to nowe znaczenie. Ale jeśli chcesz zamienić słowo Haxe w C ++, to słowo to „kompiluje” .

Multiplatform: Haxe może być kompilowany do wszystkich popularnych języków programowania za pomocą szybkiego kompilatora - JavaScript, Flash, NekoVM, PHP, C ++, C # i Java (wkrótce)

(Poza tym ignoruję Merriam-Webster, ponieważ są głupi, ponieważ się ze mną nie zgadzają ... hmmmm)

Philip
źródło
10

Być może jest to pytanie do https://english.stackexchange.com/ jeszcze powiedziałbym, że proces kompilacji obejmuje kompilację do innego języka wysokiego poziomu i nie ogranicza się tylko do kompilatorów kompilujących w kierunku natywnego kodu maszynowego.

Słowo „kompilacja” nie jest specyficzne dla kompilatorów komputerowych i jest dość ogólne. „Kompilowanie tabeli” lub „kompilacja listy nazw” przychodzi mi na myśl, dlatego jest wystarczająco szeroki do wielu celów (procesory tekstu, takie jak kompilacja lateksowa itp.). Aby być bardziej szczegółowym na temat celu kompilacji, użyłbym kompilatora to-source

Teraz dla konkretnego przykładu uważam, że platforma jest odpowiednim słowem do użycia. Ponieważ ludzkie języki są z natury ambiwalentne, musisz użyć redundancji (przykłady, parafrazowanie innymi słowami, wyjaśnianie), aby uzyskać punkt wyjścia w razie wątpliwości.

Przeczytałbym również instrukcję „Haxe” w sposób, który obejmuje standardowe biblioteki i podobne rzeczy. Tj. W takim przypadku platforma byłaby nadzbiorem „języka” i można by ją oddzielić, nazywając ją „platformą programistyczną” itp.

wirrbel
źródło
4
Myślę, że masz na myśli english.stackexchange.com?
Suman
3

Możesz powiedzieć, że kompilator ma języki X, Y i Z jako cele tłumaczenia lub zaprojektuj język z myślą o tych celach.

nadchodząca burza
źródło
2

Powiedziałbym, że kompilator z definicji tłumaczy na inny język programowania (przynajmniej taka jest definicja, którą znam - program, który przekształca jeden język na inny). Na przykład większość kompilatorów C produkuje zestaw jako dane wyjściowe. Kompilatory asemblacyjne biorą to wyjście i przekształcają go w kod binarny, który jest także językiem (oczywiście - prawdopodobnie nikt nie pisze w nim w ciągu ostatnich 40 lat lub dłużej, ale technicznie jest to język) - który można pobrać i ponownie skompilować, by powiedzieć mikro ops przez procesory (lub istnieją pewne operacje wykonywane przez linker na plikach obiektowych). Podobniejavapkompiluje się w kod bajtowy. Zwykle na końcu takiego łańcucha znajduje się interpreter, który wykonuje końcowy kod (czy to CPU, GPU, czy wykonywany program). Nie ma czegoś takiego jak kod maszynowy, ponieważ współczesna x86 rekompiluje programy do operacji wewnętrznych (mikrooperacje) i jestem w pełni zdolny do traktowania kodu maszynowego ARM jako języka interpretowanego na x86 lub odwrotnie (w niektórych przypadkach nawet rekompilacja z jednej formy do drugiej).

Haxe jest kompilatorem typu źródło-źródło, ponieważ nie przekształca języka wyższego poziomu w język niższego poziomu, jak w poprzednich przykładach. Wydaje się, że nie odnosi się to bezpośrednio do problemu wieloznaczności na wielu platformach, ale niestety nie sądzę, aby istniał praktyczny sposób rozróżnienia między tymi dwiema rzeczami - interfejsy API są rodzajem języków, które można ogólnie interpretować, rekompilować itp.

Maciej Piechotka
źródło
1

Po pierwsze: nie wiem, czy jest już odpowiednie słowo dla tej funkcji.

Ale może to nazwać wielojęzycznym? Czy językagnostyka? Ponieważ chodzi bardziej o język programowania, to wzmianka o „języku” w nazwie może uczynić go bardziej oczywistym niż wieloplatformowy.

Oczywiście język jest również dwuznaczny, ponieważ można zrozumieć, że kod źródłowy może być napisany w dowolnym języku świata rzeczywistego (na przykład, ponieważ zmienne można pisać w Unicode).

Z drugiej strony każdy doświadczony programista prawdopodobnie rozpozna taki konstrukt jako różny od lokalizacji lub internacjonalizacji, więc może łatwiej go „zdobyć”.

Tylko moje 2 centy.

Enduriel
źródło
nie sądzę, żeby to było poprawne; a jeśli zobaczysz fakt, że witryna lubi tylko poprawne pod względem faktycznym odpowiedzi. ale witajcie w społeczności i mam nadzieję, że odpowiecie jeszcze trochę, gdzie jesteście pewni odpowiedzi :)
tgkprog 16.04.2013