語言的進化

咱們生活在一個幸運的時代,計算機軟件技術突飛猛進,因着互聯網,能夠在一個史無前例的範圍內瞭解技術的現狀和進步。程序員

無疑,計算機軟件統領着信息技術的變革,人類經過代碼,將本身的意願加載到不辭辛苦的計算機系統中,快速重複的計算着。算法

能夠確定的是,計算機軟件是不斷進化和發展的。將來的計算機軟件將具備更多的抽象性表達方式,更快的執行效率,計算機語言延伸的範圍會更廣闊。編程

看起來新的語言突飛猛進,層出不窮。老的語言,愈來愈穩定,算法庫愈來愈多。但實際上,每種語言都有其生命週期。數據結構

從文法角度講,有兩類語言,C 和 Lisp。C 語言語系彷佛統領着世界,但實際上,全部 C 語言語系的語言都有比較短暫的生命週期,包括 C 語言。爲何呢?編碼

由於新的抽象會讓 C 語言語系的文法出現二義性,這從天然語言的進化就能看出來。在必定的語境中,許多的東西是沒必要明說的。生命週期

Python 遇到了 Python2 到 3 痛苦的轉變,新的語法爲了適應新的編程範式和抽象,沒法向下兼容。導致社區出現分化,舊的代碼逐漸成爲歷史。新的輪子又要一個一個的建設。開發

Perl 語言早就預測到了這個問題,很早就開始 Perl 6 的開發,但因着Perl 5 所承載的巨大的歷史責任,導致社區無力集中精力開始 Perl 6的開發,由於一旦社區的力量集中到 Perl 6,Perl 5社區勢必會沒落,大量的新的需求,只有一個結果,那麼就是 Perl 社區分化成兩個。編譯器

Ruby 每一個版本都會有一些變化,有激烈的,有溫和的,但向下兼容再也不成爲軟件開發者的保證。之前的代碼若是缺少維護和更新,極可能在幾個新版本出現後,就會成爲歷史。編譯

Java C++ 都會有相似的問題,向下兼容成爲一個巨大的負擔,增長新的語言特性,而又保持對原有代碼的支持,變得愈來愈困難,究竟是什麼問題致使的呢?就是文法的解析。社區

幾乎全部語言都有必定的語法,這些語法的解析是由語言創立者完成的,解析的規則隱藏在 C 語言或 C++ 語言冗長的代碼中,用積木搭建的系統已經風雨飄搖。新的抽象每每意味着新的語法,新的語法就要增長新的關鍵字,新的關鍵字總有特殊的語義規則。誰都知道,這樣作終歸要出現語義的二義性。Ruby 語言自己就已經出現了這樣的問題,只能經過編碼習慣來約束,但誰能限制程序員的編碼習慣呢?

那麼有沒有增長新的抽象而不須要改變語法的語言呢?沒有徹底沒有語法的語言,但有語法相對簡單的語言。語法越簡單,擴展越容易。Lisp 語系的語法規則很是簡單,甚至說實際上沒有固定的形式語法。看起來只有一層一層的括號,但實際上不少 Lisp 方言的括號愈來愈少。

能在將來存活的語言,內核必定是很是精簡的,而語言的擴展,應當交給使用它的程序員來完成。

這樣的語言只有 C Lisp 符合條件。

能自我擴展的語言,必須能用語言自己完成本身語言的解釋器,編譯器,連接器和彙編器。而語言自己應當沒有形式化的語法,固定不變的只能是一種思想:無疑,代碼和數據結構形式上的統一是這個思想的一個特徵。

相關文章
相關標籤/搜索