搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 优才网 > 一切归于JavaScript

一切归于JavaScript

优才网 2017-12-01



Atwood定律:

    凡是可以用JavaScript来写的应用,最终都会用JavaScript来写。

                                           

                               ——Jeff Atwood



起源于Netscape公司的LiveScript语言,这是一种基于对象和事件驱动的客户端脚本语言,最初的设计是为了检验HTML表单输入的正确性。


早些年,JavaScript由于其复杂的文档对象模型(DOM)、糟糕的实现和调试工具、不一致的浏览器实现而不受开发者的待见。而随着技术的发展, JavaScript变得越来越强大、完善。


比如, Ajax技术可以创建更加迷人的Web应用,将JavaScript的应用范围扩展到了服务器端,各种层出不穷的框架使得JavaScript的开发更加简捷,尤其是近几年的出现,将 JavaScript提升到了前所未有的高度。


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


凡是可以用JavaScript来写的应用,最终都会用JavaScript来写。

                                ——Jeff Atwood


不会JavaScript怎么办?



JavaScript现在已经成了Web开发的“标配”语言,不管你喜不喜欢,在Web开发中,必定要涉及到JavaScript。JavaScript可以实现真正的“一次编写,到处运行”,并可以控制所有常用的浏览器。因此,JavaScript。


尽管如此,但是如果你还没开始学习JavaScript,这也不影响你编写Web应用。


你完全可以用你喜欢的语言(、.NET、C/C++、、Ruby……)来编写应用程序,然后将它们编译为JavaScript语言,然后再运行于浏览器上。


如果你对JavaScript的语法不满意,你也可以使用一些JavaScript的增强版语言。比如,如果你更喜欢经典的面向对象方式,并想要一些语法糖,那么你可以试试CoffeeScript。


如果你希望有一个更严格的类型系统,那么你可能会发现Dart或TypeScript更有趣一些;如果你更喜欢函数式编程,那么ClojureScript或Roy可以帮助你。



将你擅长的语言编译为JavaScript



将Java代码编译为JavaScript


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


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


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


  • :一个使用JavaScript实现的JVM,可以运行60%的Java字节码;

  • :一个可编译为JavaScript的、模块化的、静态类型JVM语言;

  • :一个使用CoffeeScript实现的JVM,使得Java程序可以运行在任何JavaScript引擎上;

  • :一个可以将Groovy代码转为JavaScript代码的小框架;

  • :可以将Java字节码转换为JavaScript代码;

  • :Eclipse中的Java to JavaScript编译插件,并实现了一个JavaScript版的Eclipse SWT;

  • :可以编译为JVM字节码和JavaScript的静态类型编程语言;

  • :一个基于Java的可视化语言,可以编译为

  • :Strongly-Typed JavaScript(强类型的JavaScript),一个可以将Java源码转换为JavaScript代码的Maven插件。


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


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


  • :Mozilla开发的LLVM后端,可以将任何通过LLVM前端(比如C/C++ Clang)生成的LLVMIR中间码编译成JavaScript代码;

  • :可以将vala代码(vala代码在编译时,首先会编译为C代码)编译为JavaScript;

  • :可以将C++和Objective-C代码编译为高度优化的JavaScript源码;

  • :一个C语言编译器,可以将C语言代码编译为高质量的Lua、Javascript或Perl代码。


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


将Python代码编译为JavaScript


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


  • :用于替换网页上的JavaScript代码,允许使用Python来编写脚本,并直接在网页上执行;

  • :可以将Python转换为JavaScript,并会产生一个行/列号映射文件;

  • :可以将Python转换为JavaScript;

  • :Python to JS转换器;

  • :Python to JS转换器;

  • :可以将Python代码转换为 MooToolsJS代码;

  • :一个类似于Python语法并拥有JavaScript特性的编程语言;

  • :增强版的PyvaScript;

  • :客户端的Python。



将Ruby代码编译为JavaScript


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


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


  • :一个可以将Ruby(或Ruby子集)的源码转换为JavaScript源码的编译器;

  • :一个Ruby 1.9 MRI字节码编译器和JS运行时,包括一个C++运行时以及用于本地执行的V8引擎;

  • :可以在浏览器内部或Flash平台上运行由YARV编译的Ruby操作码;

  • : Ruby to JavaScript编译器,可用于任何JS环境;

  • :一个Ruby to JavaScript编译器;

  • :允许你以Ruby的方式编写代码,然后以JavaScript的方式运行代码。


将.NET代码编译为JavaScript


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


  • :允许使用C#来构建可以运行在任何设备上的Web应用程序;

  • :一个Visual Studio扩展,可以将C#代码转换为JavaScript;

  • :可通过TypeScript的类型提供器将F#代码转换为JavaScript或JQuery代码;

  • :可将.NET程序重新编译为JavaScript、ActionScript、PHP或Java程序;

  • :可将MSIL(.NET字节码)转换为 JavaScript;

  • :可将Nemerle语言(微软的多范型语言)编译为JavaScript;

  • :可将F#代码编译为Javascript;

  • (开发中):可将C#代码编译为Javascript;

  • :可将C#代码编译为Javascript;

  • (商业工具):可将C#代码编译为Javascript;

  • :C#代码编译为Javascript;

  • :可将F#代码编译为Javascript。


将Scala代码编译为JavaScript


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


  • :一款将Scala编译为JavaScript的编译器,支持全部Scala语言特性,允许开发者用Scala开发从前端到后端的Web应用;

  • :在Scala中将JavaScript作为嵌入式的DSL语言;

  • :通过GWT工具链将Scala代码编译为JavaScript语言。


将Flash转换为JavaScript


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


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


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


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


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


其他编译工具


  • :可以将Go代码行到行地编译为JavaScript代码;

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



编译为JavaScript后的问题



调试问题


由于是交叉编译,导致输出的代码很难被跟踪调试。一些工具在编译的过程中会生成映射文件(将编译后的JavaScript代码映射到源语言),可以通过这些文件来进行调试。


性能问题


由于 JavaScript在浏览器中的运行问题,本地代码编译为JavaScript后的执行速度可能会下降。


对于此类问题,Mozilla给出了一个解决方案—— asm.js(见《 》)。


asm.js是JavaScript的一个严格的子集,提供了一个类似于C/C++虚拟机的抽象实现,包括一个可有效负载和存储的大型二进制堆、整型和浮点运算、高阶函数定义、函数指针等,可以被用来作为一个底层的、高效的编译器目标语言。


此外,还可以使用Mozilla开发的 来获得更快的执行速度。开发者可以将编写的代码编译为JavaScript,然后手动编写为asm.js代码,当浏览器执行该程序时,OdinMonkey引擎会让程序的执行速度更接近于本地应用。Mozilla未来可能会开发一些工具(类似于)来自动生成asm.js代码。


随着技术的发展,未来JavaScript也许会跑得和native C一样快。


一些演示


2012年,Mozilla曾推出一款Web版的第一人称射击游戏演示,2013年5月份,Mozilla宣布与Epic Games合作将虚幻引擎3(C/C++实现)移植到浏览器上,并发布了基于虚幻引擎3的HTML5演示游戏


这些游戏都是基于WebGL、 和高性能的JavaScript子集asm.js实现,重新定义了3D游戏在浏览器中运行的性能,展示了高端游戏也可以很容易地移植到JavaScript 和 WebGL平台,同时不失性能和画面效果。



Mozilla的另一款支持多人在线的HTML5 游戏—— 。


随着HTML5新特性Full Screen API、Gamepad API和Mouse Lock API的完善,浏览器或将成为未来游戏的新战场。



增强版的JavaScript



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


安全性增强


  • :提供了客户端静态验证功能和相关的API,增强第三方脚本的安全性;

  • :可以将传统的HTML和JavaScript转换为安全限制的JavaScpit格式;

  • :用于构建安全混搭应用的框架;

  • :Facebook的工具,用于编写Facebook小插件;

  • :支持对象的静态验证器;

  • :一个JavaScript密码保护脚本;

  • :通过隔离来保证安全性。


静态类型特性


  • :一个更快、更安全、更易用的JavaScript替代品;

  • :类型安全的函数式语言,可编译为HTML、CSS和JavaScript;

  • :一个强类型的纯函数式原型语言;

  • :一个类似于C#和Java的强类型语言,可编译为JS;

  • :为JavaScript增加了语法糖;

  • :为JavaScript增加了强大的功能,比如类、命名空间和类型检查等;

  • :函数式语言,与JavaScript语义保持接近,拥有类型推断、结构类型、sum类型、模式匹配等。




JavaScript的衍生品




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


  • : CoffeeScript是一个使用纯Ruby编写的编程语言,只使用了JavaScript的“精髓”,抛弃了原来JavaScript晦涩、容易出问题的部分,如全局变量声明、with等。并提供了很多语法糖,让代码更优雅可读;

  • :Google推出的一种基于类的可选类型化编程语言,可以在原生虚拟机中直接运行,也可以用编译器将Dart代码翻译成 JavaScript代码;

  • :JavaScript的一个超集,添加了可选的静态类型和基于类的面向对象编程;

  • :由Clojure的创建者Rich Hickey推出,目标是“做Javascript所能做到的事情”,代码可编译为JavaScript;

  • : CoffeeScript语言的扩展集,添加了2个关键字await和defer,为浏览器和服务器两者提供了强大的异步控制功能;

  • :的一个分支,是CoffeeScript的间接子集,并在面向对象和命令式编程方面进行了诸多改进,代码可以编译成JavaScript;

  • :JavaScript语法的扩展,与JavaScript非常类似,代码可以直接编译成JavaScript。


更多工具可参见:



最后




几乎所有主流的语言都可以编译为JavaScript,进而能够在所有平台上的浏览器中执行,这也体现了JavaScript的强大性和在Web开发中的重要性。


此外,互联网中还存在大量的工具,使得这些语言可以与 JavaScript进行互操作,我们将在以后的文章中详细介绍。


以上这些工具中,大部分都是开源项目,如果感兴趣,你也可以通过源码来了解这些语言之间进行转换的相关原理和技术。


文章来源:

http://blog.csdn.net/cuixiping/article/details/37727481

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《一切归于JavaScript》的版权归原作者「优才网」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注优才网微信公众号

优才网微信公众号:ucaicn

优才网

手机扫描上方二维码即可关注优才网微信公众号

优才网最新文章

精品公众号随机推荐