首页 / 知识

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

2023-04-16 18:42:00

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

Why JavaScript rather than a standard browser virtual machine?

通过浏览器中托管的标准化虚拟机来支持一组语言(Java,Python,Ruby等)不是有意义的,而不是要求使用专门的语言-实际上,是专门的范例-仅用于客户端脚本吗?

为澄清建议,网页将包含字节码,而不是JavaScript等任何高级语言。

我了解实用主义的现实,即由于进化的原因,JavaScript就是我们现在必须使用的,但是我正在考虑更多的长期性。关于向后兼容性,没有理由在一段时间内不能同时支持嵌入式JavaScript,当然,JavaScript可能是浏览器虚拟机支持的语言之一。


是的,是的。当然,如果我们有一台时间机器,那么回头并确保以不同的方式设计许多Javascript功能将是一个主要的消遣(那是要确保设计IE的CSS引擎的人员永远不会进入IT领域)。但这是不会发生的,我们现在坚持使用它。

我怀疑,随着时间的流逝,它将成为Web的"机器语言",其他更好设计的语言和API会被编译成它(并迎合不同的运行时引擎的缺点)。

我不认为,这些"设计更好的语言"中的任何一种都将是Java,Python或Ruby。尽管可以在其他地方使用Javascript,但它还是Web应用程序脚本语言。在这种用例的情况下,我们可以做得比任何一种语言都要好。


我认为JavaScript是一种不错的语言,但是在开发客户端Web应用程序时我希望可以选择。由于遗留原因,我们只能使用JavaScript,但是有些项目和想法正在寻求改变这种情况:

  • Google Native Client:在浏览器中运行本机代码的技术。
  • Emscripten:将LLVM字节码编译器转换为javascript。允许LLVM语言在浏览器中运行。
  • 想法:Mono的创建者在浏览器中使用.NET CLI:http://tirania.org/blog/archive/2010/May-03.html
  • 我认为我们将长期使用JavaScript,但是迟早会有所改变。有很多开发人员愿意在浏览器中使用其他语言。


    n


    在Windows上,可以向脚本宿主注册其他语言,并将其提供给IE使用。例如,开箱即用地支持VBScript(尽管它从未获得太多普及,因为它在大多数情况下甚至比JavaScript还要差)。

    Python win32扩展允许人们很容易地向IE这样添加Python,但这并不是一个好主意,因为Python很难沙箱化:许多语言功能都暴露了足够多的实现钩子,以允许所谓的受限应用程序爆发。

    通常的问题是,您向诸如浏览器之类的面向网络的应用程序添加的复杂性越高,出现安全问题的可能性就越大。一堆新的语言肯定会适合这种描述,而这些新语言也仍在快速发展。

    JavaScript是一种丑陋的语言,但是通过谨慎使用功能的选择性子集以及适当对象库的支持,通常可以使JavaScript具有相当的容忍性。似乎对JavaScript进行了渐进的,实用的添加,这是Web脚本可能继续发展的唯一方法。


    我肯定会欢迎浏览器中使用独立于语言的标准VM(我希望使用静态类型的语言进行编码)。

    (从技术上讲)这是逐渐可行的:第一个主要的浏览器支持它,并且服务器有可能在当前请求来自兼容浏览器的情况下发送字节码,或者将代码转换为JavaScript并发送纯文本JavaScript。

    已经存在一些可编译为JavaScript的实验语言,但是拥有定义的VM(可能)可以提高性能。

    我承认,"标准"部分会非常棘手。同样,与库有关的语言功能(例如静态类型与动态类型)之间也会存在冲突(假设新事物将使用相同的库)。因此,我认为这不会很快发生。


    如果您觉得自己弄脏了双手,则说明您要么被洗脑,要么仍然感觉到" DHTML年"的后遗症。 JavaScript非常强大,并且非常适合其目的,即编写交互性客户端脚本。这就是JavaScript 2.0收到如此糟糕的说唱的原因。我的意思是,为什么软件包,接口,类等显然是服务器端语言的方面。 JavaScript可以很好地用作基于原型的语言,而无需全面地面向对象。

    如果由于服务器端和客户端之间的通信不畅而导致应用程序缺乏无缝性,那么您可能需要重新考虑如何构造应用程序。我曾经使用过非常强大的网站和Web应用程序,但我从未说过:"嗯,我真的希望JavaScript可以做到(xyz)。"如果可以做到,那就不是JavaScript了,而是ActionScript或AIR或Silverlight。我不需要,大多数开发人员也不需要。那些是很好的技术,但是他们试图解决技术问题,而不是解决问题。


    n


    n


    尽管Javascript是唯一可以直接从其控制页面的受支持的脚本语言,但Flash对于较大的程序具有一些非常好的功能。最近,它具有JIT,还可以即时生成字节码(请查看运行时表达式评估以获取示例,在该示例中,他们使用Flash一直将用户输入的数学表达式编译为本机二进制)。 Haxe语言为您提供带有推断的静态类型以及字节码生成功能,您可以实现几乎所有选择的运行时系统。


    这个问题经常出现。我对此的立场是:

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

    对不起,什么?让我解释一下:

    广告A

    VM不仅是某种通用的神奇设备。大多数VM已针对特定语言和特定语言功能进行了优化。以JRE / Java(或LLVM)为例:针对静态类型进行了优化,当实现动态类型或其他Java首先不支持的功能时,肯定存在问题和弊端。

    因此,"通用多用途VM"支持许多语言功能(尾调用优化,静态


    您的推理中有一些错误。

  • 标准浏览器中的标准虚拟机将不再是标准的。我们有4个浏览器,并且IE在"标准"方面有不同的利益。其他三个正在快速发展,但是新技术的采用速度很慢。手机,小型设备,...上的浏览器呢...

  • JS在不同浏览器中的集成及其过去的历史使您低估了JS的功能。您Promise使用标准,但是不赞成JS,因为标准在早期没有奏效。

  • 正如其他人所讲,JS与AIR / .NET / ...等并非相同。 JS的当前版本完全符合其目标。

  • 从长远来看,Perl和Ruby可以很好地替代javascript。但是这些语言的采用速度很慢,并且众所周知它们永远不会取代JS。


    n


    n


    n


    您如何定义最佳?最适合浏览器,还是最适合开发人员? (加上ECMAScript与Javascript不同,但这是一个技术性问题。)

    我发现JavaScript可以同时强大而优雅。不幸的是,我遇到的大多数开发人员都将其视为一种必要的邪恶,而不是一种真正的编程语言。

    我喜欢的一些功能是:

    • 将职能视为头等公民
    • 能够随时在任何对象上添加和删除功能(虽然没什么用,但在使用时却让人大跌眼镜)
    • 它是一种动态语言。

    处理起来很有趣,而且很成熟。随时随地享受它,因为尽管它可能不是客户端脚本的"最佳"方法,但它肯定是令人愉快的。

    我确实同意,由于浏览器不兼容,在制作动态页面时令人沮丧,但是可以通过UI库来缓解。应该不再对JavaScript本身保持这种状态,而应该对Java保持Swing的状态。


    n


    n


    可能是,但是要做到这一点,我们需要让主要的浏览器来支持它们。 IE支持将是最难获得的。使用JavaScript是因为它是您唯一可以依靠的。


    n


    好吧,我们已经有了VBScript,不是吗?等一下,只有IE支持它!
    同样,您对VM的好主意也是如此。如果我使用Lua编写页面脚本,而您的浏览器没有解析器将其转换为字节码怎么办?当然,我们可以想象一个脚本标签接受一个字节码文件,甚至会非常有效。
    但是经验表明,很难将新的东西带到Web:采用这种根本的新变化需要花费数年的时间。多少浏览器支持SVG或CSS3?

    此外,我看不到您在JS中发现"脏"的东西。如果由业余人员编写代码,传播在其他地方复制的不良做法,可能会很丑陋,但大师们表明,它也可以是一门优雅的语言。有点像Perl:通常看起来像一种混淆的语言,但是可以使其变得完全可读。


    与我交谈过的关于ECMAScript等的绝大多数开发人员。等最后承认问题不是脚本语言,而是它暴露的荒谬的HTML DOM。混淆DOM和脚本语言是导致ECMAScript痛苦和沮丧的常见原因。另外,请不要忘记,IIS可以使用JScript进行服务器端脚本编写,并且Rhino之类的东西使您可以在ECMAScript中构建独立的应用程序。尝试在其中一种环境中使用ECMAScript一段时间,然后查看您的意见是否有变。

    这种绝望已经持续了一段时间。我建议您对其进行编辑,以包括或重新发布特定问题。您可能会对获得的一些救济感到惊喜。

    一个古老的网站,但仍然是一个不错的起点:道格拉斯·克罗克福德(Douglas Crockford)的网站。


    实际上,Java语言是所有浏览器都将长期使用的唯一语言,因此虽然使用其他语言会非常好,但我看不到这种情况。

    您所说的"标准化VM"将非常大,并且需要所有主要浏览器采用,并且大多数站点仍会继续使用Javascript,因为它比许多其他浏览器更适合于网站。

    您将不得不在此VM中沙盒化每种编程语言,并减少每种语言对系统的访问量,这需要对语言进行大量更改并删除或重新实现许多功能。 Javascript已经考虑了这一点,并且已经做了很长时间了。


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


    n


    n


    n


    我不认为您"了解实用的问题,即JavaScript就是我们现在必须使用的东西"。实际上,这是一种非常强大的语言。您的Java小程序已经在浏览器中使用了多年,现在在哪里呢?

    无论如何,您无需"变脏"即可在客户端上工作。例如,尝试GWT。


    我认为这不是一件容易的事。可以说我们被JS束缚了,但是对jQuery,Prototype,scriptaculous,MooTools和所有出色的库来说真的很糟糕吗?

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

    这也被证明-是的,我们知道它有问题,但是我们有很多类似的问题,例如早期的安全问题。允许您的浏览器运行Ruby代码或其他任何东西的映像。必须先完成安全沙箱的检查。你知道吗? Python人员已经两次失败了。

    我认为Javascript将随着时间的流逝而被修改和改进,就像HTML和CSS一样。这个过程可能会很长,但是在这个世界上并非一切皆有可能。


    n


    IMO,JavaScript和语言不是问题。 JavaScript实际上是一种富有表现力且功能强大的语言。我认为它代表不好,因为它没有经典的OO功能,但是对我来说,我越喜欢原型凹槽,我就越喜欢它。

    我所看到的问题是我们被迫在网络上支持的许多浏览器中的不稳定且不一致的实现。像jQuery这样的JavaScript库在减轻这种肮脏的感觉上还有很长的路要走。


    JavaScript是您唯一可用的本机标准选项。如果您需要强大的功能,请使用jQuery,但是如果需要更多功能,可以考虑为Firefox编写插件吗?或类似的IE等。


    那您在浏览器中对所有这些Python和Ruby所做的工作呢?!

    1)。还在编写脚本客户端应用程序吗?好吧,这可以通过JavaScript很好地完成。

    2)。使用套接字编写客户端服务器应用程序?为什么不仅仅在没有浏览器的情况下编写它们?

    3)。编写独立的应用程序?就像现在一样执行。


    虚拟机浏览器语言浏览

    最新内容

    相关内容

    猜你喜欢