解释型语言需要操作系统才能工作吗?

Do interpreted languages need an operating system to work?

Java 和 Python 等解释型语言是否需要操作系统才能运行?

例如,在裸机 ARM 微控制器上,是否可以安装一个解释器,以便我们可以同时使用编译代码(例如 C)和解释代码(例如 Python),或者 OS 需要支持吗?

没有。一些 8 位计算机在 ROM 中解释了语言,尽管没有任何类似于现代操作系统的东西。 Apple 2 就是一个例子。您可以在没有任何磁盘或磁带的情况下启动系统,它会直接进入 BASIC 提示符,您可以在其中编写基本的(没有双关语意)程序。

请注意,现在谈到操作系统时,操作系统这个词有些模糊 - 这些 8 位计算机确实具有某种级别的 固件,并且此固件确实提供了一些OS 类型的功能,例如访问基本外围设备。在那些日子里,我们现在所知道的 OS 通常被称为 "DOS" - Disk 操作系统。 MS-DOS就是其中之一,还有苹果的ProDOS。这些 DOS 的 演变成 我们的现代操作系统(例如 Windows 95 是基于 MS-DOS,而现代 Windows 版本源自一个单独的分支,该分支主要使用更现代的技术重新实现),因此可以声称他们的祖先最接近我们现在所说的 OS.

但是解释器不就是一个软件吗?

从更理论的意义上讲,解释器只是软件——接受输入并产生输出的程序。假设您要实现自定义固态 Turing Machine。在这种情况下,您的 "input" 将是要解释的程序,而 "output" 将是程序的行为。如果 "software" 可以 运行 没有操作系统,那么解释器就可以。

这个模型是不是有点简化了?当然。差异是程度的问题,而不是性质的问题。添加非常基本的用户输入和输出功能(例如 TTY),您就有了实现所有或几乎所有语言基本功能的基础,例如 Java 字节码,Python,或基本的。您可能会缺少的主要内容是库和诸如屏幕操作、多处理和网络之类的东西,但您也可以花时间处理它们。

没有。例如,参见 picoJava,它是 运行 Java 的几种解决方案之一。 CPU.

上的 运行 字节码最接近裸机

Java 需要一个 VM - 虚拟机。它不被解释,而是执行 byte code。解释意味着在 运行 时间内获取源代码,就像 BASIC。

当 Java 在 2000 年前后还是一个令人兴奋的新事物时,每个人都认为它会成为下一个重要的通用语言,取代 C++。语法非常干净,是 "pure OO" 而不是 "filthy hybrid"。

这是当时的主要流行语。学校停止教授 C 和 C++。 MCU 制造商开始在硬件中使用 Java VM 制造芯片。微软自己做了 Java "standard"。每个人都对 Java 炒作感到兴奋。

然后,随着 2002 年整个 Internet 炒作的崩溃,Java 炒作也随之而来。在之后清醒的宿醉中,人们开始意识到像字节码、虚拟机和垃圾收集之类的东西可能不属于裸机系统。

他们又开始使用编译后的 C 来进行硬件相关的编程。或者事实上他们从未停止过,因为 Java 除了一些古怪的异国情调建筑外,从未完全成功。

Java 仅在合适的领域使用,即网络、桌面和移动开发。因此,当智能 phone 炒作在 2010 年左右出现时,它迎来了第二个黄金时代。

当然你可以在裸机上写一个 运行s 的解释器,只是如果平台没有 OS 任何 运行 时间支持语言需求必须是口译员的一部分。在某些情况下,这样的解释器本质上可能是 OS。也就是说,如果它提供operate一个system的服务,它就可以称为操作系统。

它可能不像解释与编译那么简单。 Java 例如 运行 在 虚拟机 上是 "compiled" 到 字节码 。字节码被解释(或在某些情况下即时编译),而不是直接 Java 源代码。在嵌入式系统中,您可能会在目标而不是源上部署交叉编译的字节码。当然,JVM 是为裸机而存在的。一些通过第三方 RTOS 支持多线程,另一些要么内置支持,要么根本不支持线程。

裸机微控制器上有 JavaScript 和 Python 运行 的精简子集的解释器。我不确定完整的实现,但即使没有明确实现,如果有足够的 运行 时间支持,技术上也是可能的。要完全支持其中一些语言以及开发人员可能期望的所有标准和第三方库和框架,可能需要如此多的 运行 时间支持和资源,以便部署更简单 OS , 因此资源受限系统的实现通常是子集或具有受限的库。