在Objective-J中有其他语言可以在浏览器中"编译"到JavaScript吗?

ave*_*net 6 javascript compiler-construction objective-j

Objective-J直接在浏览器上编译/转换为JavaScript.(这与在服务器上执行此操作形成对比,正如GWT对Java所做的那样.)这种方法是否已针对除Objective-J之外的任何语言实现?

Jör*_*tag 14

CoffeeScript的编译器编译的CoffeeScript到的ECMAScript.由于CoffeeScript编译器本身是用CoffeeScript编写的,因此它可以将自身编译为ECMAScript,从而在浏览器中运行.支持<script type='text/coffeescript'>元素的必要部分已包含在标准CoffeeScript编译器中.

通常,任何语言都可以编译为ECMAScript,您只需要编译器.而且,由于任何语言可以被编译成ECMAScript中,任何编译器可以编译成ECMAScript中,所有你需要的是对语言的编译器编译器写入了数据.

这导致在浏览器中编译语言的可能性的组合爆炸.

例如,有一个人写C编译器,目标高级语言的乐趣.他有一个编译器,可以将C编译为Java,Perl,Common Lisp,Lua或ECMAScript.因此,您可以使用编译器将用C 编写的任何其他编译器编译为ECMAScript.并且大多数语言都有一些用C编写的编译器.

线索用C语言编写.Clue编译C到ECMAScript.因此,您可以使用Clue将Clue编译为ECMAScript.然后,您可以在浏览器中运行Clue,以便在运行时将C编译为ECMAScript.<script type='text/c'>, 任何人?(有趣的想法:node.js是用C.写的......嗯......)

更严重的是:编译ECMAScript通常有三个原因:

  1. 重用
  2. 安全
  3. 表现力

如果您只是想重用用不同语言编写的现有代码(或者用不同语言编写现有知识库),那么在客户端上编译/解释就没有多大意义了.代码或编码器<script>无论如何都不希望能够使用元素.此类别包括GWTVolta等内容.

如果(类型)安全是您的目标,那么在客户端上编译/解释根本不起作用:如果您不控制编译器,如何保证安全?这就是Ur/Web,Links,Flapjax,haXe,Caja等在服务器上编译代码的原因.它们通过静态打字或紧密集成或两者来保证安全性.(通过紧密集成,我的意思是后端,前端和应用程序紧密连接,例如通过指定数据结构一次,然后从该单个源生成相应的SQL,ECMAScript和HTML表单,以确保它们都匹配.应该是显而易见的为什么这需要在服务器上进行处理.)

然而,专注于表达性的那些期望被用作ECMAScript的替代品,即内部<script>元素,因此它们通常带有在客户端上运行的解释器和/或编译器.CoffeeScript,Objective-JClamato都属于这一类.