JS/TS 코드에서 읽을 수있는 C89 코드를 생성합니다.
예를 들어,이 JavaScript :
console . log ( "Hello world!" ) ;다음 C 코드로 변환 :
#include <stdio.h>
int main () {
printf ( "Hello world!n" );
return 0 ;
}실제로 필요하지 않은 과도한 코드는 생성되지 않습니다.
출력은 가능한 한 읽을 수 있으며 대부분 원래 코드에 잘 맵핑됩니다.
Another example:
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 ;
}진행중인 작업 : 효과가 있지만 ES3 사양의 약 70% 만이 현재 지원됩니다. 진술 및 표현식 -95%, 내장 객체 -17%.
주목할만한 지원되는 기능은 예를 들어 다음과 같습니다. 플로트 및 큰 숫자 (모든 숫자는 현재 int16_t ), eval , Date , Math 등입니다.
지원 및 계획된 기능에 대한 자세한 정보는 Coverage.md에서 찾을 수 있습니다.
기부금을 환영합니다! src/readme.md를 참조하십시오
온라인에서 직접 시도해 볼 수 있습니다.
이 프로젝트의 주요 동기는 IoT와 웨어러블을 현재 JavaScript로 효율적으로 프로그래밍 할 수 없다는 문제를 해결하는 것이 었습니다.
문제는 단일 배터리에서 오랫동안 작동 할 수있는 지속 가능한 IoT 장치의 경우 Raspberry Pi와 같은 것들이하지 않습니다. 일반적으로 메모리가 거의없는 저전력 마이크로 컨트롤러를 사용해야합니다.
RAM 범위는 문자 그대로 512 바이트 ~ 120KB, ROM/Flash 범위 는 1KB에서 4MB입니다. 이러한 조건에서 JerryScript, Espruino 또는 V7과 같은 최적화 된 JS 통역사조차도 때때로 너무 많은 오버 헤드이며 일반적으로 배터리 배수가 증가하거나 프로그램에 많은 시스템 리소스를 남기지 않습니다.
물론 Transpiler는 JavaScript 언어의 100%를 매핑 할 수 없으며 일부는 남겨 두어야합니다 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 >