Javascript衍生

如今 JavaScript已经变成了Web开发必备的语言,甚至开始逐步向移动领域渗透,由于JavaScript的跨平台特性,使得它在移动互联网时代有更大的作为。

凡是可以用 JavaScript 来写的应用,最终都会用 JavaScript 来写。
——Atwood定律(Jeff Atwood在2007年提出)

将你擅长的语言编译为JavaScript

将Java代码编译为JavaScript

尽管JavaScript名字中包含“Java”,实际上JavaScript和Java没有任何关系,只是由于当时Java火得一塌糊涂,为了借助Java的名气来推广,就起名为JavaScript了。

各种强大的工具的出现,使得JavaScript代码和Java代码之间有了一定的联系,就是可以将Java代码编译为JavaScript代码,以便在浏览器中运行。当然,除了Java外,其他基于JVM的语言都可以如此做。

可以实现此类操作的工具如下。

  • BicaVM:一个使用JavaScript实现的JVM,可以运行60%的Java字节码
  • Ceylon:一个可编译为JavaScript的、模块化的、静态类型JVM语言
  • Doppio:一个使用Coffeescript实现的JVM,使得Java程序可以运行在任何JavaScript引擎上
  • GrooScript:一个可以将Groovy代码转为JavaScript代码的小框架
  • j2js:可以将Java字节码转换为JavaScript代码
  • Java2Script:Eclipse中的Java to JavaScript编译插件,并实现了一个JavaScript版的Eclipse SWT
  • Kotlin:可以编译为JVM字节码和JavaScript的静态类型编程语言
  • Processing:一个基于Java的可视化语言,可以编译为 JavaScript
  • STJS:Strongly-Typed JavaScript(强类型的JavaScript),一个可以将Java源码转换为JavaScript代码的Maven插件

将C/C++代码编译为JavaScript

C/C++如今也可以用来编写Web应用程序,同样可以将它们编译为JavaScript。一些工具如下。

  • Emscripten:Mozilla开发的LLVM后端,可以将任何通过LLVM前端(比如C/C++ Clang)生成的LLVMIR中间码编译成JavaScript代码。
  • mala:可以将vala代码(vala代码在编译时,首先会编译为C代码)编译为JavaScript
  • Mandreel:可以将C++和Objective-C代码编译为高度优化的JavaScript源码
  • Clue:一个C语言编译器,可以将C语言代码编译为高质量的Lua、Javascript或Perl代码。

由于Emscripten可以将LLVM二进制代码编译成JavaScript,LLVM是一种很流行的中间编译格式,几乎所有语言都有LLVM编译器,因此Emscripten也可以作为大部分语言转换为JavaScript的通用工具。

将Python代码编译为JavaScript

可以使用如下工具将Python代码编译为JavaScript代码。

  • Brython:用于替换网页上的JavaScript代码,允许使用Python来编写脚本,并直接在网页上执行
  • PYXC-PJ:可以将Python转换为JavaScript,并会产生一个行/列号映射文件
  • Pyjaco:可以将Python转换为JavaScript
  • Pyjamas:Python to JS转换器
  • Pyjs:Python to JS转换器
  • PyCow:可以将Python代码转换为 MooToolsJS代码
  • PyvaScript:一个类似于Python语法并拥有JavaScript特性的编程语言
  • RapydScript:增强版的PyvaScript
  • Skulpt:客户端的Python

将Ruby代码编译为JavaScript

在Ruby领域,有一个使用JavaScript实现的Ruby标准库—— RubyJS,它实现了Ruby中的所有方法,如Array、Numbers、Time等。Ruby之父松本行弘称“如果我必须编写JavaScript代码,我会使用RubyJS”。

另外,你也可以使用如下工具将Ruby代码编译为JavaScript代码。

  • 8ball:一个可以将Ruby(或Ruby子集)的源码转换为JavaScript源码的编译器
  • ColdRuby:一个Ruby 1.9 MRI字节码编译器和JS运行时,包括一个C++运行时以及用于本地执行的V8引擎
  • HotRuby:可以在浏览器内部或Flash平台上运行由YARV编译的Ruby操作码
  • Opal一个Ruby to JavaScript编译器,可用于任何JS环境
  • rb2js:一个Ruby to JavaScript编译器
  • Red:允许你以Ruby的方式编写代码,然后以JavaScript的方式运行代码

将.NET代码编译为JavaScript

你可以使用如下工具将C#、F#以及其他.NET代码编译为JavaScript代码。

  • Apps in Motion:允许使用C#来构建可以运行在任何设备上的Web应用程序
  • Blade:一个Visual Studio扩展,可以将C#代码转换为JavaScript
  • FunScript:可通过TypeScript的类型提供器将F#代码转换为JavaScript或JQuery代码
  • jsc:可将.NET程序重新编译为JavaScript、ActionScript、PHP或Java程序
  • JSIL:可将MSIL(.NET字节码)转换为 JavaScript
  • NemerleWeb:可将Nemerle语言(微软的多范型语言)编译为JavaScript
  • Pit:可将F#代码编译为Javascript
  • Prefix(开发中):可将C#代码编译为Javascript
  • Saltarelle:可将C#代码编译为Javascript
  • SharpKit(商业工具):可将C#代码编译为Javascript
  • Script#可将C#代码编译为Javascript
  • WebSharper:可将F#代码编译为Javascript.

将Scala代码编译为JavaScript

你可以使用如下工具将Scala代码编译为JavaScript代码。

  • Scala.js:一款将Scala编译为JavaScript的编译器,支持全部Scala语言特性,允许开发者用Scala开发从前端到后端的Web应用
  • js-scala:在Scala中将JavaScript作为嵌入式的DSL语言
  • Scala+GWT:通过GWT工具链将Scala代码编译为JavaScript语言

将Flash转换为JavaScript

HTML5(HTML/JavaScript/CSS3技术组合)的最大对手就是Flash,尽管目前Flash的市场份额还高居70%,但也不可否认,未来将是HTML5的天下。

就连Flash的开发商Adobe也开始拥抱HTML5,并发布了Toolkit for CreateJS工具,方便Web开发者将Flash转换为HTML5格式。

去年,Google曾发布了一套基于网页的的工具——Swiffy,在线即可将SWF格式的Flash文件转化为HTML5格式。

除了转换外,Mozilla还推出了一个新的解决方案——Shumway,这是一个“基于JavaScript的Flash虚拟机和运行时”,目的是在浏览器中构建一个可靠有效的SWF(Flash文件格式)渲染器,无需插件直接在浏览器中运行Flash。

由此可见,这些工具将进一步加速HTML5取代Flash的步伐。

其他编译工具

  • Go2js:可以将Go代码行到行地编译为JavaScript代码
  • Perlito:可以将Perl 5/6代码编译为JavaScript、Ruby、SBCL和Go语言代码。

增强版的JavaScript

JavaScript大量的扩展,在很大程度上弥补了JavaScript某些方面特性的不足。比如你可以使用如下这些工具或扩展来让JavaScript更强大。

安全性增强

  • ADsafe:提供了客户端静态验证功能和相关的API,增强第三方脚本的安全性
  • Caja:可以将传统的HTML和JavaScript转换为安全限制的JavaScpit格式
  • Dojo Secure:用于构建安全混搭应用的框架
  • FBJS:Facebook的 JavaScript工具,用于编写Facebook小插件
  • Jacaranda:支持对象的静态验证器
  • Gatekeeper:一个JavaScript密码保护脚本
  • Microsoft Web Sandbox:通过隔离来保证安全性

静态类型特性

  • JSX:一个更快、更安全、更易用的JavaScript替代品
  • Elm:类型安全的函数式语言,可编译为HTML、CSS和JavaScript.
  • Lambdascript:一个强类型的纯函数式原型语言
  • MileScript:一个类似于C#和Java的强类型语言,可编译为JS
  • SafeJS:为JavaScript增加了语法糖
  • Mascara:为JavaScript增加了强大的功能,比如类、命名空间和类型检查等
  • Roy:函数式语言,与JavaScript语义保持接近,拥有类型推断、结构类型、sum类型、模式匹配等

JavaScript的衍生品

JavaScript如今在Web开发界的地位无法撼动,但是仍不断有一些新的语言出现,希望能够通过提供更强大、更完善、更优雅的特性来代替JavaScript。

  • CoffeeScript: CoffeeScript是一个使用纯Ruby编写的编程语言,只使用了JavaScript的“精髓”,抛弃了原来JavaScript晦涩、容易出问题的部分,如全局变量声明、with等。并提供了很多语法糖,让代码更优雅可读。
  • Dart:Google推出的一种基于类的可选类型化编程语言,可以在原生虚拟机中直接运行,也可以用编译器将Dart代码翻译成 JavaScript代码。
  • TypeScript:JavaScript的一个超集,添加了可选的静态类型和基于类的面向对象编程。
  • ClojureScript:由Clojure的创建者Rich Hickey推出,目标是“做Javascript所能做到的事情”,代码可编译为Javascript。
  • IcedCoffeeScript: Coffeescript语言的扩展集,添加了2个关键字await和defer,为浏览器和服务器两者提供了强大的异步控制功能。
  • LiveScriptCoco的一个分支,是CoffeeScript的间接子集,并在面向对象和命令式编程方面进行了诸多改进,代码可以编译成JavaScript。
  • Kaffeine:JavaScript语法的扩展,与JavaScript非常类似,代码可以直接编译成JavaScript。

更多工具可参见: http://altjs.org/

 


关注我

我的微信公众号:前端开发博客,在后台回复以下关键字可以获取资源。

  • 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF
  • 回复「Vue脑图」获取 Vue 相关脑图
  • 回复「思维图」获取 JavaScript 相关思维图
  • 回复「简历」获取简历制作建议
  • 回复「简历模板」获取精选的简历模板
  • 回复「加群」进入500人前端精英群
  • 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。
  • 回复「知识点」下载高清JavaScript知识点图谱

每日分享有用的前端开发知识,加我微信:caibaojian89 交流