为什么JavaScript而不是标准的浏览器虚拟机?

通过托pipe在浏览器中的标准化虚拟机来支持一组语言(Java,Python,Ruby等),而不是要求使用专门的语言 – 实际上是一种专门的范例 – 是否合理?仅用于客户端脚本?

为了澄清这个build议,网页将包含字节码,而不是像JavaScript这样的更高级的语言。

我理解JavaScript的实际情况,因为演化的原因,JavaScript是我们现在需要处理的事情,但是我从更长远的angular度思考问题。 关于向后兼容性,在一段时间内没有理由不能同时支持内联JavaScript,当然JavaScript可能是浏览器虚拟机支持的语言之一。

嗯,是。 当然,如果我们有一个时间机器,回头看看,确保大量的Javascriptfunctiondevise不同将是一个主要的消遣(并确保deviseIE的CSS引擎的人从未进入IT)。 但是这不会发生,现在我们一直在坚持下去。

我怀疑,随着时间的推移,它将成为networking的“机器语言”,其他更好devise的语言和API将被编译(并且迎合不同的运行时间引擎的缺陷)。

不过,我不认为这些“更好devise的语言”是Java,Python或Ruby。 尽pipe能够在其他地方使用Javascript,但是JavaScript是一种Web应用程序脚本语言。 考虑到这个用例,我们可以比任何一种语言做得更好。

回答这个问题 – 不,这是没有意义的。

目前我们对多语言虚拟机最接近的东西是JVM和CLR。 这些不是完全的轻量级的野兽,尝试在浏览器中embedded这样大小和复杂的东西是没有意义的。

让我们来看看你可以编写一个比现有解决scheme更好的新型多语言VM。

  • 你落后于稳定。
  • 你背后的复杂性(方式,方式,后面,因为你试图推广多种语言)
  • 你在采用上落后了

所以,不,这是没有意义的。

请记住,为了支持这些语言,你将不得不去掉他们的API来激化,去掉任何在浏览器脚本中没有意义的部分。 这里有大量的devise决策,而且有很大的错误机会。

在function方面,我们可能只是真的在使用DOM,所以这是一个语法和语言上的问题,在这个问题上,问这个问题确实值得吗?

请记住,我们唯一讨论的是客户端脚本,因为服务器端脚本已经可以用任何你喜欢的语言。 这是一个相对较小的编程领域,因此带来多种语言的好处是值得怀疑的。

用什么语言来引入? (警告,主观材料如下)

引入像C这样的语言是没有意义的,因为它是用于处理金属的,在浏览器中没有太多可用的金属。

引入像Java这样的语言是没有意义的,因为最好的东西就是API。

引入像Ruby或Lisp这样的语言是没有意义的,因为JavaScript是非常接近Scheme的强大的dynamic语言。

最后,浏览器制造商真的想支持多种语言的DOM集成吗? 每个实现都会有自己特定的错误。 我们已经走过了处理MS Javascript和Mozilla Javascript之间的差异的火灾,现在我们想把这种痛苦增加五到六倍?

这没有意义。

我认为JavaScript是一种很好的语言,但我希望在开发客户端Web应用程序时有一个select。 出于传统的原因,我们坚持使用JavaScript,但有一些项目和想法正在寻求改变这种情况:

  1. Google Native Client :用于在浏览器中运行本机代码的技术。
  2. Emscripten :将LLVM字节码编译为javascript。 允许LLVM语言在浏览器中运行。
  3. 想法:浏览器中的.NET CLI,由Mono的创build者: http : //tirania.org/blog/archive/2010/May-03.html

我想我们会有很长一段时间的JavaScript,但迟早会改变的。 有这么多的开发者愿意在浏览器中使用其他语言。

在Windows上,您可以使用脚本主机注册其他语言,并使其可用于IE。 例如,VBScript支持开箱即用(虽然它从来没有得到太多的stream行,因为它对大多数的目的甚至比JavaScript差)。

Python的win32扩展使得人们可以很容易地将Python添加到IE中,但是这并不是一个好主意,因为Python对于沙箱来说非常困难:许多语言特性公开了足够多的实现钩子来允许一个被认为是受限制的应用程序爆发。

一般来说,您添加到面向networking的应用程序(如浏览器)的复杂性越高,安全性问题的可能性就越大。 一些新的语言肯定会适合这种描述,而这些新语言也在快速发展。

JavaScript是一种丑陋的语言,但是通过仔细使用function的select性子集以及来自合适的对象库的支持,它通常可以相当容忍。 似乎增量的,实际的JavaScript添加是Web脚本可能继续前行的唯一方法。

我肯定会欢迎在浏览器中使用标准的独立于语言的虚拟机(我宁愿使用静态types语言编写代码)。

(技术上)这是相当可行的:首先一个主要浏览器支持它,服务器有可能发送字节码,如果当前请求来自兼容的浏览器或将代码翻译成JavaScript并发送纯文本JavaScript。

已经有一些实验语言可以编译成JavaScript,但是有一个定义好的虚拟机可能会(也许)提供更好的性能。

我承认,“标准”部分是相当棘手的。 另外,关于图书馆的语言特征(如静态和dynamic分类)之间会有冲突(假设新的事物会使用同一个图书馆)。 所以我不认为会发生(很快)。

如果你觉得你的手脏了,那么你要么被洗脑,要么仍然感受到“DHTML岁月”的影响。 JavaScript是非常强大的,并且适合于它的目的,这是脚本交互客户端。 这就是为什么JavaScript 2.0得到如此糟糕的说唱。 我的意思是,为什么包,接口,类等,当这些是服务器端语言的明确方面。 作为一种基于原型的语言,JavaScript并不是完全面向对象的。

如果由于服务器端和客户端之间的通信不畅而导致应用程序缺乏无缝性,那么您可能需要重新考虑如何构build应用程序。 我曾与极其强大的网站和Web应用程序,我从来没有说过,“嗯,我真的希望JavaScript可以做(xyz)。” 如果可以这样做,那么它不会是JavaScript–它将是ActionScript或AIR或Silverlight。 我不需要,大多数开发人员也不需要。 这些都是很好的技术,但是他们试图用技术解决问题,而不是解决scheme。

虽然Javascript是唯一支持良好的脚本语言,您可以直接从页面控制页面,但Flash对于较大的程序有一些非常好的function。 最近它有一个JIT,并且还可以随时生成字节码(查看运行时expression式评估 ,其中使用flash将用户input的mathexpression式编译为本地二进制文件)。 Haxe语言为您提供静态types推断和字节码生成function,几乎可以实现您select的任何运行时系统。

我不认为一个标准的networking虚拟机是不可思议的。 有很多方法可以优雅地引入新的web虚拟机标准,并提供全面的传统支持,只要确保所使用的任何虚拟机字节码格式都可以快速反编译为javascript,并且生成的输出效率会相当高我甚至会猜测,一个聪明的反编译器可能会产生比任何人类可以产生的JavaScript更好的JavaScript)。

有了这个属性,任何web虚拟机格式都可以很容易地在服务器上(快速),在客户端上反编译(速度慢,但是在服务器控制有限的情况下可能),或者可以预先生成和dynamic加载对于本来不支持新标准的浏览器,客户端或服务器(最快)。

这些原生支持新标准的浏览器将受益于基于Web vm的应用程序运行时速度的提高。 最重要的是,如果浏览器将他们原有的javascript引擎build立在web vm标准上(即将javascriptparsing为web vm标准,然后运行它),那么他们不必pipe理两个运行时间,但这取决于浏览器供应商。

这个问题经常重演。 我的立场是:

A)不会发生B)已经在这里。

赦免,什么? 让我解释:

广告

虚拟机不仅仅是某种通用的魔法设备。 大多数虚拟机针对特定语言和某些语言function进行了优化。 采取JRE / Java(或LLVM):针对静态types进行了优化,当实现dynamictypes或其他Java首先不支持的东西时,肯定存在问题和缺点。

所以,支持多种语言特性(tail call optimization,static&dynamic typing,foo bar boo,…)的“通用多用途虚拟机”将非常庞大,很难实现,可能难以优化以获得良好的性能它。 但是我不是语言devise师,也不是vm guru,也许我错了:这其实很简单,只有没有人有想法呢? hrm,hrm。

广告B.

已经在这里:可能没有字节码编译器/虚拟机,但你并不需要一个。 afaik的JavaScript是完整的,所以它应该是可能的:

  1. 创build一个从X语言到JavaScript的翻译器(例如coffeescript)
  2. 在javascript中创build一个解释语言X的解释器(例如brainfuck )。 是的,表演将是糟糕的,但嘿,不能拥有一切。

广告C

什么? 首先没有C点!? 因为还没有… 谷歌NACL。 如果有人能做到的话,那就是谷歌。 尽快谷歌得到它的工作,你的问题得到解决。 只有呃,它可能永远不会工作,我不知道。 我最后一次读到这里,还有一些未解决的安全问题。


除此之外:

  • 自1995年以来,javascript一直在那里= 15年。 尽pipe如此,浏览器的实现仍然不同(尽pipe至less不再难以忍受)。 所以,如果你开始新的东西,你可能有一个工作跨浏览器2035左右的版本。至less有一个工作的子集。 这只是微妙的不同。 并需要兼容性库和图层。 没有意义,尽pipe不尝试改进。

  • 另外,可读的源代码呢? 我知道很多公司宁愿不把他们的代码作为“种类”的开源代码。 个人而言,如果我怀疑某些东西有腥意或想从中学习,我很高兴能够阅读这个源文件。 hooray的源代码!

确实。 Silverlight实际上就是这样 – 一个基于.Net的虚拟机的客户端。

你的推理有一些错误。

  1. 标准浏览器中的标准虚拟机永远不会是标准的。 我们有4个浏览器,IE在“标准”方面有利益冲突。 其他三个正在快速发展,但新技术的采用速度缓慢。 关于手机上的浏览器,小设备,…

  2. JS在不同浏览器中的集成和过去的历史导致你低估了JS的能力。 你承诺一个标准,但不赞成JS,因为标准在最初几年没有实现。

  3. 正如其他人所说,JS和AIR / .NET / …不一样。 JS在其目前的化身完美符合其目标。

从长远来看,Perl和Ruby可以很好地取代javascript。 然而,这些语言的采用是缓慢的,据知他们将永远不会接pipeJS。

快速更新这个老问题。

所有确认“网页将包含字节码而不是像JavaScript这样的更高级语言”的人都不会发生“。

W3C于2015年6月宣布了WebAssembly

一个新的便携式,大小和加载时间有效的格式适合编译到networking上。

这还是实验性的,但是在Firefox每晚和Chrome Canary中已经有一些原型实现了,已经有一些示范工作了 。

目前,WebAssembly主要是devise用C / C ++编写的

随着WebAssembly的发展,它将支持比C / C ++更多的语言,我们希望其他编译器也会支持它 。

我让你仔细看看这个项目的官方网页 ,真是令人兴奋!

你如何定义最好的? 最适合浏览器,还是最适合开发人员? (加ECMAScript是不同于Javascript,但这是一个技术。)

我发现JavaScript可以同时强大和优雅。 不幸的是,我遇到的大多数开发人员都把它看作是一个必要的邪恶,而不是真正的编程语言

我喜欢的一些function是:

  • 把职能作为一等公民
  • 能够随时添加和删除任何对象的function(没有什么用处,但是当它是令人兴奋的时候)
  • 这是一个dynamic的语言。

这是很有趣的处理,它已经确立。 享受它,因为虽然它可能不是最好的客户端脚本,它肯定是愉快的。

我同意,由于浏览器的不兼容性,在制作dynamic页面时会感到沮丧,但是UI库可以缓解这种情况。 这不应该反对JavaScript本身,而应该是Swing应对Java。

JavaScript是浏览器的标准虚拟机。 例如,OCaml和Haskell现在都有可以输出JavaScript的编译器。 限制不是JavaScript语言,限制是通过JavaScript访问的浏览器对象,访问控制模型用于确保您可以安全地运行JavaScript,而不会影响您的计算机。 目前的访问控制是如此之差,JavaScript只允许非常有限的访问浏览器对象出于安全原因。 Harmony项目正在寻求解决这个问题。

这是一个很酷的想法。 为什么不把它更进一步呢?

  • 用相同的VM语言编写HTMLparsing器和布局引擎(浏览器中所有复杂的位)
  • 将引擎发布到networking上
  • 服务页面,声明使用哪个布局引擎及其URL

然后,我们可以将function添加到浏览器,而无需将新的浏览器推送到每个客户端 – 相关的新位将从Webdynamic加载。 我们还可以发布新版本的HTML,而不需要在浏览器中保持向后兼容性的所有可笑复杂性 – 兼容性是页面作者的责任。 我们也尝试了HTML以外的标记语言。 当然,我们可以将精美的JIT编译器写入引擎,以便您可以使用任何您想要的语言编写脚本。

我会欢迎除JavaScript以外的任何语言尽可能的脚本语言。

什么会很酷是使用其他语言,然后使用Javascript。 Java可能不太适合标签,但像Haskell,Clojure,Scala,Ruby,Groovy等语言将是有益的。

前些时候,我来了一个交叉Rubyscript … http://almaer.com/blog/running-ruby-in-the-browser-via-script-typetextruby和http://code.google.com/p/ruby-在浏览器/
还在试验和进行中,但看起来很有希望。
对于.Net我刚刚发现: http : //www.silverlight.net/learn/dynamic-languages/刚刚find了网站,但看起来也很有趣。 即使从我的苹果Mac 。

不知道上面的工作在为Javascript提供替代方面有多好,但乍一看看起来很酷。 有可能,这将允许用户在浏览器的沙箱内本地使用任何Java或.Net框架。

至于安全性方面,如果语言运行在JVM(或.Net引擎)内部,虚拟机将负责安全性,所以我们不必担心 – 至less不会那么多在浏览器里面。

也许,但要这样做,我们需要让主要的浏览器来支持他们。 IE支持将是最难得到的。 使用JavaScript是因为它是唯一可以依赖的东西。

我曾经谈到ECMAScript等人的绝大多数开发者。 人。 最终承认这个问题不是脚本语言,它暴露的是可笑的HTML DOM。 将DOM和脚本语言混合在一起是ECMAScript常见的痛苦和挫败之源。 此外,不要忘记,IIS可以使用JScript进行服务器端脚本编写,而像Rhino这样的东西允许您在ECMAScript中构build独立的应用程序。 尝试使用ECMAScript在其中一个环境中工作一段时间,然后查看您的意见是否发生变化。

这种绝望已经有一段时间了。 我build议你编辑这个包含或重新发布具体问题。 你可能会惊喜于你所得到的一些解脱。

一个旧的网站,但仍然是一个很好的开始: 道格拉斯克罗克福德的网站 。

那么,我们已经有了VBScript,不是吗? 等等,只有IE支持它!
同样的你对VM的好主意。 如果我使用Lua编写页面脚本,而浏览器没有parsing器将其转换为字节码呢? 当然,我们可以想象一个脚本标签接受一个字节码文件,甚至会很有效率。
但经验表明,很难为networking带来新的东西:采取像这样的激进的新变化需要几年的时间。 有多less浏览器支持SVG或CSS3?

除此之外,我没有看到你在JS中发现“脏”的东西。 如果业余爱好者编码,可能会变得丑陋,传播在别处抄袭的坏习惯,但是大师们表示它也可以是一种优雅的语言。 有点像Perl:经常看起来像一个混淆的语言,但可以做到完全可读。

看看这个http://www.visitmix.com/Labs/Gestalt/ – 让你使用python或ruby,只要用户安装了silverlight。

这个问题问得好。

这不仅仅是在JS中的问题,因为在JS中开发更大的程序缺乏良好的免费IDE。 我知道只有一个是免费的:Eclipse。 另一个好的是微软的Visual Studio,但不是免费的。

为什么它是免费的? 如果networking浏览器供应商想要用在线应用程序来取代桌面应用程序(他们想要),那么他们必须给我们,程序员,好的开发工具。 使用简单的文本编辑器,JSLint和内置的Google Chromedebugging器无法制作50,000行JavaScript。 除非你是一个macohist。

当Borland在1987年为Turbo Pascal 4.0制作IDE时,这是一场编程革命。 24年过去了。 可耻的是,在2011年,许多程序员仍然不使用代码完成,语法检查和适当的debugging器。 可能是因为有那么几个好的IDE。

如果网页浏览器供应商希望我们能够与Windows,Linux,MacOS,iOS,Symbian等打击应用,那么为程序员制作适当的(免费)工具是符合networking浏览器供应商的利益的。

实际上,JavaScript是任何浏览器长期使用的唯一语言,所以虽然使用其他语言会很好,但是我不能看到它发生。

你所说的这个“标准化的虚拟机”将是非常大的,需要被所有主stream浏览器采用,而且大多数网站都会继续使用Javascript,因为它比许多其他浏览器更适合网站。

您必须在此虚拟机中对每种编程语言进行沙箱处理,并减less每种语言对系统的访问量,这就需要对语言进行大量更改,并删除或重新实现许多function。 而Javascript已经有这个想法,并已经做了很长一段时间。

也许你正在寻找Google的Native Client。

从某种意义上说,在浏览器中使用更具performance力的语言(如Javascript),而不是像Java字节码这样更通用的语言,意味着更开放的networking。

我觉得这不是那么容易的问题。 我们可以说我们被JS困住了,但是对于jQuery,Prototype,scriptaculous,MooTools以及所有梦幻般的库来说真的太糟糕了吗?

请记住,JS是轻量级的 ,V8,TraceMonkey,SquirrelFish更是如此 – 在现代浏览器中使用了新的Javascript引擎。

certificate了 – 是的,我们知道它有问题,但是我们有很多这样的问题,比如早期的安全问题。 成像允许您的浏览器运行Ruby代码,或其他任何东西。 安全沙箱将不得不从头开始。 你知道吗? Python人已经失败了两次。

我觉得Javascript会随着时间的推移而被修改和改进 ,就像HTML和CSS一样。 这个过程可能很漫长,但在这个世界上并非一切皆有可能。

我不认为你“理解JavaScript是我们现在必须合作的实用问题”。 其实这是非常强大的语言。 你已经在浏览器中使用Java applet多年了,现在它在哪里?

无论如何,你不需要“弄脏”在客户端上工作。 例如,尝试GWT。

… 你意思是…

Java和Java小程序Flash和Adobe AIR等。

一般来说,任何RIA框架都可以满足您的需求; 但是对于每一个人来说,使用它是有代价的(例如,运行时可以在浏览器中使用,或者/和专有的或/和less于纯桌面的选项) http://en.wikipedia.org/wiki/List_of_rich_internet_application_frameworks

对于用任何非web语言开发Web,你已经GWT:开发Java,编译为Javascript

因为它们都有字节码解释器的VM,字节码也都不一样。 (Chakra(IE),Firefox(SpiderMonkey),Safari(SquirrelFish),Opera(Carakan)。

对不起,我认为Chrome(V8)编译为IA32机器码。

国际海事组织,JavaScript的语言,是不是问题。 JavaScript实际上是一个很有performance力和强大的语言。 我认为这是一个糟糕的代表,因为它没有传统的面向对象的function,但对于我来说,我越是使用原型槽,我就越喜欢它。

我看到的问题是我们不得不在networking上支持的众多浏览器中的片状和不一致的实现。 像jQuery这样的JavaScript库可以大大减轻这种肮脏的感觉。

JavaScript是您唯一可用的本地,标准选项。 如果你想要大量的function,抓住jQuery,但是如果你需要做更多的事情,可以考虑为Firefox编写一个插件吗? 或IE等类似