刚刚说了调控Gene的调控Gene,就看到了徐宥老大的这篇讲Smalltalk bagua的文章,其实也就是讲Reflection了。
----------------------释义-----------------------------------
Reflection,现在约定俗成的翻译是反射,怎么都觉着别扭。还不如翻成“镜像大法”呢。当然,想取个有文化的名字,我觉得桑林志老大blog以前的那段注解就是现成的
“桑弧蓬矢”
haha,开个玩笑了。
我个人觉得这个reflection呢,是带着点揭示的意思,所以要是我的话应该会翻译成揭示,当然也很不好,只有期望那位老大能给出眼前一亮的说法了。
---------------------------------------------------------------
徐宥大大的bagua固然说的好,可惜我等资质鲁顿,我对他下面这段话产生了点疑问:
关于反射的基本概念在脚本语言里面是屡见不鲜的了. 大家都知道, LISP 里面的 eval 后面可以加任何的字符串, 构造出一个运行时对象. 脚本语言实现反射也很简单: 本来就是解释执行的语言, 多一个 eval 等价于多调用一次解释器而已. 而编译型语言就麻烦了, 因为解释器已经在编译期用过了, 运行的时候解释器是不存在的. 这样, 就造成了编译型语言没有运行时信息这个本质困难.
疑问来自于我不理解,因为我还没有达到这个层次,幸好徐老大在底下放出了wikipedia的link,研究了半天,先抄一段如下:
Programming sequences can be classified in one of two ways, atomic or compound. Atomic operations are those that can be viewed as completing in a single, logical step, such as the addition of two numbers. Compound operations are those that require a series of multiple atomic operations.
A compound statement, in classic procedural or object-oriented programming, can lose its structure once it is compiled. The reflective programming paradigm introduces the concept of meta-information, which keeps knowledge of program structure. Meta-information stores information such as the name of the contained methods, the name of the class, the name of parent classes, and/or what the compound statement is supposed to do. Using this stored information, as an object is consumed (processed), it can be reflected upon to find out the operations that it supports. The operation that issues in the required state via the desired state transition can be chosen at run-time without hard-coding it.
那么好了,回到开头,这些和调控Gene有什么关系?
---------------------------------------------------------------
上次我说:
但是且慢,前面我也一再强调了调控Gene也就是类似于程序的东东,准确地说,是程序段。那么合成蛋白质的Gene就是,是的,数据段。
不过我也说:
Aha,那是因为还有调控Gene的调控Gene(Wooo递归,My best favorite:)
调控Gene的调控Gene显然也是程序,那么它是什么呢?也许你已经猜到了,是的,它就是Reflection
因为从冯·诺伊曼体系角度来说,计算机是程序段和数据段混杂,程序段消费数据段。不过这里程序和数据都是相对的,当程序段消费是另一端程序的时候,这是OK的。
也许你会说c语言函数指针,不过在Reflection中,那一段作为数据的程序段,它包含的数据信息是它本身(当然,它不仅仅包含这些)元信息,也就是mate-information.
为虾米徐老大说解释型的语言好实现Reflection,而编译型语言麻烦呢?
meta-information要想起作用,显然是需要一个context的,不过很不幸,编译型的语言在编译的过程中把这些所谓的meta-infomation消除了,在它运行当中不再需要这些context了,而解释型的语言的解释器无疑就是这种context,这也就是SICP里面所说的environment。这个应该也就是诸如lisp,scheme所谓自解释编译器。
当然也许你会说在c语言里面我们不是还可以有debug信息,只要没有strip掉,我们不是知道函数的入口地址在什么地方吗?我想这个问题理论可以实现,虽然说不至于象破解人类基因组那么费力,不过这个工作量是巨大的。
没有评论:
发表评论