既然所有語言都是圖靈完備的,為什麼適用的領域不一樣?
01-16
譬如有的適合寫後端,有的適合寫前端,主要是由於庫和框架嗎?而庫和框架不一樣可以用語言寫出來嗎?
圖靈完備只是通用編程的最低要求。各種語言為一些領域而設計,通過抽象簡化複雜度。作為類比,計算機都是執行機器碼的,可以編寫任何需要圖靈完備的應用,但使用高階的程序語言通常較直接編寫機器碼容易實現大部分應用。
圖靈完備只保證計算的可行性,不保證計算的效率,也不保證代碼的可理解性和可維護性
磚頭也能敲釘子,那幹嘛還要榔頭?
因為各自的語法糖的味道不一樣。
補充一下大家的回答,如 @Milo Yip@李遙 所說的,圖靈完備只保證計算的可行性,即編程最低要求。
但各個領域有不同的需求,如科學計算中需要有浮點數計算、並行計算的能力;商業應用中需要有可持續化、數據分析的能力;系統編程中需要對底層的資源進行控制、甚至有實時的要求。這些需求之間是存在衝突的,需要語言的設計者來進行取捨。雖然有的語言在設計之初就注重了通用性,但也有的語言在設計和實現的時候會針對某一領域進行優化的設計,如Matlab, R, SQL等等。而有針對性的優化就能有效的降低解決問題的複雜度(編程複雜度、計算複雜度,等等)。新生領域的不斷湧現導致的新的需求,也誘導了新語言的誕生。
即使是通用語言,也存在性能和開發成本的取捨,如C/C++這樣的編譯型保證了性能,但需要更高的開發成本;Python一類的腳本語言雖然降低了開發成本,但需要在性能上作出犧牲。具體的選擇需要看實際的需求。
還有的就是歷史原因了,像在前端裡面能用的基本上也只有Javascript了。圖靈完備是可計算性的理論上的概念,只負責「這東西能不能算」,但不負責「這東西怎麼算才快」。如果圖靈完備就萬事大吉了,那麼冒泡排序也能打遍天下了,整個世界的安全體系就毀於一旦:理論上大數因數分解是很容易就能完成的。
就像什麼 Lisp 11 條公理……再厲害也不能構築出 vector,嗯,是的,list 在理論上和 vector 等價的……你說鏈表和數組能一樣嗎。
說點實際的,Python 能用指針嗎? Java 呢?能關掉 GC 手動內存管理嗎?能不帶 Runtime 的編譯成 ASM 嗎,這些都是編程語言自身的限制……當然其實或許是可以的,但即使你牛你做到了,也是 Hack,是語言之外的。物理和化學圖靈完備,為什麼適用的範圍不一樣
C++我精心設計一個庫我覺得也不會比PHP差多少,但是你怎麼能要求前端的人學習這麼多東西呢,人家要搞html5、css、javascript、各種MVVM框架、瀏覽器奸容、還要精通後端、各種sql和nosql資料庫,而且每個步驟都要練成大牛否則按照圈子裡的性格都要被噴死,多他媽的不容易啊,所以在語言上面就給他們點甜頭嘗嘗,安慰一下。大家好才是真的好。
不同的領域要求不一樣
推薦閱讀:
※web qq是用什麼技術接收實時消息的?
※複製(剪切板)到底是複製了什麼?
※如何觀測SSD盤內部狀態?
※如何通過8個月進入研發行業?