Bei der Suche nach dem Unterschied bin ich auf folgende Definitionen gestoßen:
Kompilieren ist der allgemeine Begriff für das Aufnehmen von in einer Sprache geschriebenem Quellcode und dessen Umwandlung in eine andere.
Transpiling ist ein spezifischer Begriff für die Verwendung von in einer Sprache geschriebenem Quellcode und die Umwandlung in eine andere Sprache mit einem ähnlichen Abstraktionsgrad.
Ich verstehe, was Abstraktion ist.
Aber was bedeutet "ähnliche Abstraktionsebene" in der obigen Definition? Und wie finden wir die Abstraktionsebene in einer Sprache?
compiler-construction
abstraction
transpiler
Nishi Mahto
quelle
quelle
Antworten:
Die Definition, die Sie oben zitiert haben, ist zu allgemein, als dass ein Anfänger sie vollständig verstehen könnte. Lassen Sie mich sie daher einfach auf etwas vereinfachen, das wir praktisch sehen.
Compiler: ist ein Überbegriff für ein Programm, das Quellcode in einer Sprache verwendet und eine (oder mehrere) Ausgabedateien in einer anderen Sprache erstellt. In der Praxis verwenden wir diesen Begriff meistens, um einen Compiler wie gcc zu beschreiben, der C-Code als Eingabe verwendet und eine binäre ausführbare Datei (Maschinencode) als Ausgabe erzeugt.
Transpiler werden auch als Source-to-Source-Compiler bezeichnet. Im Wesentlichen handelt es sich also um eine Teilmenge von Compilern, die eine Quellcodedatei aufnehmen und in eine andere Quellcodedatei in einer anderen Sprache oder einer anderen Version derselben Sprache konvertieren . Die Ausgabe ist für einen Menschen allgemein verständlich. Diese Ausgabe muss noch einen Compiler oder Interpreter durchlaufen, um auf dem Computer ausgeführt werden zu können.
Einige Beispiele für Transpiler:
Was meinen sie nun mit "ähnlicher Abstraktionsebene": Wie ich bereits sagte, wird eine Quelldatei kompiliert / transpiliert, man kann argumentieren, dass Assemblersprache auch eine Quelldatei ist und gcc somit auch ein Transpiler. Dieses Argument ist es also, was diese ähnliche Abstraktionsebene ungültig macht.
Der Begriff der Kategorisierung von Sprachen in niedrigere, mittlere und höhere Ebenen basiert auf der Abstraktionsebene, die sie von der tatsächlichen Arbeitsweise der Maschine / Architektur bieten.
Untergeordnete Sprachen wie Assembly sind der Prozessorarchitektur sehr nahe, dh sie haben unterschiedliche Anweisungen für verschiedene Prozessoren. Während C / C ++ / Java / JavaScript, abstrahieren Sie all dies weg und sorgen Sie für mehr Abstraktion.
Ein Transpiler kompiliert also zu einer Sprache, die näher an der Sprache liegt, mit der Sie in Bezug auf diese Abstraktion begonnen haben (oder näher an der Ebene dieser Sprache in der Sprachleiter der unteren, mittleren und höheren Ebene).
Hoffe das hilft!
quelle
Hier ist eine Art beschreibende Antwort
Wenn Sie sich Abstraktionsebenen als dieses Beispiel vorstellen:
Ein Compiler geht auf eine niedrigere Ebene (niedrigere Nummer). Ein Transpiler wechselt von einer Sprache (oder Version einer Sprache) zu einer anderen unter derselben Nummer.
quelle
javac
ein Compiler oder nicht.Ich stimme größtenteils der Antwort von tapananand zu, aber ...
Definition
Worte werden "gemacht", also dienen sie einem Zweck. Und das ändert sich auch mit der Zeit.
Wir tendieren jetzt dazu, Transpiler zu verwenden, um einen Compiler anzugeben, der Code in einen anderen Code übersetzt, der dem Quellcode "ähnlicher" ist, als dies ein Compiler tun könnte. Und wird verwendet, um beide meistens zu unterscheiden, wenn beide im selben Kontext erwähnt werden (was wiederum meistens impliziert, dass eine transpile Sprache mindestens noch einmal kompiliert werden muss).
Beispiele
Also ist alles sehr subjektiv. Zum Zeitpunkt dieses Schreibens:
fazit
Daher wird Transpile derzeit nur noch sehr selten verwendet, um nur zwei Compiler voneinander zu unterscheiden.
Es wird wahrscheinlich als Konzept verschwinden, da die Kompilierung viel komplizierter ist (gleiche / höhere / niedrigere Sprache, Version usw.) und das Wort nicht mehr nützlich zu sein scheint ("Transpiler" sind jetzt allgegenwärtig).
quelle
Beispiel: TypeScript (eine Microsoft-Obermenge von JavaScript mit typsicherer Prüfung) wird in JavaScript-Code transpiliert, der auf verschiedenen Browsertypen ausgeführt werden kann.
https://en.wikipedia.org/wiki/Microsoft_TypeScript "Microsoft TypeScript ist eine Open-Source-Programmiersprache, die von Microsoft entwickelt und verwaltet wird. Es handelt sich um eine strikte syntaktische Obermenge von JavaScript und fügt der Sprache eine optionale statische Typisierung hinzu.
TypeScript wurde für die Entwicklung großer Anwendungen entwickelt und kompiliert zu JavaScript. [5] Da TypeScript eine Obermenge von JavaScript ist, sind vorhandene JavaScript-Programme auch gültige TypeScript-Programme. TypeScript kann verwendet werden, um JavaScript-Anwendungen für die clientseitige und serverseitige Ausführung (Node.js) zu entwickeln. "
quelle