2015-05-13 132 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中編寫你的程序,否則它的海龜會一直向下。 :-) –

相關問題