Erstellt lesbarer C89 -Code aus JS/TS -Code.
Zum Beispiel dieses JavaScript:
console . log ( "Hello world!" ) ;transpiliert in den folgenden C -Code:
#include <stdio.h>
int main () {
printf ( "Hello world!n" );
return 0 ;
}Es wird kein übermäßiger Code generiert, der nicht tatsächlich benötigt wird.
Die Ausgabe ist so lesbar wie möglich und kartiert meistens gut zum ursprünglichen Code.
Ein weiteres Beispiel:
var obj = { key : "hello" } ;
obj [ "newKey" ] = "test" ;
console . log ( obj ) ;transpiliert in den folgenden C -Code:
#include <stdlib.h>
#include <assert.h>
#include <stdio.h>
struct obj_t {
const char * key ;
const char * newKey ;
};
static struct obj_t * obj ;
int main ( void ) {
obj = malloc ( sizeof ( * obj ));
assert ( obj != NULL );
obj -> key = "hello" ;
obj -> newKey = "test" ;
printf ( "{ " );
printf ( "key: "%s"" , obj -> key );
printf ( ", " );
printf ( "newKey: "%s"" , obj -> newKey );
printf ( " }n" );
free ( obj );
return 0 ;
}Arbeiten in Arbeit: Es funktioniert, aber nur etwa 70%der ES3 -Spezifikation werden unterstützt: Aussagen und Ausdrücke - 95%, eingebaute Objekte - 17%.
Bemerkenswerte nicht unterstützte Funktionen umfassen, zum Beispiel: Float und große Zahlen (alle Zahlen sind derzeit int16_t ), eval , Date , Math usw.
Detaillierte Informationen zu unterstützten und geplanten Funktionen finden Sie in Deckung.md.
Beiträge sind willkommen! Siehe SRC/Readme.md
Sie können es selbst online ausprobieren:
Die Hauptmotivation für dieses Projekt bestand darin, das Problem zu lösen, dass IoT und Wearables derzeit nicht effizient mit JavaScript programmiert werden können.
Die Sache ist, für nachhaltige IoT -Geräte, die für eine lange Zeit auf einzelnen Batterien funktionieren können, werden Dinge wie Raspberry Pi nicht tun. Sie müssen Mikrocontroller mit geringer Leistung verwenden, die normalerweise nur sehr wenig Speicher zur Verfügung haben.
Ram reicht buchstäblich von 512 Bytes bis 120 KB und ROM/Flash von 1 KB bis 4 MB. Unter solchen Bedingungen sind selbst optimierte JS -Dolmetscher wie Jerryscript, Espruino oder V7 manchmal zu viel Overhead und führen normalerweise zu einem erhöhten Batterie -Abfluss und überlassen nicht viele Systemressourcen für Ihr Programm.
Natürlich kann Transpiler nicht 100% der JavaScript -Sprache zuordnen, und einige Dinge müssen ausgelassen werden, insbesondere eval . Die derzeitige Schlussfolgerung ist jedoch, dass es möglich ist, den größten Teil der Sprache zu transpilieren.
Geplante Transpilationsziele:
Befehlszeile:
npm install -g ts2c
Syntax:
ts2c < files to transpile >Node.js:
npm install ts2c
const ts2c = require ( "ts2c" ) ;
const cCode = ts2c . transpile ( "console.log('Hello world!')" ) ;
console . log ( cCode ) ;Im Browser:
< script src =" https://unpkg.com/typescript " > </ script >
< script src =" ts2c.bundle.js " > </ script >
< script >
var cCode = ts2c . transpile ( "console.log('Hello world!')" ) ;
alert ( cCode ) ;
</ script >