程式設計師必知的那些驚人事實

今天給大家聊聊一個有趣的事實。

只要給定足夠的時間以及記憶體,所有的計算裝置,不管是大塊頭的超級計算機還是小小的嵌入式裝置、也不管它有多貴或者有多便宜、運算速度有多快或者有多慢,

它們能完成的事情是一樣的

超級計算機能完成的事情,樹莓派也能完成,你手裡拿著的手機也能完成,只不過小型裝置運算速度更慢一點,

但是超級計算機並不能完成一些樹莓派也搞不定的事情

程式設計師必知的那些驚人事實

這告訴我們一個有趣的事實,計算裝置的差異僅僅存在於“配置”上,核數多運算速度就快,核數更多就是超級計算機,核數少主頻低記憶體少,那麼運算速度就慢些,不存在某段程式碼只能在超級計算機上執行而不能在嵌入式裝置上執行的可能,只要把你的程式編譯到對應的處理器平臺上,它們都能很好的執行你編寫的程式。

你可能會問這是為什麼呢?憑什麼超級計算機能完成的事情嵌入式裝置也能完成?

原因就在於,本質上它們是圖靈等價的。

什麼是圖靈等價?

圖靈等價是說當某個系統完成的功能和圖靈機一樣時,那麼我們就說該系統是圖靈等價的。

說到圖靈等價就不得不提圖靈完備了。

什麼是圖靈完備呢?

當某個系統至少能完成和圖靈機一樣的功能時,那麼我們說該系統是圖靈完備。

如果某人聲稱自己的系統是圖靈完備的其實是在說它的系統可以解決一切可計算問題。

有趣的是,現代程式語言也都是圖靈完備的,不存在某個可計算問題只能用A程式語言來解決而不能用B程式語言編來解決,差別僅僅在效率上或者所需要的程式碼行數等等,所以不要再爭論無謂的“A語言就是比B語言好”這類沒有意義的問題了,每個程式語言都有自己的應用場景,一個web開發者用C語言來寫網頁就會覺得C語言真垃圾,一個驅動開發者要用JavaScript來開發驅動更是根本幾乎不可能的事情。

在計算機還沒有發明之前,人們想知道會不會存在這樣一種機器,這種機器能解決他們手動計算的那些問題,但是這樣的機器該怎樣工作呢?又該怎樣創造出來呢?

天才的圖靈提出了一種機器,這種機器有一條無限長的紙帶,被分割成了一個個格子,每個格子都可以寫上一個符號;一個符號表,該表中記錄了所有紙帶上可能會出現的符號;一個機械頭,可以在紙帶上來回移動;狀態表,記錄當前機器的狀態;指令,規定特定情況下機器的行為。

程式設計師必知的那些驚人事實

只要給定足夠的時間,這臺機器可以解決任何可計算問題

圖靈首次向世人展示了該如何構建這樣一臺機器,這也是所有計算裝置的鼻祖,當前的計算裝置在計算能力上是一樣的,這就解釋了我們在本文開頭提出的這個事實,現在你應該明白了吧。