为什么JavaScript有时被视为低级语言?

4

这个问题启发。

我经常看到人们将JavaScript称为低级语言,特别是GWT等工具包的用户。

我的问题是:为什么?如果你使用其中一个工具包,你就削弱了JavaScript编程中一些很好的特性:函数作为对象、动态类型等。特别是当它与jQuery或Prototype等流行框架结合使用时。

这就像称C++为低级语言,因为标准库比Java API小。我不是C++程序员,但我非常怀疑每个C++程序员都会编写自己的GUI和网络库。


7
这个不是吗? - Ed S.
@Ed:这并不是通常情况,但这种态度确实存在,并且似乎越来越普遍。 - Macha
9
它从来不是。低级语言意味着接近于机器。JavaScript在任何形式上都不接近机器。低级语言的最佳定义是:“你能写一个完整的操作系统内核吗?没有任何代码和机器之间的桥梁?”如果是,那么这就是一种低级语言。 - Christopher
1
@Christopher:是的,谢谢: )。让我们看看有人如何在JS中处理硬件中断 :-) - Ed S.
3
我怀疑“低级”的概念源于对语言建构方式的误解。有人认为这是一种严格的层次结构,高级语言建立在中级语言之上,中级语言又建立在低级语言之上。但这几乎完全是错误的。假设你从这个角度出发,任何想要通过抽象隐藏的内容都被称作“低级”。因此,这些术语被随意使用,即使是将高级语言翻译成高级语言(如将Java翻译成JavaScript)也会用到这些术语,这是不合适的。 - Shog9
显示剩余2条评论
8个回答

12

7
我认为,“低级”一词更多地涉及到您与硬件层的接近程度。其他语言可以编译成JS这一事实是无意义的。 - Ed S.
1
我认为与其说是“编译到”,不如说是“翻译到”,因为C++以前是被翻译成C的。 - jottos
2
@Nosreda:但是那个浏览器建立在无数层的抽象之上。我不知道,我可以相对地理解你们在说什么,但对我来说,把JS称为低级语言还是挺可笑的。当然,我在一个系统组工作 :) - Ed S.
4
@Ed,我已经编程30年了。 "低级"的含义每年都在上升。 我曾经认为C语言非常慢。 - Nosredna
1
但是JS也可以被编译成其他语言,即.NET字节码。 - Dan Mantyla
显示剩余11条评论

5
回答一个关于“为什么有时会被称为X”的问题,用“它不是X”来回答完全是回避这个问题,不是吗?
对很多人来说,“低级”和“高级”是灵活、抽象的概念,在不同系统中使用时会有不同的应用。对那些不过分沉迷于过去的人来说(有些人认为现代没有低级语言),一种语言的高低通常是指它离目标机器的距离有多近,包括虚拟机,其中浏览器现在是一个虚拟机。对于所有渴望在基础硬件上使用汇编语言的人感到抱歉。
当你将浏览器视为虚拟机时,javascript是最接近(假)硬件的语言。这是许多人称javascript为“低级”的观点。我认为这是一个无意义的区分,人们不应该纠结于什么是低级和高级。

3
很多人这样说是因为JavaScript提供的对象和结构非常简单。要开发任何真正的功能,你必须使用外部库。低级别是个不好的说法,因为它在计算机科学中已经有了一个含义。更好的说法可能是没有内置库。
与Java相比,实际语言真的没做太多事情。尝试创建一个没有ArrayList的数组,或者访问没有IO库的文件系统。大多数语言不仅仅是基础知识,它们还具有额外的功能。
在JavaScript中,我们得到的唯一真正的力量来自于浏览器引入的API,而这些API并不是语言的一部分。像DOM操作和Ajax之类的东西都是由浏览器提供的。
总体来说,可以通过这样概括:对于像Java这样的语言,您可以开始进行一些严肃的工作而无需下载第三方库,但是对于JavaScript,您必须下载一个库或编写自己的库。

1
如果你想要抽象DOM调用,那么库是非常有用的。但是我发现JavaScript足够强大,可以编写小到中型应用程序而无需任何库。能够返回即时创建的对象和数组极大地简化了某些类型的问题。我将一个项目从JavaScript移植到C语言,才意识到JavaScript的强大之处。 - Nosredna
2
DOM本身是第三方库。在我刚才写的内容中,我试图表达的是浏览器中的JavaScript带有第三方库:DOM、BOM和Ajax API。 - pottedmeat

2

这里的“Low”与“第一次世界大战中遭受的伤亡人数很少”以及“低脂冰淇淋热量较低”的句子中的意思相同。当有一个明显的比较点时,它是有意义的,但是在没有上下文的情况下,它只是荒谬的。


1

我不认为JavaScript是一种低级语言。它提供了许多功能和用户体验增强器。也许其他人之所以认为它是低级语言,只是因为用户可以在浏览器选项中关闭它,但实际上它是一种非常强大的语言,在几乎所有类型的浏览器上都可以运行网络...


1

这并不是低级的浏览器编程,它与Scheme或Python等函数式语言相当。

我认为JavaScript的主要缺点是缺乏命名空间或包装和没有线程。


1
缺乏线程不是语言问题,而是实现问题。因此,Gears和HTML5的Web Workers。 - Nosredna
很难把语言与它的运行时分开 - JavaScript 运行时或语言定义中没有线程模型。Scheme 也是如此。另一方面,Python 从头到尾都能做线程。 - jottos
1
没错,但 JavaScript 并不仅存在于浏览器中。 - Nosredna
但你进一步证明了我的观点 - 其他JavaScript定义和实现也没有线程 - 例如ECMAscript或Rhino中的JavaScript。 - jottos
你对Web Workers有什么看法?它们允许你启动在后台并行运行的脚本。 - Nosredna
WebWorkers在单独的进程中运行,这是Gears团队实现的一个巧妙技巧,但绝对不是线程。你基本上需要在它们之间进行IPC通信。 - jottos

1

相比于GWT和类似的工具包,它是低级别的,但在更大的范围内来看,它并不是一种低级语言。它提供的功能非常高级:闭包、动态类型和原型继承只是其高级功能的几个例子。


1
嗯,是的,这就是问题所在:当语言+工具包中不存在这些高级功能时,你如何真正考虑该语言/工具包是否属于更高级别... - Shog9

0

许多人认为它是低级的,他们更喜欢编写Java来生成JavaScript,而不是直接编写JavaScript(即使他们可能不公正地厌恶它)。现在很多人抱怨Java,但尽管缺乏静态类型检查,大多数人可能会认为Ruby和Python在大多数情况下更容易编写(Java是一种相当简单的静态语言-没有大型内置功能集,设计起来要困难得多,而简单的动态语言则相对简单)。

与Java相比,很少有人会将Python或Ruby称为低级语言,如果人们被迫针对Python或Ruby虚拟机进行开发,很难想象Java到Python/Ruby编译器会像GWT一样受欢迎。

总之,JavaScript存在形象问题(有时人们认为随着语言变得更低级或更高级,其难度也会相应增加或减少)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接