一切皆为 JavaScript

一切皆为 JavaScript

大家好,又见面了,我是全栈君。

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

早些年,JavaScript因为其复杂的文档对象模型(DOM)、糟糕的实现和调试工具、不一致的浏览器实现而不受开发人员的待见。而随着技术的发展, JavaScript变得越来越的强大、完好。比方, Ajax技术能够创建更加迷人的Web应用,Node.js将JavaScript的应用范围扩展到了server端。各种层出不穷的框架使得JavaScript的开发更加简捷,尤其是近几年HTML5的出现,将 JavaScript提升到了前所未有的高度。

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

凡是能够用 JavaScript 来写的应用,终于都会用 JavaScript 来写。

                             ——Atwood定律(Jeff Atwood在2007年提出)

不会JavaScript怎么办?

现在 JavaScript已经成为了Web开发的“标配”语言,无论你喜不喜欢。在Web开发中。必然要涉及到JavaScript。JavaScript能够实现真正的“一次编写,到处执行”。并能够控制全部经常使用的浏览器,因此。JavaScript将你擅长的语言编译为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:client的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后的执行速度可能会下降。

对于此类问题。Mozilla给出了一个解决方式—— asm.js(见《 asm.js:JavaScript的“汇编语言”》)。asm.js是一个JavaScript的一个严格的子集,提供了一个类似于C/C++虚拟机的抽象实现,包含一个可有效负载和存储的大型二进制堆、整型和浮点运算、高阶函数定义、函数指针等,能够被用来作为一个底层的、高效的编译器目标语言。

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

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

一些演示

2012年。Mozilla曾推出一款Web版的第一人称射击游戏演示BananaBread,今年5月份。Mozilla宣布与Epic Games合作将虚幻引擎3(C/C++实现)移植到浏览器上。并公布了基于虚幻引擎3的HTML5演示游戏Epic Citadel,这些游戏都是基于WebGL、 Emscripten和高性能的JavaScript子集asm.js实现。又一次定义了3D游戏在浏览器中执行的性能,展示了高端游戏也能够非常easy地移植到JavaScript 和 WebGL平台,同一时候不失性能和画面效果。

一切皆为 JavaScript

Mozilla的还有一款支持多人在线的HTML5 游戏—— BrowserQuest

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

增强版的JavaScript

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

安全性增强

  • ADsafe:提供了client静态验证功能和相关的API。增强第三方脚本的安全性
  • Caja:能够将传统的HTML和JavaScript转换为安全限制的JavaScpit格式
  • Dojo Secure:用于构建安全混搭应用的框架
  • FBJS:Facebook的JavaScript工具。用于编写Facebook小插件
  • Jacaranda:支持对象的静态验证器
  • Gatekeeper:一个JavaScriptpassword保护脚本
  • 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晦涩、easy出问题的部分。如全局变量声明、with等。并提供了非常多语法糖,让代码更优雅可读。

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

  • TypeScript:JavaScript的一个超集,加入了可选的静态类型和基于类的面向对象编程。
  • ClojureScript:由Clojure的创建者Rich Hickey推出,目标是“做Javascript所能做到的事情”,代码可编译为Javascript。

  • IcedCoffeeScript: Coffeescript语言的扩展集,加入了2个keywordawait和defer。为浏览器和server两者提供了强大的异步控制功能。
  • LiveScriptCoco的一个分支。是CoffeeScript的间接子集,并在面向对象和命令式编程方面进行了诸多改进,代码能够编译成JavaScript。
  • Kaffeine:JavaScript语法的扩展,与JavaScript非常类似,代码能够直接编译成JavaScript。

很多其它工具可參见: http://altjs.org/

最后

差点儿全部主流的语言都能够编译为JavaScript。进而能够在全部平台上的浏览器中运行,这也体现了JavaScript的强大性和在Web开发中的重要性。此外,互联网中还存在大量的工具,使得这些语言能够与 JavaScript进行互操作,我们将在以后的文章中具体介绍。

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

作者:王果    (本文最早于2013年11月发表于CSDN资讯头条

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116314.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 【电脑配置】开发人员必备,黑苹果双系统安装教程

    【电脑配置】开发人员必备,黑苹果双系统安装教程转存失败重新上传取消转存失败重新上传取消​首先把我自己的电脑配置贴出来供大家参考:CPU:Inteli7-8086k主板:技嘉Z370AORUSULTRAGAMINGWIFI内存:海盗船铂金统治者3000C15白光8G*2套条(已送修)改为酷兽DDR432008G*4,海力士颗粒。显卡:镭风RX5704G散热:九州风神堡垒240硬盘:PM9…

  • 用模拟器加载基于ARM平台的WinCE6.0 内核(NK.bin)

    用模拟器加载基于ARM平台的WinCE6.0 内核(NK.bin)

  • bs架构和cs架构的比对方法_cs架构嵌入BS

    bs架构和cs架构的比对方法_cs架构嵌入BS1、CS、BS架构定义  CS(Client/Server):客户端—-服务器结构。C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。因为客户端要负责绝大多数的业务逻辑和UI展示,又称为胖客户端。它充分利用两端硬件,将任务分配到Client和Server两端,降低了系统的通讯开销。C/S结构的软件需要针对不同

    2022年10月16日
  • java scanner next nextline nextint区别

    java scanner next nextline nextint区别next表示返回第一个字符串而nextLine()方法的结束符只是Enter键,即nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。简单的说nextLine() 返回的是一行。而next() 返回的只是第一个输入。 比如;输入hello java nextLine() 读的是hello java next() 读的是hello

  • mac安装wget命令_安装mac系统

    mac安装wget命令_安装mac系统wget是一个从网络上自动下载文件的自由工具,支持通过HTTP、HTTPS、FTP三个最常见的TCP/IP协议下载,并可以使用HTTP代理。“wget”这个名称来源于“WorldWideWeb”与“get”的结合。所谓自动下载,是指wget可以在用户退出系统的之后在继续后台执行,直到下载任务完成。Mac安装wget官网下载包wget1.8.tar.gz包:http://ftp.gnu.org/gnu/wget/解压到想安装的路径打开终端进入wget解压的路径依次执

    2022年10月16日
  • 谷歌浏览器如何重置?谷歌浏览器恢复默认设置?

    谷歌浏览器如何重置?谷歌浏览器恢复默认设置?

    2021年10月17日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号