Производит читаемый код C89 из кода JS/TS.
Например, этот JavaScript:
console . log ( "Hello world!" ) ;Транспорти к следующему коду C:
#include <stdio.h>
int main () {
printf ( "Hello world!n" );
return 0 ;
}Никакой чрезмерный код, который на самом деле не требуется, никогда не генерируется.
Вывод максимально читается и в основном хорошо отображает исходный код.
Другой пример:
var obj = { key : "hello" } ;
obj [ "newKey" ] = "test" ;
console . log ( obj ) ;Транспорти к следующему коду 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 ;
}Работа в процессе: она работает, но в настоящее время поддерживается только около 70%спецификации ES3 : операторы и выражения - 95%, встроенные объекты - 17%.
Независимые функции не поддерживаются, например: Float и большие числа (все числа в настоящее время int16_t ), eval , Date , Math и т. Д.
Подробную информацию о поддерживаемых и запланированных функциях можно найти в покрытии. MD.
Взносы приветствуются! Смотрите src/readme.md
Вы можете попробовать это сами в Интернете:
Основной мотивацией этого проекта было решение проблемы, которую IoT и носимые устройства не могут быть эффективно запрограммированы с помощью JavaScript.
Дело в том, что для устойчивых устройств IoT, которые могут долго работать на одной батареи, такие вещи, как Raspberry Pi. Вам придется использовать микроконтроллеры с низкой мощью, которые обычно имеют очень мало доступной памяти.
RAM диапазон буквально от 512 байтов до 120 КБ, а ROM/Flash - от 1 КБ до 4 МБ. В таких условиях даже оптимизированные переводчики JS, такие как Jerryscript, Espruino или V7, иногда являются слишком большими накладными расходами и обычно приводят к увеличению дренажа батареи и/или не оставляют много системных ресурсов для вашей программы.
Конечно, Transpiler не может составить на карту 100% языка JavaScript, и некоторые вещи должны быть оставлены, в частности, eval . Тем не менее, текущий вывод заключается в том, что можно перенести большую часть языка.
Планируемые цели транспортировки:
Командная строка:
npm install -g ts2c
Синтаксис:
ts2c < files to transpile >Node.js:
npm install ts2c
const ts2c = require ( "ts2c" ) ;
const cCode = ts2c . transpile ( "console.log('Hello world!')" ) ;
console . log ( cCode ) ;В браузере:
< 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 >