2015-02-11 76 views
2

或者採用更相關的方式,編程語言的哪些特徵會影響相應生成的可執行文件的牢固度?什麼讓編程語言更快?

當然,這是編譯器生成真正重要的可執行文件。例如,您可以想象一些先進的編譯鏈,它能夠從自然語言描述中推斷出可執行文件,並提供相關問題和提供的建議,以消除與給定數據匹配得很好的可能性太低。

現在C以使開發人員能夠獲得真正快速的可執行文件「便攜式彙編程序」而聞名。但是,是因爲這種語言可以簡化源代碼和目標代碼之間的匹配,並且同時簡化優化編譯器的開發?或者是因爲使用C的開發人員對它在木材下的工作方式更敏感,因此使用C編寫代碼?還是其他原因?

When did people first start thinking 'C is portable assembler'?

+0

在開發時間和錯誤預防中獲得最大收益。實際性能很少是編譯器問題。效率低下通常是由於編程不當造成的。 – Stefan 2015-02-11 13:25:39

回答

0

用於在那裏花了更多的代碼在另一種編程語言

+1

詳細程度似乎不是唯一的參數,例如,當Python的聲譽提供更快的可執行文件時,python遠不如C。 – psychoslave 2015-02-11 13:29:48

0

,以解決被認爲是最爲突出的特點,使語言快一個問題較少的代碼是其數據類型如何對應機數據類型。 Java被認爲是一種高效的語言,因爲它具有原始數據類型。相反,用任何以任何語言處理所有類型(甚至是字符和整數)作爲對象的語言(如所有腳本/無類型語言那樣)的性能必然受到影響。

0

C很快,因爲除了Assembly之外,C之下沒有語言。所以這是一個原因。其次,編寫哪種語言編譯器也很重要,因爲如果語言自己慢,那麼用該語言編寫的編譯器也很慢。所以,它會產生代碼,但速度並不快。第三,許多時間語言實現算法在說明語言的數據類型如何實現等方面也扮演着重要的角色。

生成優化的代碼,以便能夠快速運行,並且在NP完整性中佔用更少的內存。

+0

好吧,'沒有語言'是與你如何編譯代碼有關。編寫編譯器的語言在這裏是雞蛋/雞的問題。我的問題更多地面向「哪些功能可以使源語言更容易優化?」。 – psychoslave 2015-02-11 13:34:18

+0

我認爲它對於語言來說很重要,因爲它如何編譯代碼說一種語言X被轉換成C然後彙編成彙編語言,所以它可能不是快速的語言,因爲它需要兩個對話來生成代碼。 – Kiran 2015-02-11 13:37:16

4

由於其靈活性,C仍然是「最快」的語言。它並沒有強加一個剛性的運行時模型。開發人員可以自由創建自己的運行時結構,體系結構和數據結構。例如,20年前,處理器「速度很慢」(相對於內存速度而言),許多優化的重點是查找預計算值大表中的結果。現在,處理器速度很快,內存很慢。現在,優化專注於緩存效率 - 因爲大數據表會打擊緩存,通常會避免它們,並且任務將轉移回處理器。

許多語言不僅僅是一種語言。大多數現代語言包括運行速度依賴的運行時框架和庫。這些運行時框架通常鎖定在基本的數據結構和內存管理模型中。當硬件發生變化時,不靈活的框架變得效率低下。由於C可預測地編譯爲本地目標代碼,並且不會強加嚴重的運行時間,因此它已經並將繼續處理主要的硬件體系結構更改,並始終成爲最快的語言之一。

+0

非常好的答案。這是我正在尋找的那種,謝謝。 – psychoslave 2015-02-11 16:23:20