2010-08-12 129 views
30

我聽說過圍繞描述語言而拋出的這些術語,比如C不是低級別的語言,C++是中級別的,Python是高級語言。我知道它必須採用代碼編譯的方式,以及如何編寫代碼。但是我想知道的是將語言定義爲這三類中的一種?這些絕對的類別,還是程序員用來向對方描述語言的一般想法?低,中,高級語言,有什麼區別?

+0

[可能出現[哪些編程語言不被認爲是高級別的]的重複?(http://stackoverflow.com/questions/2624781/which-programming-languages-arent-considered-high-level) – danben 2010-08-12 13:35:26

+0

它們是相似的問題,但不同的角度。他想知道爲什麼談論這些事情仍然相關,我想要一個術語的定義。看看這兩種接受的答案都說明了我們之間的區別。另外我是一個社區wiki。 :3我更感興趣讓每個人都對定義達成一致。 – Narcolapser 2010-08-12 13:58:17

回答

57

是的,他們只是一般條款。這與抽象有關,與計算機的實際操作有多接近。

這裏的編程語言從非常低到非常高的水平的列表:

  • Machine Code很可能被認爲是最低級的編程語言。

  • Assembly language是在告訴處理器該做什麼的水平。機器代碼仍然有一個轉換步驟。

  • C是彙編程序的一個進步,因爲您可以用稍微抽象的術語指定要執行的操作,但是您仍然非常接近金屬。

  • C++做了C能做的所有事情,但增加了將事物抽象到類中的能力。但是沒有機會在C中做所有事情(比如Java中的指針操作[感謝Joe!])。他們有垃圾收集,但你必須用C++手動完成。

  • Python/Ruby甚至更​​高級別,讓你忘記了很多細節,你需要指定像Java或C#的東西。

  • SQL是更高的水平(這是聲明)。只要說「給我所有表格中按年齡排序的項目」,它就會爲您提供最有效的方法。

+0

lisp怎麼樣?我會把這比SQL更高。 另外C#有指針操作(不安全塊)。 – 2010-08-12 13:32:24

+2

@Joe D我認爲這是有爭議的(lisp比SQL更高級,我的意思是......) – Skilldrick 2010-08-12 13:35:21

+3

@Joe D我會把lisp放在與Python相同的級別。你仍然必須使用條件和函數等編程結構來做東西......除非你使用的是老式的LISP機器,在這種情況下,它的水平很低B-) – 2010-08-12 13:50:53

4

它們不是絕對的。它們都與當時在工業中正在使用的其他語言有關。例如,組裝被認爲是中等水平的時候。

'等級'本質上是衡量程序員如何從實際的基於硬件的操作中抽象出來的度量。在低級語言中,您可能不得不關注實際的內存位置,而在高級別中,您只需創建變量並讓操作系統處理內存。

正常的CPU處理32位或64位指令。以最簡單的形式,將其視爲一個32 1和0,這是處理器實際解釋和執行的內容。直接寫(機器碼)將是'最低級'。

1

低水平意味着更接近機器,因此更困難,更強大。您獲得的級別越高,機器越多,您獲得的「類似英語」級別越高,但您將失去很多能夠控制機器細節的功能。更高級別的語言通常傾向於更多地保護您,並且有更多的預防措施和檢查,而低級語言可以信任您,可以這麼說,並讓您自行承擔風險。

+0

英語喜歡不是一個很好的指標,因爲那樣你就可以將COBOL作爲一種高級語言... – 2010-08-12 13:51:44

+0

power vary的定義比如lisp更強大嗎?這取決於你的權力意味着什麼,如果權力意味着機器的所有功能都可用,那麼組裝功能更強大。但是,如果它意味着更多的代碼可以用更少的代碼行來表示(在這種情況下,更少),那麼lisp顯然更強大。 – 2010-08-13 15:03:44

1

術語中級語言是我從未聽說過的。

「低」和「高」是指如何「接近」您正在編程的機器。最低級別是機器(二進制)代碼。接下來(仍然被認爲是低)是彙編器。更高層次的語言涉及更多的象徵意義和結構,它們應該更接近人們通常的想法。 C(以及某種程度上的C++)聲譽有點像混合低/高級別,因爲它有許多高級語言的構造,但也有低級語言的指令(例如轉換),但通常不是高級語言。

+1

中級通常是C/C++,也許是D. – 2010-08-12 13:35:55

8

在計算機科學中,低級語言是一種編程語言,從計算機的指令集架構提供很少或沒有抽象。 「低」一詞是指語言和機器語言之間很少或不存在的抽象量;因此,低級語言有時被描述爲「接近硬件」。 低級語言不需要編譯器或解釋器來運行;爲其編寫語言的處理器能夠運行代碼而不使用這些中的任何一個。

通過比較,高級編程語言將計算機體系結構的執行語義與程序的規範隔離開來,使開發程序的過程變得更簡單和易於理解。

中層語言站在上面兩個

+0

這是迄今爲止我看到的最清晰,最簡潔的答案。 – RavB 2010-08-12 13:46:23

+5

@baultista:是的,這是因爲它來自維基百科:http://en.wikipedia.org/wiki/Low-level_programming_language – Skilldrick 2010-08-12 13:47:55

+0

這是自從系統與應用程序爭論以來我聽到的最差的分界線。大會需要一個「翻譯器」,它被稱爲一個可怕的彙編程序。您可以使用虛擬機來定位舊版編譯語言不理解的系統的各個方面。 – cdcdcd 2017-03-17 22:24:31

13

非常低的水平之間:機器碼

低電平:彙編,第四

中等水平:C,C++,最系統的編程語言

中/高級別:D,Go,垃圾收集系統編程語言

High lev EL:Java和C#,大多數解釋性語言

更高的水平:Lisp的方言

最高水平:SQL,聲明性編程語言

如果有別的添加,請告訴我。

+0

你也可以把Go放在中/高層。 – Skilldrick 2010-08-12 13:39:42

+0

Lisp可以是​​聲明式的,但你可以做序言式邏輯編程,即使是 – Anandamide 2016-07-06 20:18:47

1

從低到高,您可以按以下方式對語言進行分類。

機器代碼 - >彙編語言 - >編譯語言 - >解釋語言

請記住,這些都不是絕對的黑與白的定義,但灰色色調相當。這比規則更重要。

將機器代碼視爲由本地平臺理解的1和0的長字符串。考慮這個你的基線......你可以擁有的最低「水平」。

彙編語言可以被認爲是這個的象徵性表示。我相信匯編代碼指令和機器代碼指令之間有1:1映射。這是你的低級語言。例如,Java和C++都是編譯語言,但許多人認爲C++是比Java低級的語言,因爲它暴露了低級別的系統訪問,而Java則在受保護的環境(虛擬機)中運行。請記住,編譯後的語言在執行之前會被編譯(如果您願意的話)轉換爲機器碼。 C也是一種編譯語言,但會被認爲比Java和C++都要低。我們會說C和C++是低級語言,因爲它們提供(相對)很少的硬件抽象和直接內存管理。實際上,它們會處於低位和中位之間,因爲您很快就會看到。

我們將調用Java和C#(.NET)中級語言,因爲它們具有自動內存管理(垃圾回收),大量的高級抽象(IE對象......但C++支持對象。規模被認爲是鬆散的定義?)

解釋器駐留在內存中,直接讀取源代碼。這些是高級語言。 Python,Perl,Javascript和PHP都是高級語言的例子。

14

低電平=長的開發時間+非常快的可執行文件

高水平=更短的開發時間+慢可執行文件

中層是兩個

+0

我也不知道是誰投了下來,當你考慮上面的答案時,它實際上是一個很好的聲明。 – Narcolapser 2010-11-06 04:12:19

+0

+1我同意Narcolapser-這絕對是一般化的,但嚴肅,真實。確實是 – DMan 2010-11-06 18:14:52

+3

。人們不會考慮答案,他們只是投票:) – docesam 2010-11-09 11:11:55

0

℃之間爲中等水平的語言BECOZ 我們可以使用匯編語言中的代碼只有細微的差別 指針使它強大(如果指針在c中刪除,那麼它將考慮在低級別) 它的便攜功能使中間lavel 所以我們可以說它是中級語言。

0

它都是相對的......「等級」反映了抽象的數量。

0

一旦你添加了一個編程語言的層次的譜,你添加細微的定義。顯然,機器代碼和組裝是依賴於機器的。理論上C和C++是獨立於機器的,但實際上並不普遍。在C這樣的事情,如對齊需要考慮,你可以總是在C和C的C子集中管理堆棧)通過一個指針和一個初始化變量 - 如果你足夠瘋狂 - 這樣(x86)rsp從未使用過。所以C,是的,它是中等水平。其他一切都是高層次的一些超高層次。

0

低級語言非常接近機器語言,可能是二進制或RTL。很難寫,很快執行。它可以與硬件進行交互,高級編程語言非常易於編寫,但可以在編譯後執行。

相關問題