在不同操作系统之上使用编程语言

时间:2015-05-13 03:03:41

标签: android ios linux windows operating-system

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

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

然后,如果我查看维基百科,我会看到写的

  • Windows:C,C ++,汇编
  • OS X:C,C ++,Objective C
  • iOS:C,C ++,Objective C,Swift
  • Android:C,C ++,Java

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

理论上,我可以在Swift for iOS中编写硬件驱动程序吗?或者某些语言​​用于低级别任务,有些语言用于最终用户应用程序?

我能用C编写程序并在iOS和Android上运行吗?或者我是否仅限于Objective-C / Swift / Java?

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

2 个答案:

答案 0 :(得分:1)

  

如果您使用C语言编写Linux,那么它是否意味着C编译器默认已存在

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

同样适用于Windows(部分用C语言编写)和所有其他操作系统,您无需安装编译器即可编译C程序。

  

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

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

  

这是否意味着任何" 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?

这取决于平台和/或Application二进制接口。

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

  

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

正确。

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

答案 1 :(得分:1)

用C,C ++和Assembly编写的所有东西都成为机器代码。所有在硬件上实际执行的软件都是机器代码。

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

编写操作系统的语言与在该操作系统上运行的程序无关。基本上,无论什么工具将源代码转换为机器代码(编译器,汇编器等)都关心语言,但在此之后它的二进制文件一直在关注。