为什么网站没有其他客户端脚本语言?[关闭]


35

为什么今天的浏览器仅支持JavaScript和某些VBScript?我知道JavaScript很好,而且一切都很好,但是使用其他编程语言是否可以帮助促进不同的开发风格呢?


1
请参阅有关堆栈溢出的问题:stackoverflow.com/questions/2872037/…–
Corey

1
您的问题恰恰就是Google为什么要制作GWT的原因
2011年

1
我相信DOM API的全部目的是提供对多种语言的支持。事实是,JS实际上非常适合应对挑战。它像没有人的业务一样规范化,一流的功能在事件驱动的范例中非常庞大。真正的原因是,没有人愿意让MS做出这个决定,也没有人提出比JS更好的决定。另外,Java Applet确实非常la脚。
埃里克·雷彭

Answers:


33

无需为多种语言添加支持,一种解决方案是对可以由语言实现者使用的通用字节码进行标准化。但是目前尚无此计划(建议这样做)。

语言也可以在Javascript之上实现。JavaScript足够好,可以在其之上实现其他语言。并且已经有很多例子。


3
+1-指出JavaScript是一种功能强大的语言,可以用作其他语言的抽象。编写运行客户端C ++或Java的Firefox扩展将是一个有趣的项目! <script type="text/cpp" src="test.cpp"></script>
jmort253

2
@ jmort253,看看本地客户端。
dan_waterworth 2011年

本地客户端绝对很有趣,但是除非Mozilla也采用它,否则不会有任何吸引力。最后我检查了他们还没有准备好接受它。
nkassis'2

1
我在几年前找到了Gestalt:gestalt.codeplex.com, 这是在Javascript之上构建其他脚本语言的一个很好的例子。
Jim Schubert

2
另一个例子:Google Web Toolkit?Java编译为JavaScript
MarkJ 2011年

21

JavaScript是事实上的标准,自1996年以来就已经存在。仅仅因为没有竞争而成为标准并不完全公平,但是我没有听到很多关于为什么不包括另一种语言的抱怨。

添加另一种“标准”语言会引发各种有趣的小问题。

  • 他们将如何与其他语言一起使用?
  • 可以共享DOM吗?
  • 两种语言编写的脚本仍然可以使用吗?
  • 将库移植到两者

8
实际上,我认为JavaScript是Mozilla的Gecko中使用的语言。在IE中,我们有JScript。大多数其他浏览器都使用或多或少遵循ECMAScript规范的内容。为了简便起见,所有这些语言都称为“ JavaScript”,但实际上它们确实有所不同。
Mchl 2011年

1
您可以使用多种语言生成相同的字节码。看一下JVM – Groovy,Java,Scala,Clojure,jRuby可以直接编译为JVM字节码。这样,它们将共享相同的DOM API,并且可以互操作。尽管由于对JavaScript VM进行了解释,所以它难以实现成指数的增长。
大卫·谢尔盖

21

考虑一下仅支持javascript的浏览器之间的不一致。现在考虑如果有更多的语言会怎么样。


5
是的,它已经在那里,客户端VBScript ...呃,发抖。
ocodo 2011年

1
+1我想如果我们为每个主要浏览器及其版本记忆一些其他语言的子集,我们的头脑就会爆炸。好答案。
jmort253 2011年

4
从一开始,这可能就是挑剔的事,但是……浏览器对JavaScript [ECMAScript] 的支持实际上一直非常一致。不一致的是它们对DOM(和相关方法)的实现。从实际(和历史)的角度来看,很难将两者分开-因为JS的唯一真正用途是在浏览器中操作DOM-但是随着服务器端JS(诸如NodeJS之类)的兴起,实际上,这确实成为了一个重要的区别。
josh3736 2011年

本来打算将其写成答案,但互联网有足够的标准没有得到遵循或支持。我们所拥有的混乱局面几乎可以奏效,这真是一个奇迹。
Ryathal 2011年

1
乔希是对的。在这里,您可以插入各个浏览器的烦人想法,即事物应该如何呈现和被JS访问,这些东西变得很丑陋,但IE最终至少要解决这方面长期存在的专有API问题(即使它继续由于MS决定将其浏览器链接到其文件导航器-jackasses,因此几乎在所有方面都落后于最新版本。
Erik Reppen 2013年

6

浏览器必须标准化,以便您开发的内容可在所有浏览器上的任何地方使用。

如果要使用多种语言,则必须确保它们的表现都非常相似。如果您是网络开发人员,并且可以选择某些位置可能不支持的语言,那么这将是另一个麻烦。

Javascript是一种非常灵活的语言,它势在必行,它是功能性的,可以是OOP(遵循原型的方式),并且可以对其进行解释。现在有了像Chrome这样的不错的引擎,它有能力完成一些出色的工作。额外的语言只会使事情回到这里,仅查看VBScript,IE,因此用它编写的任何内容都将绑定到特定的浏览器和平台上,成为噩梦。


2
这里的重点是“使用像Chrome中一样好的引擎”。轻描淡写地做任何事情甚至都会导致IE8断腿,而最新版本的Firefox和Chrome自从我一直使用它(这就是我改用事实的原因)以来就一直在跳动而不会错过任何节奏。
马修·沙利

1
@Matthew Scharley:IE通常很慢,实际上每个版本似乎都会变得更糟。他们需要提高自己的水平,否则他们将被淘汰。IE拥有任何保留权的唯一原因是因为包含OS,现在他们不得不在首次使用时放一个选择器,而这个选择器已经下降了很多。
2011年

“可以是OOP” ... OOP!继承不是定义OOP的原因。对象是。
KaptajnKold 2011年

@KaptajnKold:令人惊讶的是,这是学术界中一些辩论的问题。我同意JS具有OOP的能力,因为它具有对象,但是某些对象并不会总是过度使用它们。原型系统与通常的OOP风格也有很大不同,这进一步将其从“ OOP语言”的标准定义中删除。与大多数语言一样,这取决于您的使用方式-当我使用它时,它就是OOP。
2011年

3

供应商喜欢构建笨拙的浏览器插件(Java,Flash,Silverlight等),而不是将它们构建到浏览器中。这可确保跨平台的一致性。


好吧,与保证跨平台一致性无关,它与保证控制无关。正如您控制插件一样,您无需回答任何其他人。
2011年

与快速运行肮脏的javascript相比,“笨拙”的插件要好得多。我以前对整个浏览器插件下载感到很沮丧,但肯定比“通用实现的javascript”开放。
Milind R 2014年

2

原因之一是,不同的浏览器供应商几乎不可能就标准的Javascript实现达成共识,并且至少从Web语言的角度来看,Java一直存在。因此,大多数人正确地认为,将另一种客户端语言引入生态系统并让所有供应商支持它几乎是不可能的,并且大多数有可能实现这种语言的人已经参与了Javascript标准化问题,我认为这要好得多。利用他们的时间。


我要说的差不多。客户端和服务器端语言之间的重要区别(在此讨论中)是浏览器必须实现客户端语言。
2011年

2

此处有几条回应声称支持多种语言会使Web浏览器的构建者非常讨厌确保它们与所有语言兼容。对我来说,这似乎是不正确的。

例如,Java是定义非常明确的标准。本质上,您所需要做的就是将浏览器DOM公开为Java API,并在Web浏览器中运行Java虚拟机(JVM)。您可以指定脚本代码要么以已编译和签名的JAR文件的形式交付,要么以JavaScript源代码的形式交付。如果浏览器遇到JavaScript,则可以通过专用的解释器(如今天)或通过JVM上的Rhino来运行它。如果遇到jar文件,它将创建一个新的类加载器和安全沙箱,将Java字节码加载到内存中并执行它。这将与现有网页完全向后兼容,并使浏览器可以一键支持在JVM上运行的多种语言。

其他优点:

  1. 十年来的性能改进使JVM受益匪浅。现在它非常快速,稳定和成熟。我敢打赌,与解释型javascript相比,您会发现性能有了很大的提高。
  2. 随着客户端应用程序变得越来越大和越来越复杂,诸如Java和Scala之类的结构化,类型化语言的好处也越来越多。
  3. 您将可以通过Scala访问真正的多线程,Scala是为多核计算而优化的集合库。
  4. 您可以在浏览器中使用数千种开源Java库中的任何一种。
  5. 通过像openGL这样的库,浏览器可以提供对高级图形和图形卡计算功能的访问。
  6. 如果您在客户端和服务器端运行了Java,则可以通过高度压缩的二进制对象图序列化=更快地加载和执行网页,从客户端-服务器通信中进一步受益。

1
您已经可以运行JVM代码。它被称为Java小程序
Raynos

1

我相信JavaScript作为Web的标准语言将获得更大的发展。我们看到服务器端JavaScript的兴起。以下是此功能强大的语言在服务器上的一些实现示例:

  • POW Web服务器SJS - POW Web服务器的服务器端JavaScript,可作为Firefox扩展或XULRunner应用程序运行。SJS与Apache中的PHP扮演着相似的角色,因为它可以连接到数据库并生成客户端内容。

  • NodeJS-使用基于事件的模型的服务器端JavaScript。它是使用Google的V8 JavaScript Engine构建的。NodeJS被宣传为用于构建可扩展网络程序的工具。“ Hello World” Web服务器只能用6个短行编写!

  • Jaxer-一个JavaScript服务器,将所有脚本块解释runat="server"为服务器端JavaScript。整个Web应用程序都可以用JavaScript编写。

  • Rhino-Java的JavaScript -Mozilla创建了在Java上运行的服务器端JavaScript实现。从本质上讲,这与Querces PHP for Java,Jython,JRuby以及在JVM上运行的其他语言的许多抽象概念类似。Rhino通常用于将JavaScript嵌入Java中,以为最终用户提供脚本工具,但是它也可以用于将客户端代码移至服务器,而无需用另一种语言重写业务逻辑!

  • JQuery Claypool-使用服务器上JQuery的功能的服务器端JavaScript框架。很酷!它是使用浏览器的EnvJs服务器端JavaScript实现开发的。

  • EnvJs-基于Rhino的无头浏览器。

这些实现和框架中的许多表明,JavaScript正在成为Web开发中的强大力量,社区领导者已经开始将JavaScript移至服务器。JavaScript是一种功能非常强大的功能编程语言,随着时间的流逝,我觉得我们会看到它的发展。

总而言之,将其他语言移植到浏览器似乎是一个矛盾,相反,我们可以将一种浏览器语言移植到服务器并以更统一的方式弥合这种差距。


+1指出JavaScript不限于浏览器
Gary Rowe

1

有一些工具示例可以将其他语言编译为javascript,包括Haskel,Lisp和Python(可能是其他语言)。因此,如果您想使用其中一种语言,则可以这样做。

而且我想我大学的一位教授用Javascript编写了一个方案实现。因此,如果您喜欢计划,您也可以这样做。


0

人们通过两种方式解决了缺乏内置多样性的问题:使用诸如Flash或Java Applet之类的插件,以及构建使用javascript作为其“机器代码”的层,例如jquery或Google Web Toolkit。如果有一种足够流行的新开发风格,人们将找到一种方法将其引入。

请注意,如果您使用JavaScript制作.net运行时,并且它变得越来越流行,则某些圈子将永远在互联网上诅咒您的名字。


责怪webforms和IE。通过用热门扑克戳戳Web UI开发人员,可以减少他们的烦恼。对品牌联想不利。
Erik Reppen 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.