一点领悟吧,关于消息传递与lambda算子

    昨天在读到《Programming Erlang》第8章,开篇点出Erlang是一门纯粹的消息传递风格语言(message passing),我才算是领悟了消息传递。为了这个问题,我还冒昧地去问javaeye上的T1,对这个问题的兴趣是因为SICP第二章以及《失踪的链环》上的介绍。T1给我解答如下: 智能能对象只是消息传递的一种具体应用.消息传递说的更为清晰一些就是一种映射关系或者说映射规则.f:a->b;这个规则可以是任意的。我一直将procedural representations of data,也就是sicp中声称intelligent data objects (智能对象)等价于消息传递, 而其实智能对象仅仅是消息传递的一种具体应用罢了。
消息传递机制通俗地来讲就是类似于马路上到处投递小广告的投递者,它采取的是Send and Pray策略,既不关心消息是否能精确的传送到真正需要消息的接收者,而是以广播的方式把消息发送给所有人,然后通过回馈来确定消息接收者的类型(引自《失踪的链环》)。因此,动态语言的duct typing是消息传递风格,智能对象是消息传递风格,显然,Erlang的process间的通信机制同样是消息传递风格(Process之间完全通过send message来进行控制和指示,不确定接收方是否具有处理消息的能力 ,异步的,接收的确认也要等待reply)。
    再来说说lambda算子理论,推荐下g9老大的lambda算子系列文章,这是开篇《 lambda算子简介1.a》,以及另外一篇《 康托尔、哥德尔、图灵——永恒的金色对角线(rev#2)》。lambda算子理论是函数式编程的理论基础,通过9条公理就可以推到出一个图灵完备的形式系统,其中的Y combinator的推导简直是魔法(为了表示递归),再次领略了计算理论的魅力。另外,最近读sicp第三章《模块化、对象和状态》,也理解了最初的面向对象思想来自何处,在引入了内部状态模拟时间变化之后,对象的最初思想也产生了,同时也带来了赋值导致的Side-Effect,而其实这正是动态OO语言中的对象的理念,通过消息来决定对象的type(ducktyping)。可现代的静态OO语言,在type和clas
之间画上了等号,java里面说一切都是object,其实他想表达的却是一切都是class,通过type以及函数签名等来决定消息的分派(message dispatch),导致更多的代码集中在消息分派,而不是真正的计算任务上,可以说静态OO已经偏离原始的对象模型很远。
    一点胡思乱想吧,我没有科班经历,所有的东西都是自己在学,在摸索,如有理论和常识上的谬误,请不吝赐教。

你可能感兴趣的:(一点领悟吧,关于消息传递与lambda算子)