我没有学过 Lisp, 不知个人想法是否靠谱。程序员
我在学习一门真正的编程语言以前,已经用一种只有函数的脚本写了至少10年的应用。因为那门脚本语言中没有变量,控制语句,关键字,类,对象,有的只有函数,还有一个基于关联表的数据模型。当我感受用这种形式编程,没法充分表达个人思想后,决定学习一门真正的语言。但 C Java VB c# 都让我半途而废。只有 Perl 让我重获新生,我用将近3年的时间将Perl语言用到了全部问题的处理上。随着 Perl 语言的弊病愈来愈明显,我决定了解一些其余的语言,来让我明白,究竟是什么让我感受到如此压抑。Ruby PHP Javascript Lua Java 这些前途和自由并重的语言耗费了大量的时间。其实我一直想静下心来学习传说中的 C 和 Lisp,还有许多人推荐的 Haskell。 随着用现有语言而致使的问题愈来愈多,让我对这三种语言越发神往。但老是在这些语言的外围打转。编程
Io 语言让我史无前例的接近 Lisp 的设计模型。c#
Lisp 是函数式语言的原型,由于函数式语言是 Lisp 表达方式的一个子集。Lisp 的宏是他独有的标志。想了好久,才明白,原来宏只是 Lisp 要求解释器将 Lisp 代码自己当成一个数据结构,在运行时以前的一个阶段,也许是解释,也许是扩展,也许是源码分析的时候,将一个规则加在这个代码的数据结构上,来扩展 Lisp 简单乏味的 S 式语法。这样让 Lisp 的代码看起来没有固定的语法。由于语法也是 Lisp 动态扩展的一个能力。缓存
从人的角度看,一个变幻无常的语法,让人很难阅读和理解,这严重影响了人们学习和交流 Lisp. 因此 Lisp 中不鼓励使用宏,除非想用一种另外的方言编程,那么这块工做就交给那些设计语言的人,由于他们会进行屡次的测试和评估,所展示出来的东西必定比 Lisp 更加亲切,随和,适合一些人的口味。数据结构
Lisp 简单的语法要求程序中任何阶段计算的中间值和成果,都应当能独立保存其状态,以便交给其余的计算进程去使用。函数,代码自己(也就是块),判断语句,循环语句,都须要用一种形式描述,保存,返回和传递。这锻炼了 Lisp 程序员的抽象思惟。也造就了函数式语言的根基。编程语言
Io 语言是没有括号和表达数序相反的 Lisp 方言,相反是说,Io 中的函数也就是动做,是放在数据的后面,而不是放在前面,由于做者记忆力衰退,感受在进行一个计算以前,把函数名称先缓存到大脑中比较累,因而想到哪,就写到哪,先把手头的数据写完了,再去写要干什么。这种思路确实让人轻松天然多了。函数
站在巨人的肩膀上,视野真是开阔啊,原型语言,内嵌虚拟机,面向对象,消息机制,一会儿能放入一个语言中。源码分析
我学习 Io 的目的就不说了,由于我知道你们不信。学习