Objective-J直接在浏览器上编译/转换为JavaScript。(这与在服务器上执行此操作形成对比,就像GWT对Java所做的那样。)除了Objective-J之外,是否有其他语言实现了这种方法?
发布于 2011-01-07 21:01:15
发布于 2010-10-09 10:18:06
CoffeeScript编译器将CoffeeScript编译成ECMAScript。由于CoffeeScript编译器本身是用CoffeeScript编写的,因此它可以将自身编译为ECMAScript,从而在浏览器中运行。标准CoffeeScript编译器中已经包含了支持<script type='text/coffeescript'>元素所需的零碎内容。
一般来说,任何语言都可以编译成ECMAScript,您所需要的只是一个编译器。而且,因为任何语言都可以编译成ECMAScript,所以任何编译器都可以编译成ECMAScript,您所需要的就是编写编译器所用语言的编译器。
这导致了在浏览器中编译语言的可能性的组合爆炸。
例如,有这样一个人,他编写C compilers which target high-level languages只是为了好玩。他有一个可以把C编译成Java、Perl、Common Lisp、Lua或ECMAScript的编译器。因此,您可以使用该编译器将任何其他用C编写的编译器编译为ECMAScript。而且大多数语言都有一些用C编写的编译器。
Clue是用C编写的。Clue将C编译成ECMAScript。因此,您可以使用Clue将Clue编译为ECMAScript。然后,您可以在浏览器中运行Clue,将C动态编译为ECMAScript。<script type='text/c'>,有人要吗?(有趣的想法: node.js是用C.Hmm…编写的)
更重要的是:编译到ECMAScript通常有三个原因:
如果您只是想重用用不同语言编写的现有代码(或用不同语言编写的现有知识),那么在客户机上编译/解释没有多大意义。无论如何,代码或编码器都不希望能够使用<script>元素。这个类别包括像GWT或Volta这样的东西。
如果(类型)安全是你的目标,那么在客户机上编译/解释根本不起作用:如果你不控制编译器,你怎么保证安全性呢?这就是为什么Ur/Web、Links、Flapjax、Haxe、Caja等在服务器上编译代码的原因。它们通过静态类型或紧密集成或两者兼而有之来保证安全性。(所谓紧密集成,我的意思是后端、前端和应用程序紧密相连,例如,只需指定一次数据结构,然后从该单一来源生成相应的SQL、ECMAScript和HTML表单,以确保它们都匹配。这需要在服务器上进行处理的原因应该是显而易见的。)
然而,那些关注表现力的人希望被用作ECMAScript的替代品,即在<script>元素中,因此它们通常附带在客户机上运行的解释器和/或编译器。CoffeeScript、Objective-J和Clamato都属于这一类。
发布于 2010-10-09 09:30:44
这里有一个将类似ruby的语言编译成javascript的例子--编译可以在浏览器中完成。
http://jashkenas.github.com/coffee-script/
https://stackoverflow.com/questions/3895322
复制相似问题