提到原型編程,就想到 Javascript, Lua, 覺得本身應當能充分理解這個概念,但在學習 Io 語言的過程當中,困難重重,始終不能開竅。express
終於在 smalltalk 的教程中得到了一些靈感,原來 Io 語言是 smalltalk 的一個方言,幾乎全部的概念 receiver message context target arguments 都是從 smalltalk 中借鑑的。編程
Javascript 雖然是原型語言,但老道(Javascript Good Parts 做者)說它雖有原型語言的內核。但沒有原型語言的外形,兩邊都不討好,怪不得不能從 Javascript 中得到啓示。函數
我認爲 smalltalk 的核心不單是原型語言,而是一致的編程模型:消息發送。學習
從賦值,數學表達式,函數參數設置,函數調用都用一種統一的消息發送的模型描述,讓這門語言看起來很是的美麗,也就是渾然一體的感受。編碼
Io 語言有幾個瑕疵:對象
method 函數設置沒有遵循消息發送的模型,而採用了相似 C 語言的語法:教程
method(arg1, arg2, expression)ip
括號的使用很是生硬:get
method(....) block(....) do(....)原型
雖然括號同時能改變表達式的優先級,但括號這個符號自己成爲語言的硬編碼,這和 smalltalk 不一樣。在 smalltalk 中出現的每一個字符,都遵循了消息發送的原則。
Io 語言的做者說語言中沒有關鍵字,實際上有:
() , # // /* ... */ """ ... """ \n ; 這些字符都是硬編碼到語言中的,不能修改的語言特性。
導致這門語言的靈活性收到極大的破壞。
Io 語言的做者如今一有時間,就在作將 Io 用 Javacript 實現的模型,由於 V8 引擎,讓 Javacript 成爲速度和語法兼備的語言。而 Io 和 Javascript 的語言特性也比較接近,Nodejs 還有一個完善的模塊發佈機制。比起用 C 語言實現的版本,軟件的維護和發佈代價都要小的多。但速度真的那麼重要嗎?