<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_程序设计语言与开发工具</title><subtitle type="text">为理性建模</subtitle><id>http://feed.cnblogs.com/blog/u/48456/rss</id><updated>2010-10-11T08:05:47Z</updated><author><name>uda1341</name><uri>http://www.cnblogs.com/uda1341/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/uda1341/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/48456/rss"/><entry><id>http://www.cnblogs.com/uda1341/archive/2010/10/11/1847998.html</id><title type="text">代码级别的事务</title><summary type="text">目前我们所说的事务大多是对于处理数据库而言的，其实，事务的概念如果能扩展到代码的级别，可以为我们带来非常大的方便。</summary><published>2010-10-11T08:04:00Z</published><updated>2010-10-11T08:04:00Z</updated><author><name>uda1341</name><uri>http://www.cnblogs.com/uda1341/</uri></author><link rel="alternate" href="http://www.cnblogs.com/uda1341/archive/2010/10/11/1847998.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/uda1341/archive/2010/10/11/1847998.html"/><content type="html">&lt;pre&gt;目前我们所说的事务大多是对于处理数据库而言的，其实，事务的概念如果能扩展到代码的级别，可以为我们带来非常大的方便。  &lt;br /&gt;&lt;br /&gt;原因是，如果我们把程序在运行的某个时刻的状态看做一个事实空间，这个事实空间是随着代码的运行在不断的变化的，在每个时刻，我们都可以用一组事实和规则&lt;br /&gt;去描述当前的事实空间。  但有些时候，代码出错了，在某行语句的运行还未完成的时候就出错了，这时候，你可能无法用预先定义好的谓词来完整的描述这个事实&lt;br /&gt;空间。这种状态，我称为&amp;#8220;逻辑完整性&amp;#8221;遭到了破坏。  例如把一个图片从某个位置挪到新的位置，在挪之前，你可以描述道：图片在某个位置。在挪动之后，你也&lt;br /&gt;可以说，图片在某个位置。但是在挪到一半的时候，你怎么说？在你的描述体系里，这种状态根本就不存在。而&amp;#8220;图片&amp;#8221;的抽象，也就被破坏了。  这时候要写出错&lt;br /&gt;处理代码是困难的，因为你没法按照事先的逻辑描述去把状态恢复，而只能通过小心的查看底层的处理方式，才能知道哪些状态遭到了破坏，应该做什么样的处理才&lt;br /&gt;能够恢复这种逻辑完整性，而且这些处理也是超越逻辑的怪异方式，你事先设计好的抽象方法就没法描述它们，这就造成了所谓的抽象泄露。在上面的例子中，底层&lt;br /&gt;代码的意外错误导致对&amp;#8220;图片&amp;#8221;的抽象被破坏了，露出了内存操作这种你根本就不应该关心，也是根本就不了解的问题。  这时候，事务就是非常必要的，事务处理&lt;br /&gt;的目的，就是为了时刻保持这种逻辑完整性，在逻辑处于中间的不完整状态时，如果操作失败，程序能够自动回退到事务开始之前的状态，以便代码进行出错处理。&lt;br /&gt;&amp;nbsp;这就需要语言从底层就支持代码级别的事务。&lt;/pre&gt;&lt;img src="http://www.cnblogs.com/uda1341/aggbug/1847998.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/uda1341/archive/2010/10/11/1847998.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
