现在的位置: 首页 > 综合 > 正文

语言设计:让我们忘掉所谓的变量,类型,函数,类,对象

2013年10月14日 ⁄ 综合 ⁄ 共 1078字 ⁄ 字号 评论关闭

世界的本质是不存在的,我们所面对的概念,只不过是一些符号而已。

动态语言中的duck typing,只不过是触摸到这个现实的一角,对象是什么,取决于它能做什么,之所以能在动态语言中能够行得通,只不过是因为抛弃了类型的概念,不再有类的区别。沿着这条路走下去,我们发现,这条路曲曲折折,通向一个唯名论的出口,这种世界观取消一切意义,唯一真实存在的,是符号和符号的演算规则。

在Zero的语言中,有一个万能的Ψ,它用于指代一切事物,如果你写下:

Ψ:=1;
猜猜这个Ψ是什么,一个变量?其实什么都不代表,它没有任何其他的意义。再来看这句:
var Ψ:Integer;
也许你要说,这说明Ψ是一个类型为整数的变量。但如果只有这句代码,它没有任何意义,只是一种符号的串联而已。那么,我们什么情况下可以根据这个定义说,Ψ是个变量呢?如果引入了一条规则。
从var Ψ:XXX; 可以推出 var Ψ;
那么var Ψ就是var Ψ:Integer;这句代码所能表达的意义,可以翻译成:Ψ是一个变量。

在Zero语言的世界观中,根本没有Ψ是某某东西,这样本质性的,超过符号系统之外的规定,当你使用Ψ做一些事情,例如:

Ψ.value:=10;
这里的Ψ可能是一个结构,也可以是一个对象,或者一个可定义参数的模板,还可以是任何可以这样写的东西,只要系统中存在。你写出来的代码中,可能根本不包含对Ψ的定义。这样,你所写出的代码,对Ψ的理解就是待定的,术语称之为未绑定的,这一点为Zero语言带来了灵活的抽象方法。

如果有另外一个同事,如此这般使用你的Ψ:
m:=Ψ.func(x);

当你们两位的代码被合并到一起的时候,关于这个Ψ,我们就有了必然的结论,Ψ是一个对象(当然,这也是推理出来的一个符号化的结论,如果系统没有对象这种符号规则,那合并就会导致错误),而且这个对象的接口,已经被定义出来了,虽然这个时候,我们都还没有来得及去创建它。

这样的世界观,给了Zero语言一种能力,我们所写的代码,可以高度的概括和抽象,没有创建一个东西时,我们甚至可以使用它,至于它到底是什么,取决于我们使用它的方式。这不仅仅是在做duck typing,实际上是duck typing(一样吗,呵呵),只不过这个type,不是类型的意思,是打字的意思。一个东西是什么,取决于我们所使用的符号。实际上,这里根本没有一个东西是什么这种关于本质的问题了。这种方法,不仅仅可以用于动态语言,实际上,任何语言都可以。

转自:http://www.cnblogs.com/uda1341/archive/2009/02/09/1386902.html

抱歉!评论已关闭.