Produz código C89 legível a partir do código JS/TS.
Por exemplo, este JavaScript:
console . log ( "Hello world!" ) ;Transpila para o seguinte código C:
#include <stdio.h>
int main () {
printf ( "Hello world!n" );
return 0 ;
}Nenhum código excessivo que não é realmente necessário é gerado.
A saída é o mais legível possível e, principalmente, mapeia bem o código original.
Outro exemplo:
var obj = { key : "hello" } ;
obj [ "newKey" ] = "test" ;
console . log ( obj ) ;Transpila para o seguinte 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 ;
}Trabalho em andamento: funciona, mas apenas cerca de 70%da especificação ES3 é suportada: declarações e expressões - 95%, objetos internos - 17%.
Os recursos notáveis não suportados incluem, por exemplo: flutuação e grandes números (todos os números são int16_t atualmente), eval , Date , Math , etc.
Informações detalhadas sobre os recursos suportados e planejados podem ser encontrados na cobertura.md.
As contribuições são bem -vindas! Veja SRC/README.MD
Você pode experimentar você mesmo online:
A principal motivação por trás desse projeto foi resolver o problema de que a IoT e os wearables não podem ser atualmente programados com JavaScript.
O problema é que, para dispositivos IoT sustentáveis que podem funcionar por um longo tempo em bateria única, coisas como o Raspberry Pi não farão. Você terá que usar microcontroladores de baixa potência, que geralmente têm muito pouca memória disponível.
A RAM varia literalmente de 512 bytes a 120kb e ROM/flash de 1kb a 4 MB. Em tais condições, mesmo intérpretes JS otimizados como JerryScript, Espruino ou V7 às vezes são uma sobrecarga demais e geralmente levam ao aumento do dreno da bateria e/ou não deixam muitos recursos do sistema para o seu programa.
Obviamente, o Transpiler não pode mapear 100% da linguagem JavaScript e algumas coisas precisam ser deixadas de fora, principalmente eval . Ainda assim, a conclusão atual é que é possível transpilar a maior parte do idioma.
Metas de transpilação planejada:
Linha de comando:
npm install -g ts2c
Sintaxe:
ts2c < files to transpile >Node.js:
npm install ts2c
const ts2c = require ( "ts2c" ) ;
const cCode = ts2c . transpile ( "console.log('Hello world!')" ) ;
console . log ( cCode ) ;No 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 >