[新闻] DB4D项目

oldrev 2007-05-11
我还是觉得应该 IDisposable 或 ICloseable 作为处理非GC托管资源的标准做法加到标准库中去
qiezi 2007-05-11
oldrev 写道
qiezi 写道


close允许多次调用当然是应该的,而且很容易实现。我可以把错误异常捕捉,不让它在析构函数中抛出,但我讨论的问题不在这里。。。而是析构顺序的问题,如何保证cursor在db关闭前关闭。

既然cursor 依赖database,那它必然保存有database的引用,你必须确保 cursor 除 close 之外的成员执行时database尚未关闭,这个可以在cursor的每个方法的先验条件中加入 assert(!database.closed()) 来保证。

.net的做法是扔出 ObjectDisposedException,但是我觉得没必要,因为这个是程序员的错误,可以用 assert 来处理。

断言检查database.closed是可行的,给点提示就行,抛出其它异常也无助于解决问题,更何况是可能在析构函数里抛出来。
qiezi 2007-05-11
oldrev 写道
我还是觉得应该 IDisposable 或 ICloseable 作为处理非GC托管资源的标准做法加到标准库中去

我觉得加个接口并不能帮助解决问题,何况BDB的close也是带参数的,如何选择一个合适的参数才是“合理的”?我可不想在封装的同时封装掉了灵活性。
oldrev 2007-05-11
很简单,加一个 setCloseFlags(uint flags) 之类方法,或者直接忽略BDB close 的参数和返回值。
qiezi 2007-05-11
oldrev 写道
很简单,加一个 setCloseFlags(uint flags) 之类方法,或者直接忽略BDB close 的参数和返回值。

要是能记得调用setCloseFlags,也不用这么麻烦地去考虑会不会忘记调用close了。。

可以考虑给个默认参数,比如强行关闭的DB_FORCE,他不调用close,就会在析构中用这个参数调用。
h_rain 2007-05-12
问题的复杂性在于,本来需要同步进行的操作,现在要同时允许异步进行,如果要考虑线程安全的话,是会复杂很多。为了安全,肯定需要进行资源的登记与标记处理。
我在想,这个登记处理是否可以放在一个全局的管理器中而不是每个Database中。这样对一个全局的资源进行线程同步会好一些吧。

对了qiezi,dxpcom的异常封装打算怎么办了?
前几天我们公司搬家,现在网络还没有接好,只能晚上在家上来了。
qiezi 2007-05-12
放全局感觉也不好,cursor的使用可能很频繁,不想增加额外的开销。这个还是由程序员来保证吧,或者把cursor做成必须scope来使用。。

dxpcom异常封装本来只剩下数组类型了,在完善的时候又想把retval参数封装成返回值,目前代码太多了些,对于libIDL也有些了解了,打算整理一下呢,主要是libIDL这种C代码大量使用宏,没有好的IDE做起来真是很慢,头大得很。拖几天吧,db4d先做一点,公司有个项目我打算用D重写一下看看性能,要用到BDB。
h_rain 2007-05-12
使用dxpcom进行html解析的工作目前我也想放一放了,正好异常封装的dxpcom还需要一些时间,我也能偷懒了:)

主要的问题是,xulrunner 1.9现在还没有正式发布,sdk里面的190多个idl仅仅是目前已经被冻结的接口,其他的1300来个居然还没有被冻结(好像是在mozilla官方网站看到的),狂晕。

最近开始看看ogre和yake,等xulrunner 1.9正式发布了,或者我公司的网通了,再说吧。
qiezi 2007-05-12
先放一阵子吧,也只有一部分不能使用而已,这部分可以直接调用C++风格。

目前我正在用D重写公司现有的C++项目,做一些性能测试,还要看64位能不能编译出来。目前这些项目涉及到BDB, mysql, oracle, socket, 高并发等,也想通过它来看看D的实用性。
h_rain 2007-05-12
qiezi在做什么项目啊?怎么都是数据库?计费?

你们公司也会允许在商业项目中使用D吗?有点不可思议的。

是不是服务器端的项目,只要能实现,通过测试就可以啊?
Global site tag (gtag.js) - Google Analytics