程序设计语言与开发工具

为理性建模

导航

统计

代码级别的事务

目前我们所说的事务大多是对于处理数据库而言的,其实,事务的概念如果能扩展到代码的级别,可以为我们带来非常大的方便。  

原因是,如果我们把程序在运行的某个时刻的状态看做一个事实空间,这个事实空间是随着代码的运行在不断的变化的,在每个时刻,我们都可以用一组事实和规则
去描述当前的事实空间。 但有些时候,代码出错了,在某行语句的运行还未完成的时候就出错了,这时候,你可能无法用预先定义好的谓词来完整的描述这个事实
空间。这种状态,我称为“逻辑完整性”遭到了破坏。 例如把一个图片从某个位置挪到新的位置,在挪之前,你可以描述道:图片在某个位置。在挪动之后,你也
可以说,图片在某个位置。但是在挪到一半的时候,你怎么说?在你的描述体系里,这种状态根本就不存在。而“图片”的抽象,也就被破坏了。 这时候要写出错
处理代码是困难的,因为你没法按照事先的逻辑描述去把状态恢复,而只能通过小心的查看底层的处理方式,才能知道哪些状态遭到了破坏,应该做什么样的处理才
能够恢复这种逻辑完整性,而且这些处理也是超越逻辑的怪异方式,你事先设计好的抽象方法就没法描述它们,这就造成了所谓的抽象泄露。在上面的例子中,底层
代码的意外错误导致对“图片”的抽象被破坏了,露出了内存操作这种你根本就不应该关心,也是根本就不了解的问题。 这时候,事务就是非常必要的,事务处理
的目的,就是为了时刻保持这种逻辑完整性,在逻辑处于中间的不完整状态时,如果操作失败,程序能够自动回退到事务开始之前的状态,以便代码进行出错处理。
 这就需要语言从底层就支持代码级别的事务。

posted on 2010-10-11 16:04 uda1341 阅读(...) 评论(...) 编辑 收藏

Powered by .NET Core 3.0 Preview 8 on Linux