Scheme2Js是一個計劃,JavaScript編譯器。雖然一些努力已經花了被盡可能接近到R5RS,我們主要集中於效率。
通常Scheme2Js產生的Javascript代碼,這是媲美手寫代碼。為了實現這樣的性能,Scheme2Js不完全R5RS兼容。尤其是,它缺乏對延續,確切的數字支持,它只是部分地把尾遞歸。
Scheme2Js提供幾個標誌,其允許修改的結果:
ยท--no-JS-點符號不允許訪問的JavaScript領域具有點符號。此標誌禁用形式XY的訪問像的document.getElementById。然而仍然可以訪問是使用JS字段功能的有效表達。
ยท--mutable串:為了提高字符串操作的性能,並減輕方案和JavaScript代碼,默認的實現映射方案字符串的JavaScript字符串之間的接口。相反,計劃字符串,字符串的JavaScript不過是不可改變的。此標誌映射字符串到JavaScript類,它表示計劃字符串,是可變的。所得代碼可能是稍微慢一些,並且它是更加困難的Javascript代碼接口。
ยท--encapsulate零件封裝程序到一個匿名函數。只有全局變量是該匿名函數之外。一方面,這引入了一個函數調用的匿名函數。但在另一方面,大多數JavaScript實現應該跑得更快與此優化:通常哈希表是用來表示在JavaScript中的作用域。通過使用一個匿名函數的程序變量被分為自己的小而散列表(理論上)加速訪問這些變量。更重要的變量存儲在他們自己的哈希表,而不是在全局散列表,它是由全局變量進行訪問。這是非常容易間接改變全局變量的內容。內聯或其它常見的優化是不可能的,因此上做全局變量。通過在一個匿名函數存儲程序中的變量這些優化成為可能再次。
ยท--optimize-變種數降低在所得的JavaScript代碼中使用的變量的數目。所述代碼可以運行得更快,但更難以調試,因為變量名丟失和相同的變量可能被使用多次。
ยท--optimize,同時:使用此標誌Scheme2Js共同優化while循環。未經優化while循環的形式往往:
而(真){
如果(測試)
resVar =資源;
其他{
modify_loop_variable;
繼續;
}
打破;
}
這種優化查找這些模式和移動測試進入while循環:
而(!測試){
modify_loop_variable;
}
resVar =資源;
這種優化已經實施只是最近,因此沒有默認沒有激活。
ยท--verbose打印一些信息。
ยท--no內聯將禁用所有函數內聯(常數可能仍然被內聯)。
ยท--inline-全局讓Scheme2Js內嵌全局函數和常量。這可能有兩個不良的副作用:一,全局變量經常用於不同模塊之間傳輸數據。如果沒有提及它們了一些聯函數都將丟失。如果全局函數要一個模塊外使用,不應該使用此標誌。 (這種行為很可能在Scheme2Js的未來版本中改變。)
ยท--unresolved-是-JS:如果一個變量綁定,編譯器將假定變量來自另一個模塊,或從JavaScript。參見第計劃 - 永久JavaScript的計劃界面的更詳細的討論。
ยท--js,這提供了在計劃職能這個變量。通過這種方式,計劃程序可以用作JavaScript對象的方法。
ยท--no-tailrec禁用tailrec到while循環優化。如果您懷疑在翻譯尾區域經濟共同體的編譯器的方式錯誤,你可以試試這個標誌。
ยท--no-優化,通話禁用二元或一元操作Scheme2Js內聯。例如sci_plus(3,5)被優化,以(3 + 5)。這種優化是非常重要的,而且通常沒有理由將其禁用。
ยท--no-優化-consts禁用預常數的計算。除非禁用(用該標誌),化合物常數預先計算和它們的出現替換為參考變量保持的常量。這使得重複訪問這些常量快,但引入了新的變數。
ยท--no-優化-boolify禁用boolify優化。 JavaScript的和計劃的boolify是不等價的:JavaScript的考慮假,0,null和undefined是虛假的,而計劃只#F。因此,未經優化的boolify總是將測試針對假:如果(測試==假的!)......如果Scheme2Js可以看到,測試本身是一個布爾值,它可以去除多餘的==假的測試!此標誌禁用此優化。
ยท--D階段打印AST的點文件(見graphviz的)階段階段之後。可能的階段是:展開,樹,符號,節點elim1,尾,直列,不斷傳播,RM-未使用,增值分銷商,捕獲,節點elim2,同時,(TT“聲明”),節點elim3。通常一個並不需要這個標誌,除非用於調試的目的。
ยท--print-LOCS打印原始位置作為評論的JavaScript文件。這些位置是當前字符偏移從文件的開頭
什麼在此版本中是新的:
- 在未成年人變更和錯誤修正已經從移植到合Scheme2Js。
在什麼版本20100816是新的:
- 在Scheme2Js'運行閱讀器現在可以識別關鍵字李>
- 若干錯誤已被修正。
什麼是20081219版新:
- 在編譯器進行了優化
- 現在是速度更快,佔用內存更少。
- 在許多bug已經修復。
- Scheme2Js的默認模塊子句現在類似與bigloo之一。
- 在此版本支持合格的名稱。
評論沒有發現