2015-10-29 111 views
2

我知道他們是什麼:命令式和聲明式編程語言之間的區別?

在命令式編程語言,你告訴你希望發生的事情一步步什麼編譯器,而在說明性語言編寫,它描述了結果代碼,但不一定如何實現期望的結果。

但是,我不想知道使用任何一種編程語言的優化。除此之外 - 是否有任何併發​​症?例如,需要空間/時間來運行以任一種語言開發的程序。

+1

我想說這個問題的答案會佔用一整本書,或者幾個。 – biziclop

+0

@biziclop我只需要一些小例子來幫助將整個想法包圍在我的頭上.haha – madcrazydrumma

+0

您需要縮小它,無論是在語言方面還是在問題方面,最好是兩者。 – biziclop

回答

2

The 性能對比部分Comparison of programming paradigms WikiPedia頁面幾乎涵蓋了您所要求的一般方法。

純粹在總指示路徑長度而言,程序在 編碼勢在必行的風格,而無需使用任何子程序可言,將具有 最低計數。然而,這樣的程序的二進制大小可能大於使用子程序編碼的相同程序(如功能 和程序編程)並且會引用更多「非本地」 物理指令,這些物理指令可能增加緩存未命中並增加 指令在現代處理器中獲取開銷。

該廣泛使用的子程序的範例(包括功能, 程序和麪向對象),並且不同時使用顯著 內聯(通過編譯器優化)將,因此,使用總資源的 更大百分比的子程序的聯繫 自己。面向對象的程序不會直接改變 程序狀態,而是使用增變器方法(或「setters」) 來封裝這些狀態改變,直接的結果是, 會有更大的開銷。這是因爲消息傳遞 本質上是一個子例程調用,但是還有三個額外的開銷:動態內存分配,參數複製和動態調度。從堆中獲取內存並複製消息傳遞的參數可能涉及遠遠超過狀態更改本身所需的大量資源。僅僅返回私有成員變量的值的訪問器(或「獲取器」) 在類似的消息傳遞子例程上也取決於 ,而不是使用更多的 直接分配(或比較),增加到總路徑長度。

......如此下去

+0

而且在所有情況下都不是這樣。 – biziclop

+0

@biziclop總體來說它不適用於哪種情況? – madcrazydrumma

+1

@madcrazydrumma這就是我想說的:沒有「一般」,這兩種語言家族太多元化了,無法在這個層面上得出任何有意義和普遍的差異。這完全取決於具體的語言和具體的環境。 (例如,大多數現代Java虛擬機**都會使用廣泛的內聯,這使得很多這個段落在Java的情況下大多不相關。但是你可能會在JIT編譯更好或者不存在的平臺上編寫代碼。) – biziclop

相關問題