Produce código C89 legible del código JS/TS.
Por ejemplo, este JavaScript:
console . log ( "Hello world!" ) ;Transpiles al siguiente código C:
#include <stdio.h>
int main () {
printf ( "Hello world!n" );
return 0 ;
}Nunca se genera un código excesivo que realmente no se necesite.
La salida es lo más legible posible y principalmente se mapea bien al código original.
Otro ejemplo:
var obj = { key : "hello" } ;
obj [ "newKey" ] = "test" ;
console . log ( obj ) ;Transpiles al siguiente código C:
#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 ;
}Trabajo en progreso: Funciona, pero actualmente se admite alrededor del 70%de la especificación ES3 : declaraciones y expresiones - 95%, objetos incorporados - 17%.
Las características notables no compatibles incluyen, por ejemplo: flotante y grandes números (todos los números son int16_t actualmente), eval , fecha, Date , Math , etc.
La información detallada sobre las características compatibles y planificadas se puede encontrar en la cobertura.
¡Las contribuciones son bienvenidas! Ver SRC/ReadMe.MD
Puedes probarlo tú mismo en línea:
La principal motivación detrás de este proyecto era resolver el problema de que IoT y Wearables no pueden estar actualmente programados de manera eficiente con JavaScript.
La cuestión es que, para dispositivos IoT sostenibles que pueden funcionar durante mucho tiempo con batería individual, cosas como Raspberry Pi no lo harán. Tendrá que usar microcontroladores de baja potencia, que generalmente tienen muy poca memoria disponible.
RAM varía literalmente de 512 bytes a 120 kb, y ROM/flash de 1KB a 4MB. En tales condiciones, incluso los intérpretes JS optimizados como Jerryscript, Espruino o V7 a veces son demasiado generales y generalmente conducen al aumento del drenaje de la batería y/o no dejan muchos recursos del sistema en su programa.
Por supuesto, el transpilador no puede asignar el 100% del lenguaje JavaScript y algunas cosas deben dejarse fuera, especialmente eval . Aún así, la conclusión actual es que es posible traspiliar la mayor parte del lenguaje.
Objetivos de transpilación planificados:
Línea de comando:
npm install -g ts2c
Sintaxis:
ts2c < files to transpile >Node.js:
npm install ts2c
const ts2c = require ( "ts2c" ) ;
const cCode = ts2c . transpile ( "console.log('Hello world!')" ) ;
console . log ( cCode ) ;En el navegador:
< 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 >