Produit du code C89 lisible à partir du code JS / TS.
Par exemple, ce javascript:
console . log ( "Hello world!" ) ;Transpliles au code C suivant:
#include <stdio.h>
int main () {
printf ( "Hello world!n" );
return 0 ;
}Aucun code excessif qui n'est pas réellement nécessaire n'est jamais généré.
La sortie est aussi lisible que possible et mappe principalement bien au code d'origine.
Un autre exemple:
var obj = { key : "hello" } ;
obj [ "newKey" ] = "test" ;
console . log ( obj ) ;Transpliles au code C suivant:
#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 ;
}Travail en cours: il fonctionne, mais seulement environ 70% des spécifications ES3 sont actuellement prises en charge: Énoncés et expressions - 95%, objets intégrés - 17%.
Les fonctionnalités notables non prises en charge incluent, par exemple: float et grands nombres (tous les nombres sont actuellement int16_t ), eval , Date , Math , etc.
Des informations détaillées sur les fonctionnalités prises en charge et planifiées peuvent être trouvées dans la couverture.md.
Les contributions sont les bienvenues! Voir src / readme.md
Vous pouvez l'essayer vous-même en ligne:
La principale motivation derrière ce projet était de résoudre le problème que l'IoT et les appareils portables ne peuvent pas être actuellement programmés efficacement avec JavaScript.
Le fait est que pour les appareils IoT durables qui peuvent fonctionner pendant une longue période sur une batterie unique, des choses comme Raspberry Pi ne feront pas l'affaire. Vous devrez utiliser des microcontrôleurs à faible puissance, qui ont généralement très peu de mémoire disponible.
La RAM varie littéralement de 512 octets à 120 Ko et ROM / Flash de 1 Ko à 4 Mo. Dans de telles conditions, même les interprètes JS optimisés comme JerryScript, Espruino ou V7 sont parfois trop de frais généraux et conduisent généralement à l'augmentation de la décharge de la batterie et / ou ne laissent pas beaucoup de ressources système à votre programme.
Bien sûr, le transpiler ne peut pas cartographier 100% de la langue JavaScript et certaines choses doivent être laissées de côté, notamment eval . Pourtant, la conclusion actuelle est qu'il est possible de transpiler la majeure partie de la langue.
Cibles de transpilation prévues:
Ligne de commande:
npm install -g ts2c
Syntaxe:
ts2c < files to transpile >Node.js:
npm install ts2c
const ts2c = require ( "ts2c" ) ;
const cCode = ts2c . transpile ( "console.log('Hello world!')" ) ;
console . log ( cCode ) ;Dans le navigateur:
< 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 >