锁定老帖子 主题:探讨一下数据驻留模型
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-09-19
javaeyebird 写道 接下来就是一个循环:如果StateB(revB)是无状态的,取值相同的
你还是没有回答我的问题,如何保证两个机器上的StateB(revB)都是取相同的值. 另外,请注意我所说的时间函数State(t)的是在讨论信号是如何传递的.也就是你那个revB是如何从B传到A,C上去的这一过程. |
|
返回顶楼 | |
发表时间:2008-09-19
Trustno1 写道 引用 物理上当然有时间,但是在模型上不是必须的,lambda演算需要的是数据的依赖。实现数据传递、依赖都需要时间的先后关系,但这并不必以可观察的形式从程序中表现出来。物理上的side effect是存在的,但是程序中的side effect可以被完全消除,即使是并发。
这实际是在不同层面上对side effect的讨论,但对大多数程序员影响最大的还是程序上的side effect。如何执行这个程序,执行中物理上的side effect,可以对程序员透明。 所谓的side effect的意思是,就是这种效应会进行传播.物理上的side effect 必定会传播到程序语言中,在程序语言只能依靠特定的设施将两者隔离,而无法消除. 正因为这种隔离,物理上的、抽象上的side effect之间的关联 可以被消除。语言的实现就可以包含这个设施,使语言的语义、模型完全不含side effect,程序员可以不知道side effect,不考虑“如何”并发,而写出正确并发执行的程序。 并发的执行效率是很重要的问题,这应该也是顶楼贴的重点吧。实现并发要涉及到物理上的side effect,而基于pi演算模型的并发实现,有这方面理论支持,效果挺好。 不过我认为,语言设计上可以选择不将pi演算、message passing等概念展现给程序员,不一定像erlang那样将其作为语言定义的一部分。程序员使用纯函数,思考数据依赖,但不必考虑如何划分process,pass哪些东西,而是让编译器、语言实现去分析规划,那样编程会比较方便。同时,语言可以提供一些选项,让具有这些知识的程序员指导编译器等语言实现去做更好的优化。 |
|
返回顶楼 | |
发表时间:2008-09-19
Trustno1 写道 javaeyebird 写道 接下来就是一个循环:如果StateB(revB)是无状态的,取值相同的
你还是没有回答我的问题,如何保证两个机器上的StateB(revB)都是取相同的值. 另外,请注意我所说的时间函数State(t)的是在讨论信号是如何传递的.也就是你那个revB是如何从B传到A,C上去的这一过程. 哦,两个问题了,我说的只是程序的抽象层面,当然有个基本假设,物理上数据能够正确地传递,物理上数据接收到了,依赖它的函数才能执行(或者说函数的这个application才能进行) 物理上数据传递,当然和时间相关,只不过这个时间可以被完全隔离,程序员只需要知道数据依赖就可以编写能正确地并发执行的程序。 |
|
返回顶楼 | |
发表时间:2008-09-19
引用 正因为这种隔离,物理上的、抽象上的side effect之间的关联 可以被消除。语言的实现就可以包含这个设施,使语言的语义、模型完全不含side effect,程序员可以不知道side effect,不考虑“如何”并发,而写出正确并发执行的程序。
只要有IO就有side effect.隔离的意思是说,IO的编程管IO编程,计算的编程管计算的编程.反正你无法逃过IO. |
|
返回顶楼 | |
发表时间:2008-09-19
Trustno1 写道 引用 正因为这种隔离,物理上的、抽象上的side effect之间的关联 可以被消除。语言的实现就可以包含这个设施,使语言的语义、模型完全不含side effect,程序员可以不知道side effect,不考虑“如何”并发,而写出正确并发执行的程序。
只要有IO就有side effect.隔离的意思是说,IO的编程管IO编程,计算的编程管计算的编程.反正你无法逃过IO. 可以把和硬件IO相关的那些代码放到语言实现中,而展现给程序员的,仍然是一个语言层面no side effect的模型。 |
|
返回顶楼 | |