Lisp 编程模型
2019獨角獸企業重金招聘Python工程師標準>>>
我沒有學過 Lisp, 不知我的想法是否靠譜。
我在學習一門真正的編程語言之前,已經用一種只有函數的腳本寫了至少10年的應用。由于那門腳本語言中沒有變量,控制語句,關鍵字,類,對象,有的只有函數,還有一個基于關聯表的數據模型。當我感覺用這種形式編程,無法充分表達我的思想后,決定學習一門真正的語言。但 C Java VB c# 都讓我半途而廢。只有 Perl 讓我重獲新生,我用將近3年的時間將Perl語言用到了所有問題的處理上。隨著 Perl 語言的弊病越來越明顯,我決定了解一些其他的語言,來讓我明白,到底是什么讓我感覺到如此壓抑。Ruby PHP Javascript Lua Java 這些前途和自由并重的語言耗費了大量的時間。其實我一直想靜下心來學習傳說中的 C 和 Lisp,還有許多人推薦的 Haskell。 隨著用現有語言而導致的問題越來越多,讓我對這三種語言愈加神往。但總是在這些語言的外圍打轉。
Io 語言讓我前所未有的接近 Lisp 的設計模型。
Lisp 是函數式語言的原型,因為函數式語言是 Lisp 表達方式的一個子集。Lisp 的宏是他獨有的標志。想了很久,才明白,原來宏只是 Lisp 要求解釋器將 Lisp 代碼本身當成一個數據結構,在運行時之前的一個階段,也許是解釋,也許是擴展,也許是源碼分析的時候,將一個規則加在這個代碼的數據結構上,來擴展 Lisp 簡單乏味的 S 式語法。這樣讓 Lisp 的代碼看起來沒有固定的語法。因為語法也是 Lisp 動態擴展的一個能力。
從人的角度看,一個變幻無常的語法,讓人很難閱讀和理解,這嚴重影響了人們學習和交流 Lisp. 所以 Lisp 中不鼓勵使用宏,除非想用一種另外的方言編程,那么這塊工作就交給那些設計語言的人,因為他們會進行多次的測試和評估,所展現出來的東西一定比 Lisp 更加親切,隨和,適合一些人的口味。
Lisp 簡單的語法要求程序中任何階段計算的中間值和成果,都應當能獨立保存其狀態,以便交給其他的計算進程去使用。函數,代碼本身(也就是塊),判斷語句,循環語句,都需要用一種形式描述,保存,返回和傳遞。這鍛煉了 Lisp 程序員的抽象思維。也造就了函數式語言的根基。
Io 語言是沒有括號和表達數序相反的 Lisp 方言,相反是說,Io 中的函數也就是動作,是放在數據的后面,而不是放在前面,因為作者記憶力衰退,感覺在進行一個計算之前,把函數名稱先緩存到大腦中比較累,于是想到哪,就寫到哪,先把手頭的數據寫完了,再去寫要干什么。這種思路確實讓人輕松自然多了。
站在巨人的肩膀上,視野真是開闊啊,原型語言,內嵌虛擬機,面向對象,消息機制,一下子能放入一個語言中。
我學習 Io 的目的就不說了,因為我知道大家不信。
轉載于:https://my.oschina.net/u/563463/blog/137526
總結
- 上一篇: 阿里本地生活板块被爆大裁员,饿了么到店业
- 下一篇: 义乌自己的全球支付工具!义支付发布:打通