论坛首页 综合技术论坛

探讨一下数据驻留模型

浏览 30402 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-09-19  
javaeyebird 写道
接下来就是一个循环:如果StateB(revB)是无状态的,取值相同的

你还是没有回答我的问题,如何保证两个机器上的StateB(revB)都是取相同的值.



另外,请注意我所说的时间函数State(t)的是在讨论信号是如何传递的.也就是你那个revB是如何从B传到A,C上去的这一过程.
0 请登录后投票
   发表时间: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哪些东西,而是让编译器、语言实现去分析规划,那样编程会比较方便。同时,语言可以提供一些选项,让具有这些知识的程序员指导编译器等语言实现去做更好的优化。
0 请登录后投票
   发表时间:2008-09-19  
Trustno1 写道
javaeyebird 写道
接下来就是一个循环:如果StateB(revB)是无状态的,取值相同的

你还是没有回答我的问题,如何保证两个机器上的StateB(revB)都是取相同的值.
另外,请注意我所说的时间函数State(t)的是在讨论信号是如何传递的.也就是你那个revB是如何从B传到A,C上去的这一过程.

哦,两个问题了,我说的只是程序的抽象层面,当然有个基本假设,物理上数据能够正确地传递,物理上数据接收到了,依赖它的函数才能执行(或者说函数的这个application才能进行)
物理上数据传递,当然和时间相关,只不过这个时间可以被完全隔离,程序员只需要知道数据依赖就可以编写能正确地并发执行的程序。
0 请登录后投票
   发表时间:2008-09-19  
引用
正因为这种隔离,物理上的、抽象上的side effect之间的关联 可以被消除。语言的实现就可以包含这个设施,使语言的语义、模型完全不含side effect,程序员可以不知道side effect,不考虑“如何”并发,而写出正确并发执行的程序。

只要有IO就有side effect.隔离的意思是说,IO的编程管IO编程,计算的编程管计算的编程.反正你无法逃过IO.
0 请登录后投票
   发表时间:2008-09-19  
Trustno1 写道
引用
正因为这种隔离,物理上的、抽象上的side effect之间的关联 可以被消除。语言的实现就可以包含这个设施,使语言的语义、模型完全不含side effect,程序员可以不知道side effect,不考虑“如何”并发,而写出正确并发执行的程序。

只要有IO就有side effect.隔离的意思是说,IO的编程管IO编程,计算的编程管计算的编程.反正你无法逃过IO.

可以把和硬件IO相关的那些代码放到语言实现中,而展现给程序员的,仍然是一个语言层面no side effect的模型。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics