【问题标题】:Using programming languages on top of different OSs [closed]在不同操作系统之上使用编程语言[关闭]
【发布时间】:2015-07-24 03:46:06
【问题描述】:

有人可以帮我“总结”我对各种编程语言在不同操作系统上的位置的理解吗?从底层开始——基本的金属计算机只能理解机器代码或汇编程序。这意味着操作系统,比方说 Linux,是用 C 编写并编译为机器代码的,对吧?还是汇编程序?

如果你有用 C 编写的 Linux,是否意味着默认情况下 C 编译器已经存在,我可以用 C 编写任何简单的程序,将其放置到任何文件夹并从命令行运行它? 我看到一些 Linux 发行版(如 Ubuntu)带有 /perl 和 /python 文件夹。我假设这些是其他高级语言的编译器或解释器,并作为这些特定操作系统发行版的附加组件。如果我想运行 Java,我会添加 Java JVM 等等。 但是 C 是 Linux 的默认语言?还是 C++ 也可以开箱即用?

然后,如果我查看 Wikipedia,我会看到以下写成

  • Windows:C、C++、汇编
  • OS X:C、C++、目标 C
  • iOS:C、C++、Objective C、Swift
  • Android:C、C++、Java

这是否意味着任何用各自语言为每个操作系统编写的“Hello World”程序都可以开箱即用?

理论上,我可以用 Swift for iOS 编写硬件驱动程序吗?还是有些语言用于低级任务而有些用于最终用户应用?

我可以用 C 语言编写程序并在 iOS 和 Android 上运行吗?还是我仅限于 Objective-C/Swift/Java?

要在上面运行任何其他语言,我需要添加相应的附加软件,例如编译器/解释器/VM。对吗?

【问题讨论】:

  • 没有先编译的 C 代码不会运行。即使汇编器是一个简单的编译器,也不能直接运行包含汇编程序的文本文件。编译器未内置在操作系统中。将代码编译为机器码后,机器最初使用的语言无关紧要。
  • 这个问题基本意思是:How does programming languages, compilers, and operating system work?
  • CPU 只处理二进制指令代码和数据。就是这样。

标签: android ios linux windows operating-system


【解决方案1】:

如果你的 Linux 是用 C 写的,是不是意味着默认已经有 C 编译器了

不,您需要安装 GCC 或其他 C 编译器。这完全取决于您使用的是哪个 Linux 发行版。

Windows(部分用 C 编写)和所有其他操作系统也是如此,如果没有安装编译器,您将无法编译 C 程序。

但是 C 是 Linux 的默认语言?还是 C++ 也可以开箱即用?

Linux 没有默认语言,内核是用 C 和汇编语言编写的。编译后的二进制文件为应用程序/服务在其上运行提供了一个接口。您可以将其视为硬件的抽象。更具体地说:默认语言的概念不存在。只要程序编译为操作系统可以执行的兼容二进制文件,程序就会运行。

这是否意味着任何用各自语言为每个操作系统编写的“Hello World”程序都可以立即使用?

(假设“程序编写”是指代码)

取决于你用哪种语言编写你的 Hello world 程序。对于像 C/C++ 这样的编译语言,它是一次编写到处编译,这意味着代码是可移植,但需要在目标平台上编译为二进制才能执行。 (仅当您使代码可移植时才适用)。

对于解释型(sorta*) 语言,例如Java,代码首先被编译成字节码,然后在目标平台上的VM 中执行。

一般来说,你需要设置一个开发环境来编译代码。这意味着要安装 SDK、编译器和工具。

理论上,我可以用 Swift for iOS 编写硬件驱动程序吗?还是有些语言用于低级任务而有些用于最终用户应用?

取决于操作系统和设计。对于 iOS 和 Swift,Swift 使用 Objective C 进行插值。这意味着您可以从 Swift 调用 Objective C 方法。所以你可以用 Swift 编写驱动程序。

现在,托管语言(如 C# 和 Java)可能不适合编写设备驱动程序,因为它缺乏对硬件的低级访问。在 C 等 非托管 语言中,内存和 BIOS 向程序员公开,使驱动程序开发变得简单。

我可以用 C 语言编写程序并在 iOS 和 Android 上运行吗?还是我仅限于 Objective-C/Swift/Java?

这取决于平台和/或应用程序二进制接口。

在 Android 中,您可以使用 NDK 使用 C/C++ 进行编程,也可以只使用 Java。在 iOS 中,您没有太多选择。 Swift 和 Objective C/C/C++ 是您唯一的选择。(除非您选择第三方解决方案,例如 RoboVM)

要在上面运行任何其他语言,我需要添加相应的附加软件,例如编译器/解释器/VM。对吗?

正确。

*注意:Java 本身不被解释。编译后的字节码是。这类似于 C#。真正的解释型语言应该是 JavaScript。

【讨论】:

  • Swift 无论如何都不是一种解释型语言,调用 Java 也有点错误,因为它是第一次编译的,通常是 JIT 化的,而不是解释型的。此外,语言并不缺乏对硬件的访问,它是定义它的环境。有一个用 C# 编写的操作系统。我还用 C 和 C++ 为 iOS 编写代码,所以 Swift 和 Obj-C 绝对不是唯一的选择。
【解决方案2】:

所有用 C、C++ 和汇编语言编写的东西首先都会变成机器代码。所有在硬件上实际执行的软件都是机器码。

您的操作系统由唯一允许执行某些操作(主要与控制硬件相关)的机器代码组成。这允许操作系统充当硬件的一种看门人。常规程序通过调用操作系统公开的函数来访问硬件。

操作系统所用的语言与在该操作系统上运行的程序无关。基本上,任何将您的源代码转换为机器代码的工具(编译器、汇编器等)都关心语言,但之后它的二进制文件就一直下降。

【讨论】:

  • 除非你用 LOGO 写你的程序...然后它的乌龟一路向下。 :-)
猜你喜欢
  • 2013-11-18
  • 2020-07-25
  • 1970-01-01
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 1970-01-01
  • 2017-12-25
相关资源
最近更新 更多