解释语言是否需要操作系统才能运行?

时间:2019-02-26 15:19:03

标签: operating-system embedded interpreter compiled

诸如Java和Python之类的解释语言是否需要操作系统才能工作?

例如,在裸机ARM微控制器上,是否可以安装解释器,以使我们可以使诸如C之类的编译代码与诸如Python之类的解释性代码协同工作,还是需要一个操作系统来支持这一点?

4 个答案:

答案 0 :(得分:3)

Java需要VM-虚拟机。它不会被解释,但是会执行byte code。解释将意味着像BASIC这样在运行时获取源代码。

当Java在2000年左右成为新事物并令人兴奋时,每个人都认为它将取代C ++,这将是下一代的通用语言。语法非常简洁,它是“纯OO”,而不是“肮脏的混合体”。

这是当时的主要流行语。学校停止教授C和C ++。 MCU制造商开始使用硬件中的Java VM制造芯片。微软将自己的Java称为“标准”。每个人都对Java炒作很高。

然后,随着2002年有关Internet的炒作全面瓦解,Java炒作也随之而来。在随后的清醒缠身中,人们开始意识到字节码,VM和垃圾回收之类的东西可能不属于裸机系统。

他们回到使用编译的C进行与硬件相关的编程。或实际上,它们从未停止过,因为Java从未真正做到过,除了一些奇特的异国情调的体系结构。

Java仅在适用的领域(即Web,桌面和移动开发)中使用。因此,当智能手机的炒作在2010年左右爆发时,它又进入了第二个黄金时代。

答案 1 :(得分:3)

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

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

有一些解释器,用于在裸机微控制器上运行的JavaScript和Python的缩减子集。我不确定完整的实现,但是即使没有明确实现,在技术上也有可能获得足够的运行时支持。为了完全支持这些语言中的某些语言以及开发人员可能期望的所有标准库和第三方库以及框架,可能需要大量的运行时支持和资源,以使其更易于部署和操作系统,因此资源受限系统的实现是通常是子集或具有受限制的库。

答案 2 :(得分:2)

不。尽管某些8位计算机没有任何合理的类似于现代操作系统的语言,但它们已经在ROM中解释了语言。 Apple 2是一个示例。您可以在没有任何磁盘或磁带的情况下引导系统,它会直接转到BASIC提示符,您可以在其中编写基本(无双关语)程序。

请注意,当谈到这些日子时,操作系统的含义有些模糊-这些8位计算机的确具有一定级别的 firmware ,并且该固件确实提供了一些OS类型的功能,例如访问基本外围设备。如今,我们现在所知道的操作系统通常被称为“ DOS”-一种 Disk 操作系统。 MS-DOS就是其中之一,还有Apple的ProDOS。这些DOS逐渐发展成为我们现代的操作系统(例如Windows 95基于MS-DOS,而现代Windows版本则来自一个单独的分支,该分支在很大程度上由更现代的技术实现了) ,因此可以说他们的祖先离我们现在所说的操作系统最近。

但是什么是口译员,而是一个软件?

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

此模型有点简化了吗?当然。区别在于程度而不是性质。添加非常基本的用户输入和输出功能(例如TTY),您就有基础来实现语言的全部或几乎全部基本功能,例如Java字节码,Python或BASIC。您可能会缺少的主要内容是库,它不依赖屏幕操作,多处理和联网等内容,但是您也可以随时间处理它们。

答案 3 :(得分:2)

不。例如,参见picoJava,它是本机运行Java的几种解决方案之一。您比在CPU上运行字节码更贴近裸机。