- Notifications
You must be signed in to change notification settings - Fork35
Super charged typed JavaScript dialect for parallel programming which compiles to WebAssembly
License
01alchemist/TurboScript
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Super charged typed JavaScript dialect for parallel programming which compiles to WebAssembly
New spec (WIP) :TurboScript Spec
@ _________ \____ / \ / \ / ____ \ \_ \ / / \ \ \ \ ( \__/ ) ) ________ _____ ___ ____ \ \_\ \______/ / /_ __/ / / / _ \/ _ )/ __ \ \ \ /___ / / / /_/ / , _/ _ / /_/ / \______\_________/____"-_____ /_/ \____/_/|_/____/\____/
TurboScript is an experimental programming language for parallel programming for web which compiles to JavaScript(asm.js) and WebAssembly (targeting post-MVP). The syntax is similar to TypeScript(Hardly trying to fill the gaps) and the compiler is open source and written in TypeScript. TurboScript has zero dependencies.
This is still an experiment and isn't intended for real use yet but we are working towards an MVP release. Please feel free to open issues if it stop working or need a new feature.
npm install -g turboscript
Type | Native type | Description |
---|---|---|
int8 | i32 | An 8-bit signed integer. |
uint8 | i32 | An 8-bit unsigned integer. |
int16 | i32 | A 16-bit signed integer. |
uint16 | i32 | A 16-bit unsigned integer. |
int32 | i32 | A 32-bit signed integer. |
uint32 | i32 | A 32-bit unsigned integer. |
int64 | i64 | A 64-bit signed integer. |
uint64 | i64 | A 64-bit unsigned integer. |
boolean | i32 | A 1-bit unsigned integer. |
float32 | f32 | A 32-bit floating point number. |
float64 | f64 | A 64-bit floating point number. |
void | none | No return type. |
string | * | A utf-8 encoded textual data type. |
Array<T> | * | A generic array data type. |
varmyGlobal:int32=1;letevaluatedVar:int32=myGlobal+1;// let is same as var.
letinteger:int32=1234;letinteger64bit:int64=1234;letfloatingPoint:float32=1.234f;letfloatingPoint64bit:float64=1.234;// default floating point number is 64 bit// You can also omit type since compiler infer type from the literalletinteger=1234;// default integer is 32 bit, use type :int64 for 64 bit integerletfloatingPoint=1.234f;letfloatingPoint64bit=1.234;
// add.tbsexportfunctionadd(a:int32,b:int32):int32{returna+b;}
// vector3D.tbsexportclassVector3D{ x:float32; y:float32; z:float32; constructor(x:float32, y:float32,z:float32){ this.x=x; this.y=y; this.z=z; }}
classFoo<T>{value:T;constructor(value:T){this.value=value;}getValue():T{returnthis.value;}}exportfunctiontestI32(value:int32):int32{letinstance=newFoo<int32>(value);returninstance.getValue();}exportfunctiontestI64(value:int32):int32{letvalue2=valueasint64;letinstance=newFoo<int64>(value2);returninstance.getValue()asint32;}exportfunctiontestF32(value:float32):float32{letinstance=newFoo<float32>(value);returninstance.getValue();}exportfunctiontestF64(value:float64):float64{letinstance=newFoo<float64>(value);returninstance.getValue();}
classVector3D{x:float32;y:float32;z:float32;constructor(x:float32,y:float32,z:float32){this.x=x;this.y=y;this.z=z;}operator+(other:Vector3D):Vector3D{returnnewVector3D(this.x+other.x,this.y+other.y,this.z+other.z);}operator-(other:Vector3D):Vector3D{returnnewVector3D(this.x-other.x,this.y-other.y,this.z-other.z);}}exportfunctiontest():boolean{leta=newVector3D(1.0f,1.0f,1.0f);letb=newVector3D(1.0f,1.0f,1.0f);letc=a+b;returnc.x==2.0f&&c.y==2.0f&&c.z==2.0f;}
// f64-array.tbsvara:Array<float64>=null;exportfunctiontest(num:int32):Array<float64>{a=newArray<float64>(num);leti:int32=0;while(i<num){a[i]=0.0;i=i+1;}returna;}exportfunctiongetArrayByteLength(value:Array<float64>):int32{returnvalue.bytesLength;}exportfunctiongetArrayElementSize(value:Array<float64>):int32{returnvalue.elementSize;}exportfunctiongetArray():Array<float64>{returna;}exportfunctiongetData(index:int32):float64{returna[index];}exportfunctionsetData(index:int32,value:float64):void{a[index]=value;}
tc add.tbs --wasm --out add.wasm
You need an invitation to join Slack. Open a ticket with your email address. I will make it happen.
Parallel JavaScriptWebAssembly EmitterBasic malloc and freeASM.JS EmitterImport external functions with namespaceArray Data Type- Parallel WebAssembly (post-MVP)
Documentations can be found atwiki (under construction 🚧)
Lexical analysis, Parsing, Checking codes are borrowed from Evan Wallace's thinscript
About
Super charged typed JavaScript dialect for parallel programming which compiles to WebAssembly
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.
Contributors7
Uh oh!
There was an error while loading.Please reload this page.