JavaScript的替代品
目前,唯一完全支持的语言,以及浏览器中DOM树操作的实际标准是JavaScript。 看起来它有深层的devise问题,使它成为新手的漏洞和安全漏洞。
你知道任何存在的或计划的主动在下一代浏览器中引入DOM树操作和HTTP请求的任何types的更好的(重新devise的)语言(不仅仅是javascript)吗? 如果是的话,Firefox的整合路线图是什么,如果不是的话,除了互操作性之外,什么原因应该成为浏览器平台上唯一支持JavaScript的语言?
我已经使用jQuery,我也读了“javascript:好的部分”。 确实,这些build议是好的,但我无法理解的是:为什么只有JavaScript? 在服务器端(你最喜欢的操作系统平台),我们可以用各种语言来操作DOM树,甚至是Fortran。 为什么客户端(浏览器平台)只支持javascript?
JavaScript的问题不是语言本身 – 这是一个完美的原型和dynamic语言。 如果你来自面向对象的背景,有一点学习曲线,但这不是语言的错误。
大多数人都认为Javascript和Java一样,因为它有类似的语法和相似的名字,但实际上更像是lisp。 它实际上非常适合DOM操作。
真正的问题是它是由浏览器编译的,这意味着它根据客户端以不同的方式工作。
实际的DOM不仅取决于浏览器,而且在性能和布局方面也有很大的差异。
编辑下面的澄清问题
假设支持多种解释语言 – 你仍然有同样的问题。 各种浏览器仍然是越野车,并有不同的DOM。
另外,你必须在浏览器中内置一个解释器,或者以某种方式安装一个插件(你可以在提供页面之前检查)是否适合每种语言。 花了很长时间才得到Javascript一致。
你不能以同样的方式使用编译语言,那么你就要引入一个可执行文件,因为它不能被轻易地检查。 很多用户会select不让它运行。
好的,那么编译代码的某种沙盒呢? 听起来像Java小程序给我。 或Flash中的ActionScript。 或Silverlight中的C#。
什么样的IL标准呢? 这有更多的潜力。 用你想要的任何语言进行开发,然后把它编译成IL,这个浏览器就是JIT。
除此之外,Javascript已经是那种IL – 只是看GWT 。 它可以让你用Java编写程序,但是把它们分配成HTML和JS。
编辑下面的问题进一步澄清
Javascript不是,或者说不是,浏览器支持的唯一语言:在IE浏览器黑暗时代,你可以select使用Javascript或VBScript在IE中运行。 从技术上讲,IE甚至没有运行Javascript–它运行的是JScript (主要是为了避免为Sun支付单词java ,Oracle仍然拥有Javascript的名字)。
问题是,VBScript是微软专有的,但它也不是很好。 尽pipeJavascript在其他浏览器(如FireBug)中添加了function并获得了最高级别的debugging工具,但VBScript保持仅IE浏览器且几乎不可debugging(IE4 / 5/6中的开发工具不存在)。 与此同时,VBScript也扩展成为操作系统中function非常强大的脚本工具,但浏览器中没有这些function可用(当它们成为巨大的安全漏洞时)。
还有一些企业内部应用程序使用VBScript(有些依赖于这些安全漏洞),并且仍在运行IE7(它们只是停止了IE6,因为MS终于将其closures了)。
让JavaScript到目前的状态一直是一个噩梦,并已采取了20年。 它仍然没有一贯的支持,一些浏览器仍然缺less语言function(1999年指定),需要大量的垫片。
在浏览器中添加替代语言以解释两个主要问题:
-
让所有的浏览器厂商都能实现新的语言标准 – 20年来他们还没有为Javascript做过pipe理。
-
第二种语言可能会削弱您已经拥有的支持,允许(例如)IE具有二次Javascript支持,但是VBScript(再次)。 我真的不想为不同的浏览器使用不同的语言编写代码。
应该指出的是,Javascript并不是“完成”的 – 它在新浏览器中仍然在不断发展。 最新的版本比浏览器的实现早了好几年,他们正在开发下一个版本。
编译为Javascript
就目前而言,使用编译为Javascript的语言似乎是编写更智能代码时到达所有平台的唯一现实方式,而且这种情况很可能会持续很长时间。 随着任何新的产品,总有一些原因,为什么一个或多个供应商不会急于出货。
(但是我并不认为这是一个问题,Javascript现在已经被很好地优化了,如果手写的话,机器代码也是不安全的,但是作为一个编译目标和执行语言来说工作很好)。
这么多的select
有越来越多的语言编译成Javascript。 一个相当全面的列表可以在这里find:
- 在Coffeescript Wiki上编译成JS的语言列表
值得注意的
我会提到一些我认为值得注意的(虽然无疑忽略了一些我不知道的gem):
-
蜘蛛出现在2016年。它声称采取Go,Swift,Python,C#和CoffeeScript的最佳想法。 这不是types安全的,但它确实有一些小的安全function 。
-
Elm :Haskell可能是其中最聪明的语言 ,Elm是Haskell for Javascript的变体。 它具有高度的types感知和简洁性,并且提供了function性react native编程,作为反应式模板或MVC意大利面的完美替代scheme。 但程序员可能会感到相当震惊 。
-
Google's Go旨在简洁,简单和安全。 Go代码可以被GopherJS编译成Javascript。
-
Dart是Google后来尝试取代Javascript的。 它提供了接口和抽象类,通过一个C / Java的语法与可选的input。
-
Haxe就像Flash的ActionScript一样,但它可以定位多种语言,因此您的代码可以在Java,C,Flash,PHP和Javascript程序中重用。 它提供了types安全和dynamic的对象。
-
Opalang在Javascript中增加了语法糖,以提供直接的数据库访问 ,智能延续,types检查和辅助客户/服务器分离。 (绑定到NodeJS和MongoDB。)
-
GorillaScript “,这是一种编译成JavaScript的语言,旨在在尝试防止一些常见错误的同时为用户提供支持。 类似于Coffeescript,但更全面,提供了一堆额外的function,以提高安全性和减less重复样板模式。
-
LiteScript落在Coffeescript和GorillaScript之间。 它提供“inline”callback的asynchronous/产生语法,并检查variablesinput错误。
-
微软的TypeScript是Javascript的一个小超集,它允许你在函数参数上放置types限制,这可能会遇到一些错误。 同样, BetterJS允许您应用限制,但是在纯Javascript中,可以通过添加额外的调用或通过在JSDoc注释中指定types来实现。 而现在Facebook又提供了另外进行types推断的Flow 。
-
LiveScript是Coffeescript的衍生产品,因其简洁而受欢迎,但对我来说看起来不太可读。 可能不是最好的球队。
如何select?
在select另一种语言时,有一些因素需要考虑 :
-
如果其他开发者将来join你的项目,他们需要多长时间才能加速和学习这门语言,或者他们已经知道了什么机会?
-
这个语言是否具有太less的特性(代码仍然会充满样板)或太多的特性(需要花费很长时间才能掌握,直到那时一些有效的代码可能无法被破译)?
-
它是否具有您的项目所需的function? (您的项目是否需要types检查和接口?是否需要智能延续来避免嵌套的callback地狱?是否有很多react native?将来可能需要针对其他环境吗?)
未来…
Jeff Walker撰写了一系列关于“Javascript问题” 的发人深思的博客文章,包括为什么他认为TypeScript , Dart和Coffeescript都不能提供足够的解决scheme。 他在结论中提出了一些改进语言的理想特征。
应该是JavaScript在浏览器平台上唯一支持的语言?
是和不是。 有一个叫做Dart的替代品,它可以编译成JavaScript,和jQuery一样,它试图使DOM操作变得更容易一些。 试验可能很有趣,检查一下。
- 来自Google看到飞镖语言
- 从Microsoft看到TypeScript语言
也可以看看
- 榆树
- 卡尔
确实,JavaScript是一个难以应对的难题,但是networking开发社区已经走过了漫长的道路。 相反,我会鼓励你看看jQuery 。 这很容易,并将所有各种问题抽象出来。
而且真的没有其他的select全面工作。 闪现出现在脑海中,但这也是ECMA脚本,它可能在大多数情况下被杀。
短期来说,我会使用像jQuery这样的东西来隐藏浏览器的不兼容性。 长期来看,像Silverlight或Adobe AIR这样的技术将来可能会使这个雷区变得非常不同(但仍然是雷区)。
道格·克罗克福德( Doug Crockford )和谷歌(Google)进行了交谈,详细描述了JavaScript和其未来的糟糕和好的部分 它自1999年以来实际上并没有太大的改变 – 这可以说是一件好事(几乎所有的浏览器都可以运行相同的代码,只要你知道它们的局限性),并且Doug展示了好的部分大多是误解,结果是非常强大的。
对于DOM操作,将JQuery看作是一个客户端库,它将大部分糟糕的DOM APIreplace成很难编写的相当优雅的代码。
如果你认为JavaScript有深层次的问题,我推荐Doug Crockford的书“ JavaScript:The Good Parts” 。 (或Google的“Crockford JavaScript”来查找他所做的几个video演示。)Crockford勾画出一个安全的子集和一组实践,并具体列出要避免的语言的某些部分。
我不知道计划将JavaScript取代为操纵DOM的事实手段。 所以最好学会安全地使用它。
在客户端方面,Javascript是操纵DOM的唯一方法。 在服务器端方面有很多种方法。
Internet Explorer支持可插入的脚本语言,但除了JScript之外,唯一可靠地包含在IE中的是VBScript。
就我所见,似乎在浏览器中对dynamic语言有一种普遍的偏见,而JavaScript似乎足以充分地满足这种需求,networking效应使其他语言成为不起眼的东西。 这个语言实际上是相当强大的,尽pipe它在浏览器中的实现还有很多不足之处。
如果您愿意将您的客户/访问者限制为特定的浏览器,并且可能愿意要求他们安装插件,则可以查看MS Silverlight – 维基百科上的可读概述。 使用Silverlight 2,您可以运行客户端,使用C#,IronPython,IronRuby,VB.NET等编写的代码; 来自Mono项目的Silverlight的免费月光克隆将承诺为Linux带来相同的function。
实际上,大多数networking应用程序和网站的开发人员更喜欢接触更多的受众,而不是Silverlight(最终是Moonlight)目前可以提供的 – 这意味着坚持使用Javascript,或者可能使用Flash(使用类似的编程语言Actionscript)。
因此,即使对于微软而言,通过大量的工程师和市场营销预算以及一个自由软件项目,对于其他任何事情来说,获得大量的思想分享,采用和牵引力都是一场艰苦的斗争(可能会减轻对专有locking) – 这可能有助于解释为什么Mozilla基金会没有兴趣去推动这个目标。 你说:除了互操作性之外,互操作性的问题在这里是最重要的,因为我们观察到Silverlight的进展。
如前所述,您可以通过插件在浏览器中运行Flash(ActionScript是JavaScript的派生语言)和Silverlight / Moonlight(IronPython,IronRuby,JScript,VBScript,C#)(第一个更为普遍) 。
如果您喜欢Ruby: HotRuby ,还有另一种方法,那就是在浏览器中运行的JavaScript中的ruby实现。 它还不是很成熟,但你可以看看它。
有一件事我没有看到提及(哦,我看到Alcides在写作时提到了HotRuby,Nosredna提到了GWT和Script#),并且想抛弃它,这里有一些[insert language]的实现, JavaScript(例如,允许您在客户端或部署之前将Ruby , Python , C# , Java , Obj-J / Cappuccino [类似于Obj-C / Cocoa]或Processing [for Canvas]其中也有各种抽象库])。 当然,如果在客户端上进行翻译,会有性能上的开销,但是如果您对另一种语言更加熟悉,则可以让您有一定的灵活性。
就个人而言,我build议学习爱JavaScript。 这是一种优秀的,强大的语言,一旦你了解它,就会很漂亮。 我面临着相反的困境,琢磨着要有一个能够满足我所有需求的有效的服务器端JavaScript / DOM解决scheme。 /不请自来的意见
jquery(仍然是JavaScript,但它会真的帮助你,他们几乎支持所有的浏览器,这是不是真的很难学习:)
没有JavaScript,但它会发展。 下一个版本是“JavaScript和谐”,你可以学习更多,如果你谷歌。
不时有人build议将一个字节代码解释器与JavaScript一起放入浏览器中。 可能不会发生,至less一段时间。
我碰巧喜欢JavaScript。 但是还有其他解决scheme,包括将Java编译为JavaScript的GWT,以及将C#编译为JavaScript的Script#。
我不认为JavaScript会很快被replace。 对于富客户端的完全不同的方法,您可能需要研究Flex,这是一种基于Flash的技术。
也许像haxe(见haxe.org)可以帮助你。 它是一种比JavaScript更清洁的语言,可以编译成JavaScript,因此可以在浏览器中运行。
我知道这不是对你的问题的直接回答,但是我认为这可能对你很有意思。
很多人都明白,Javascript并不是最好,最漂亮的语言。 但是,它目前被浏览器所支持,因此要引入不同的语言是非常困难的。 我们根本不需要另一个浏览器的战争。
这解释了为什么我知道没有切换到不同的客户端语言的计划。
但是我认为,如果你开始思考DOM模型,那么Javascript并不是那么糟糕,如何使用它。 许多与JS混乱的东西都是DOM模型工作方式的结果。
JavaScript是networking的英文语言。 英语历史上的传播,因为它有强大的海军征服各国。 这相当于用JavaScript来征服networking的大公司。 这是一个来自多个欧洲来源(希腊语,拉丁语,日耳曼语,法语甚至一些中国和印度语)的语言。 JavaScript多年来从其他语言(结构,面向对象,function)借用了许多概念。 英语在不同的地方说话,方言和口音有轻微的变化,可能导致理解困难。 就像JavaScript有不同的浏览器解释有点不同。
尽pipe最初英语很容易学习,但是它的发音非常不一致,而且比规则更多的是例外。 就像JavaScript,它总是在那里提供一个惊喜。
尽pipe不同的口音,JavaScript是networking的通用语言。 就像你可能不是英文,用英文写在这里一样,每个网页浏览器都有一定的英文理解。 IE6就像在简历上说他stream利的人一样,但是只学了两周英语作为外语。
有人试图用英语作为世界主要语言,如世界语。 但是他们都失败了,因为地球上的大多数人会说一些英语。 以同样的方式,将很难引入更好的JavaScript替代品。