2015-05-13 72 views
4

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

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

然后,如果我查维基百科,我看到下面写在

  • 的Windows:C,C++,汇编
  • OS X:C,C++,Objective C的
  • iOS版:C ,C++,Objective C中,斯威夫特
  • 安卓:C,C++,Java的

这是否意味着任何 “Hello World” 程序用每种操作系统的相应语言编写的代码都会用完?

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

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

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

+1

没有首先编译就没有C代码运行。即使汇编器是一个简单的编译器,你也不能直接运行包含汇编程序的文本文件。编译器没有内置到OS中。在代码被编译成机器码之后,它对机器无关紧要。 – Thilo

+1

这个问题基本上意味着:'编程语言,编译器和操作系统是如何工作的?' – tom91136

+0

CPU只处理二进制文件指令代码和数据。而已。 –

回答

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中,您没有太多选择。与目标C/C/C++是你唯一的选择沿斯威夫特(除非你去的第三方解决方案,例如RoboVM)

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

正确。

*注意:Java本身没有解释。编译的字节码是。这与C#类似。一个真正的解释语言就像JavaScript一样。

+1

Swift不是以任何方式解释的语言,并且调用Java也是有点错误的,因为它首先被编译并且通常被打乱并且不被解释。此外,*语言*不缺少硬件,它是定义它的环境。有一个用C#编写的操作系统。我还使用C和C++编写iOS代码,因此Swift和Obj-C绝对不是唯一的选择。 –

+0

更正了错误。 – tom91136

1

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

您的操作系统是由被允许执行某些操作的唯一机器码(大多与控制硬件)。这允许操作系统充当硬件的一种看门人。普通程序通过调用OS公开的函数来访问硬件。

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

+0

除非你在LOGO中编写你的程序,否则它的海龟会一直向下。 :-) –

相关问题