Transkompilierte Sprachen: Code-zu-Code-Konvertierungsprojekte


Quelle: Ward Cunningham

Transpilation ist die Konvertierung von Code von einer Sprache in eine andere. Mit einem speziellen Transpiler (Transcompiler) kann eine Universal-Programmiersprache in jede andere Universal-Programmiersprache übertragen werden.

Wenn Sie in eine andere Sprache wechseln müssen, können Entwickler mithilfe von Transpilern den größten Teil des vorhandenen Codes speichern, ohne den gesamten Code manuell neu schreiben zu müssen. Zum Beispiel beim Konvertieren von Programmen von Python 2 nach Python 3 oder beim Verschieben von Software von der alten auf die neue API.

Die Begriffe Transpiler und Transcompiler werden häufig synonym verwendet, es wird jedoch weiterhin angenommen, dass es Unterschiede gibt. Um beispielsweise C ++ - Code in C zu konvertieren, benötigen Sie einen Transpiler, und um Python-Ruby zu konvertieren, benötigen Sie einen Transcompiler. Babel für JavaScript ist ein Transpiler und TypeScript ist eine übersetzte Sprache.

Manchmal ist nach der Konvertierung durch den Transporter eine manuelle Konfiguration erforderlich, damit der Code ordnungsgemäß ausgeführt werden kann, während der Code in den übersetzten Sprachen unverändert funktionieren muss. Heute werden wir über diese und andere Projekte sprechen, aber vor allem über beliebte Trans-Projekte, die Entwickler in ihrer täglichen Arbeit verwenden können.

Front-End-Transpilation


Die Konvertierung ist ein wichtiger Bestandteil der Front-End-Entwicklung: Da neue Funktionen in Browsern nur langsam angezeigt werden, wurden experimentelle Sprachen entwickelt, die in browserkompatible Sprachen übersetzt werden.

Browser-Entwickler, die in jedem Projekt ihre eigene JavaScript-Engine verwenden, sind auch für die boomenden Trans-Sprachen für JavaScript verantwortlich. Infolgedessen weisen Browser eine unterschiedliche Leistung auf, implementieren ihre eigenen JavaScript-Funktionen und erfüllen nahezu alle Spezifikationen bei unterschiedlichen Geschwindigkeiten.



Sass , Less und Stylus erleichtern das Erstellen von CSS-Code. Sass hat also eine flexible Syntax, Logik (jeweils @if) und Mathematik (Sie können Zahlen, Linien und Farben hinzufügen), wodurch der gesamte Code-Reichtum in ein reguläres CSS-Ruby-Programm umgewandelt wird.

Less (Leaner Style Sheets) sieht genauso aus wie CSS, verfügt jedoch über praktische Ergänzungen: Variablen, Mixins, arithmetische Operationen (wie Sass) usw.

Stylus ist in Node.js geschrieben und unterscheidet sich von Sass und Less durch eine klarere Syntax. Tatsächlich sind sich diese drei Sprachen jedoch sehr ähnlich, sodass Sie sich nicht irren, wenn Sie eine von ihnen auswählen.



Sagen Sie "Hallo, Welt!" In CoffeeScript - was einfacher sein könnte:

alert "Hello, World!" 

CoffeeScript ist seit langem das beliebteste JavaScript-Projekt. Dies ist nicht überraschend: Durch die Kombination von Eingabehilfen (Dokumentation passt auf eine Seite), Funktionsmerkmalen (Klammern, Einrückungen usw.) und reiner Ruby-inspirierter Syntax bietet diese Sprache Entwicklern viele Freiheitsgrade und ermöglicht es, JS ausdrucksvoller zu gestalten.



Master TypeScript:

 let message:string = "Hello World" console.log(message) 

TypeScript ist ein Konkurrenzprojekt für JavaScript, eine Skriptsprache mit optionaler statischer Typisierung. Ermöglicht es Ihnen, die Eigenschaften und Methoden von Objekten und Klassen im Gegensatz zu JS vollständiger zu beschreiben, sodass nicht mehr alle in einer Methode oder Funktion enthaltenen Argumente überprüft werden müssen.

Es gibt eine Meinung, dass JavaScript eine Sprache mit grundlegenden Fehlern ist. Ansonsten ist es schwierig, die Popularität von Trans-Sprachen zu erklären, die speziell dafür arbeiten, ihre Mängel zu beheben. Zusätzlich zu den oben genannten Projekten gibt es eine flexible Web-Programmiersprache Dart , einen JavaScript-Compiler im JavaScript Closure Compiler und viele andere Lösungen, die Sie auf der Seite " Liste der Sprachen, die in JS kompiliert werden " finden.

In C konvertieren




2006 erschien das Vala- Projekt, das aus zwei Sprachen besteht: Vala und Genie, die den gängigsten C-Code übersetzen, der wiederum in eine ausführbare Datei oder Bibliothek kompiliert wird.

Die Vala-Syntax ist der von C # sehr ähnlich, wurde jedoch für eine bessere Kompatibilität mit GObject-Systemen angepasst, während Genie viel mit Python gemeinsam hat. Die erste Sprache ist jetzt häufiger als Genie, schauen wir sie uns also genauer an.

Warum brauchten Sie so ein Projekt? Viele Entwickler wollten Anwendungen und Bibliotheken für GNOME in Hochsprachen schreiben, konnten oder wollten aber aus verschiedenen Gründen nicht C # oder Java verwenden. Mit Vala können Sie schnell komplexen objektorientierten Code erstellen, der Standard-C-API und ABI mit geringem Speicherbedarf unterstützt.

C # - und Java-Bibliotheken können nicht wie native GObject-Bibliotheken aus C und anderen Sprachen verwendet werden und können nicht als Teil der GNOME-Plattform betrachtet werden. Valac, der Vala-Transcompiler, erstellt C-Dateien aus Vala-Quelldateien, als ob Sie Ihre Bibliothek oder Anwendung direkt in C geschrieben hätten. Die Verwendung der Vala-Bibliothek aus C-Anwendung unterscheidet sich nicht von der Verwendung einer anderen GObject-basierten Bibliothek.

Wir lesen und schreiben die Datei an Vala:

 voidmain () { try { string filename = "data.txt"; // Writing string content = "hello, world"; FileUtils.set_contents (filename, content); // Reading string read; FileUtils.get_contents (filename, out read); stdout.printf ("The content of file '%s' is:\n%s\n", filename, read); } catch (FileErrore) { stderr.printf ("%s\n", e.message); } } 

Sie können sich mit anderen Codebeispielen auf der Site vertraut machen.

Von Flash zu Multi-Plattform




Haxe wurde zur gleichen Zeit wie Vala erstellt, ist jedoch für die Umsetzung in Flash, JavaScript und Neko vorgesehen. Mit solchen Fähigkeiten war die Sprache vom Aussterben bedroht, überlebte jedoch nicht nur, sondern gewann auch an Popularität.

Das Erfolgsgeheimnis ist Multi-Plattform. Im Laufe der Zeit hat sich Haxe zu einer Reihe leistungsstarker Tools entwickelt, die das Übersetzen in verschiedene Sprachen und Plattformen unterstützen, darunter JavaScript, C ++, C #, Java, JVM, Python, Lua, PHP und Flash.

Haxe ist eine moderne, stark typisierte Programmiersprache auf hohem Niveau. Gleichzeitig ist es recht einfach und praktisch, so dass die Kompilierung an verschiedene Zielplattformen angepasst werden kann. Die Syntax entspricht im Wesentlichen dem ECMAScript-Standard, wird jedoch bei Bedarf geändert.

"Hello World" auf Haxe:

 class Main { static public function main():Void { trace("Hello World"); } } 

In JavaScript sehen diese Codezeilen folgendermaßen aus:

 haxe -main HelloWorld -js HelloWorld.js 

Und in Java so:

 haxe -main HelloWorld -java path/to/java/out 

Der Großteil des Haxe-Codes ist in Klassen und Funktionen unterteilt, sodass es sich um eine OOP-Sprache handelt, die Java, ActionScript 3 und C # ähnelt. Haxe wurde jedoch mit Schwerpunkt auf Pragmatismus und einfache Syntax entwickelt.

Und über Transpiler


  • C2Rust und Corrode sind zwei nicht sündlose Möglichkeiten, um von C nach Rust zu migrieren.
  • VOC ist ein Transporter von Python 3.4+ nach Java, mit dem Sie Android-Anwendungen basierend auf Python-Code erstellen können.
  • Lombok ist eine interessante Lösung für diejenigen, die Java nicht mögen oder nur Java mögen. Dies ist ein Compiler-Plugin, das Java neue „Schlüsselwörter“ hinzufügt und Anmerkungen in Java-Code umwandelt, wodurch der Entwicklungsaufwand verringert und zusätzliche Funktionen bereitgestellt werden. Beispielsweise ermöglicht es die Verwendung des Schlüsselworts val (eine Entsprechung von var aus C #) in regulärem Java-Code.
  • Mit Bridge.NET können Sie die C # -Leistung in JavaScript sowie leistungsstarke VisualStudio IDE- und Standard-.NET-Tools (wie msbuild, Refactoring, Komponententests, statische Analyse, Codevisualisierung, FxCop) verwenden.
  • Grumpy übersetzt Python-Code in eine Go-Darstellung und ermöglicht das nahtlose Ausführen von Python-Programmen in Go-Laufzeitumgebungen. Das Projekt beseitigt das Problem der globalen Sperrung des Interpreters, wodurch die parallele Ausführung mehrerer Codethreads nicht möglich ist.

Natürlich gibt es viele andere Transpiler. In den Kommentaren können Sie traditionell über Ihre Lieblingswerkzeuge sprechen.

Fazit


Es gibt eine Vielzahl weiterer Sprachen, sodass Sie für Ihr Projekt immer die am besten geeignete auswählen können. Situationen, in denen eine Code-zu-Code-Konvertierung erforderlich ist, sind jedoch keine Seltenheit, da C ++ zu C, PHP zu C ++ und "alles in JavaScript" -Transpilierungen ziemlich häufig vorkommen.

Ein „Übersetzer“ von einer Sprache in eine andere ist eine gute Idee, aber nur solange das Ergebnis klar vorhergesagt und ohne Risiko verwendet werden kann. Daher war der Übergang von COBOL zu Java schwierig, da in Java vor JDK 1.4 keine Dateien mit Speicherzuordnung vorhanden waren . C2Rust und Corrode, die im Artikel über die Ausgabe erwähnt werden, geben einen nicht-idiomatischen Code an, der als unsicher markiert und mit unformatierten Zeigern gefüllt ist.

Source: https://habr.com/ru/post/de480724/


All Articles