為什麼說Ruby繼承了Lisp?

譬如

http://www.randomhacks.net/2005/12/03/why-ruby-is-an-acceptable-lisp/


謝邀。

發現題主已經自問自答了呀,你給的這個鏈接就是答案:Why Ruby is an acceptable LISP,雖然內容比較老,但是思想還閃著光。

不過文中關於macro的描述還是不夠精髓,起碼舉的例子是不恰當的。我補充一下:Matz放棄了Lisp風格的宏,但不是放棄宏,他通過對Ruby詞法作用域的巧妙設計和block,完美的實現了Ruby風格的「宏」,但依然是繼承了Lisp的精髓(s表達式)。具體可以參考我對另外一個Ruby相關問題的答案:ruby語言有什麼樣的美學特點?

如果題主想了解更多相關信息,我推薦你去閱讀「松本行弘的程序世界」一書,裡面Matz會跟你對話。


Lisp是所有語言的鼻祖,包括出現比它早的 (逃


這種說法是錯誤的,除了同是動態類型語言,對DSL友好等,ruby和lisp完全不同,包括語法,語義。。

lisp基於untyped lambda calculus,設計之初就是為了教授計算,所以lisp編程大量使用了遞歸,針對尾遞歸進行了優化,而ruby則採用了基於類的對象模型,不支持first class function(可以用ruby特性進行模擬),實現上默認不支持尾調用優化,通過yield與proc實現內部迭代器,是一種訪問者模式.關於ruby的對象模型設計見ruby元編程一書.

對dsl的實現方式也不同,lisp的宏是編譯時的,而ruby是靠反射,method_missing一類的機制,屬於運行時,這裡不展開說了。

題主提到繼承一說應該是早期ruby社區為了宣傳扯出來的,如果硬要說有什麼繼承關係,大概就是Matz通過研究elisp實現學會了標記清除演算法.


只要有lambda就會被人說是繼承自lisp..


推薦閱讀:

Ruby除了使用rails開發web應用還能做什麼?
什麼人適合學習 Ruby?
Ruby 和 Python 相比有什麼優勢和缺陷?
使用 Visual Studio 開發的情況下 C# 的編程效率能否和 Python、Ruby 媲美?

TAG:編程語言 | Ruby | Lisp |