ينتج رمز 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 ، إلخ.
يمكن العثور على معلومات مفصلة حول الميزات المدعومة والمخطط لها في التغطية.
المساهمات مرحب بها! انظر SRC/README.MD
يمكنك تجربتها على الإنترنت:
كان الدافع الرئيسي وراء هذا المشروع هو حل المشكلة التي لا يمكن برمجة إنترنت الأشياء والأجهزة القابلة للارتداء حاليًا بفعالية مع JavaScript.
الشيء ، بالنسبة لأجهزة إنترنت الأشياء المستدامة التي يمكن أن تعمل لفترة طويلة على بطارية واحدة ، لن تفعل أشياء مثل 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 >