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之一。
- 在此版本支持合格的名称。
评论没有发现