Posts tagged with "Boost"
Sunday, 25. March 2007, 14:31:24
cegui, wxWidgets, GUI, scintilla
...
今天看了 scintilla 的一些手册发现,scintilla 把我最关心的搜索/替换功能做在了控件内——这是在我现在的应用角度来说是非常糟糕的——我需要使用 boost::regex 来实现强大的搜索/替换功能,两个方法:
- 一、修改 scintilla 的源码,使之直接内嵌入 boost::regex;
- 二、从 richedit 的层次上开始编写一个复杂的编辑控件;
似乎两者都有各自的确定,需要好好考虑下。
另外,插一个题外话,关于 gui library 的选择,我是打算使用一个 cross platform 的,而且需要一个高效的 framework——我看来 wxwidgets 的框架,实现的东西非常全,但是跟我现在主要开发的 cegui 有些地方采用不同的设计理念,关于这个框架的问题,还要好好想想。
Saturday, 17. March 2007, 01:30:57
Vim, editplus, EmEditor, ultraedit
...
关于编辑器,我尝试了很多种,例如 vim, emacs, scite, ultraedit, editplus, emeditor, pspad, notepad++, ... 很可惜的是没有一个能完全满足我的需求。
就说 emeditor 有非常强大的搜索功能吧,而 vim 有非常好的 file type identification 能力,而恰恰两个的强大之处都是对方的薄弱之处。
emeditor 的编辑 control 是使用 text replace 的方式来进行语法高亮的,所以效果不是很理想;而 vim 使用的方法要比之高明得多了。emeditor 强大的搜索功能是通过 regex++ (也就是现在的 boost::regex)来实现的,而 vim 只实现了 posix regular expression。
有一个设想就是自己编写一个 editor,仅限于设想。想像下,为了搬 10kg 的东西,却要先做 100n 的准备活动,这种做法值得吗?
Wednesday, 14. March 2007, 09:44:40
Java, OO, Paganini, pb
...
今天下午抽了些时间读了一些 boost 的源码,就像当年我对 Paganini 作品的看法一样——注重在技巧上,而不是在读者/听者对作品的感受上;我认为 Paganini 的作品技巧性要求一流,但是作品本身并不非常好听(也许是我理解能力有限);同样,我认为 boost 各库的实现技巧一流,但是不是一个完整的作品。
就像我当初读过的一个叫什么来着的 java 论坛源码,一时想不起名字来了,它就影响了我之后许多年内的代码设计风格。不过话要说回来,java 过于面向对象化,我现在需要的是一个 oo 与 pb 相结合的更便捷的编码风格——完全 oo 化的过程太繁琐了。
Wednesday, 14. March 2007, 09:38:40
Boost, template, c++, cto
...
templates 实在是 c++ 中最优秀的思想了,不,应该说 templates 是程序设计中产生的最优美的思想了。
于是就有人想把 c 中安插上 templates,于是就诞生了用 c++ 编译器来编译 c 代码的方法,也产生了 gp。实际在我理解中,扣除 class 等一些特性的话,gp 就是 c 的 pb + templates。
早晨上了 cto 的一堂课,感触颇深——用过程式的语言来实现各种 oop 的设计技法——这也可以理解为什么公司里不过多地使用 c++ boost library 等 template features。
想起我在 n 年前去面试时,我跟一个公司的 cto 说:“用 c 可以实现几乎所有 c++ 的事情”——最后被骂了一顿——现在的 cto 告诉我:“这完全是可行的”。
话题回到 templates 的问题上。cto 早晨说过:“lpc 中的 mixed 类型是非常优秀的,相比之下,c 就没有完善的实现”。所谓的 mixed 就是一种可以放置下所有类型的类型,在 c 中的 void * 我不知道有些什么样的副作用,等春节期间好好地研究下 c。
Sunday, 7. January 2007, 09:44:26
python, c++, DOD, LOD
...
LOD?! 不要惊讶,是 Language-Oriented Development 的缩写,什么意思,就是
在开发一个系统之前,先写一种专门用于该系统的编码语言。
元旦放假前,听同事在谈论这个话题,刚刚洗澡的时候想到,自己总结了下:事
实上,不是要开发一种适合于系统的语言,这是相当耗时的做法,我们现在需要
的是一个面向系统本身的库;而 LOD 所强调的开发一种语言,实际上是在强调脚
本语言在系统开发中的作用。
根据 LOD 的思想,实际上很多事情在我们现在的开发工作中也是在不断进行的:
例如要开发一个系统,我们往往会先开发一个相应的库;但通常做法是:用 C++
开发一个系统的话,我们会使用 C++ 先开发一个库,然后用库和 C++ 组合一个
系统。LOD 的思想中强调了脚本语言在开发中的重要作用。
乱说了一堆,现在总结:LOD 我觉得应该叫做 DOD - Domain-Oriented
Development - 面向领域的开发。具体做法是,开发一个面向领域的库,可以由
C++ 或者任何合适的语言来开发,然后暴露给一种脚本,比如用 boost:: python
暴露给我非常推荐的 Python,然后使用该脚本语言进行系统的组合。使用脚本来
完成后期工作的优点是,其非常地灵活,甚至可以在动态更改它的一些配置。
Saturday, 6. January 2007, 10:25:42
c, vm, lpc, unmanaged
...
昨天快下班的时候在和同事谈论“把一个库,例如 sqlite c api 让 lpc 从中调
用”的问题,同事给了一个完整的方案,事后在回家的路上回想,发现其方法非常
繁琐。
晚上回家把问题总结了一下,其实是“把某某库的 api interface 暴露给某种
script vm”的问题。在 lpc 中,实现该过程的行为非常繁琐,而 python 通过
boost:: python 库,是非常简单的,而且 boost:: python 还可以把 python 类
暴露给 c++;今天陪老娘去逛街,回到家开门的一瞬间想到,managed c++ 把其
它非 managed code 暴露给 .net framework 的最好工具,当然,也是把 .net
framework 类、方法等暴露给 unmanaged 的最好工具——同样是双向的。
结论是,有 vm 的 script 一般都存在把非 vm 接口暴露给 vm,或者把 vm 中的
元素接口暴露给非 vm 的方法;script 是一种可以非常方便地组合 system
language (如 c/c++, ada) 等的最好工具;Stroustrup 所说的优先开发库的做
法不适合于 script language。
Saturday, 11. November 2006, 11:10:22
VC, Boost
非常非常地感叹 boost 的开发者不是一般的天才,居然把 VC6 玩得滚瓜烂熟:我踏着 boost 人的脚步进行 VC6 编码——这个库帮我节省了非常多的时间,现在几乎只要花精力在具体的项目实现上,不用去考虑某个技巧,太棒了!
Friday, 10. November 2006, 01:16:16
c++, Java, C#, Boost
...
我在上高中的时候,有一个同学跟我说了,学习的效率在于你知道“是什么”而不用去关心“为什么”——知道“是什么”所花费的时间比知道“为什么”要多许多,而且,即便你知道了“为什么”,你自己去实现一个比已经现有的东西要浪费许多的精力,况且,你不能肯定其是不是稳定的。
为什么这么说呢,从我最近做的项目中,发现了这么些东西——VC6 是不能实现模板类偏特化的,但 boost 实现了(是实现还是用其它什么手法不知道,但是它能达到我要的效果!),那么好,直接用就好了,无需去了解它是怎么实现的。
当你打算利用一个类的功能时,且它不是设计来被继承的、你也不能自己写一个外包类封装它,那么最好的办法就是写全局函数——感谢 C++,提供了那么强大的能力——在 Java 或者 C# 上,你只能实现 Vistor 模式。这么说是因为:昨天要利用 boost::functionN 来实现从 DLL 中动态加载函数的一些功能,本来打算实现 DLLFuncProxyN 但是碍于 VC6 不能实现模板类偏特化,想继承 boost::functionN 但是它本来就不是设计来被继承的;最好的办法就是写一个模板方法,封装一些功能。
这次生病对我有一个非常大的影响:生病前,因为我的完美主义,我几乎认为自己做出来的东西是最完美的——所以当遇到一个新问题时,我优先考虑自己实现;但生病后,自己清楚的发现,与其自己去实现一个别人已经实现过的东西,还不如直接使用别人已有的(也可能做得更好,比如 boost.config),而不需要去考虑怎么实现也不用担心自己的实现稳不稳定。简单地说,我以前碰到一个问题时是先考虑自己怎么做,而现在是优先考虑别人是否已经做了,自己拿来用就好了。
Thursday, 9. November 2006, 01:53:00
boost.test, Unit Test, UnitTest++, XML
...
非常严重的没话,原来 boost.test 写单元测试也非常的容易——文档中说了一堆又一堆,实际上看 examples 就知道了——做一个单元测试,其所花费的代价跟 UnitTest++ 差不多——而且它不依赖于对象,也就是说其代码可以轻易地嵌入到其它的代码中运行,实在是理想!
那么的话,再把 UnitTest++ 淘汰掉,我现在的代码仅使用 STL 和 boost 两个库了。为什么 boost 没有 XML 的功能呢?我现在要大量操作 XML 的话,还要考虑使用 libxml 或者 xercesc。
Monday, 6. November 2006, 14:17:16
Boost, VC
今天写代码,频繁地使用 #ifdef _MSC_VER 之类的宏进行编译器鉴别,后来想想,那些东西不是 boost.config 都已经做了吗——而且饱经测试,相当的稳定——那为什么我不直接拿来用呢?于是就开始用了,渐渐地发现,原来 boost.config 不只包含关于编译器的信息,它也包含着关于各种版本标准库、平台等等的信息,完全不需要再自己使用原始的、某种编译器特定的宏去判断了!
Monday, 6. November 2006, 03:12:38
Networking, Boost, OOPSLA, GUI
...
前天的一个偶然发现
http://www.crystalclearsoftware.com/,上面提出了一个 OOPSLA 想法——这是一个完整的 C++ 标准库的构想,包含了 reflaction, web, networking, gui 等等方面,而且是跨平台的。
但是终究只还是构想,要把构想变成实现,需要的是时间!再但是我喜欢 boost!
Monday, 30. October 2006, 02:06:11
c++, ACE, .NET Framework, GP
...
可以理解为什么那么多的 C++ 高手们青睐于 .NET Framework——因为长期的 C++ 纷争,造成 C++ 一直没有一个完整的标准库(什么,你说 Standard C++ Library?那个能提供线程、XML、正则、远程调用等等东西吗?),而 .NET Framework 非常全面,几乎所有需要的库功能都提供了——虽然在 C++ 上可以分别找到实现相同功能的各种库,但是因为不是统一设计,所以它们的风格,编码习惯等等都差别很大。
就说一个 boost 库吧,虽然有很多的功能,但是 boost 的库实在太多了,代码的公共命名看起来基本一致外,各库用各自的编码习惯。
关于 .NET, ACE, VCF, Xerces-C 等库,是在 OO 的基础上加入少量的泛型——这不是什么好的主意,特别对一个 C++ 程序员来说。我现在希望能在网上找到一个完完全全的 Generic Programming 的库。当然,希望它能比 boost 风格更统一。
Friday, 27. October 2006, 02:34:17
Plauger STL, Boost, STL, ANSI C
...
我没有料到很多人会这么反感下划线,特别是写在开头的下划线。
不能再使用 SGI STL 或者是 Plauger STL 的那种下划线写法了——事实上,因为它们是标准库,所以它们大可以使用 _ 加一个大写字母开头或者 __ 开头的 ID——因为 ANSI C 就是规定那些是为标准库准备的保留字——在各种项目中(除了开发标准库),那种方法应该也是被禁用的。
STL/boost 风格的那种用 _ 分隔量的写法看来也不太适合了,一个是那样的书写方式在很多人看来并不美观,我不知道除了美观外,还有别的更强烈的理由吗?
Tuesday, 24. October 2006, 01:16:55
STLPort, Plauger STL, Boost, CppUnit
...
作为一个团队项目,我只能忍痛割爱,去掉 STLport 的链接——要知道,STLport 和 boost, CppUnit 等等的项目需要很多复杂的设置,而且可能会出现很多意想不到的情况。
现在只能用 vc6 默认的 Plauger STL,我不知道这个标准库究竟可能达到什么程度,也不清楚如何升级这个库。总之有一点是肯定的:不能用这个版本的 STL 做任何关于标准容器的多线程操作。
Saturday, 21. October 2006, 04:42:16
Boost, Unit Test, CxxTest, CppUnit
...
曾经有人说过“越简单,越容易让程序员愿意写一个测试用例”,最近开始进行 TDD 开发,深刻地感觉到这点!
在使用 CppUnit 提供的用 testrunner 运行 DLL 写一个测试项目的方法,相对于其它的途径实在的太容易了。曾经有人说过,“boost.test 用一行的代价可以写一个测试用例”——事实上,一行什么事情都不能做,而且用在项目中不断地扩展用例的话,boost.test 实际上并不是什么好的方法;用来重新编写一个 boost.test 的用例时,更是需要大量的精力。
因此我决定启用 CppUnit;CxxTest 虽说有种种相对于 CppUnit 的好处,但其与 Visual Studio 的集成性不理想,因此不被采用。
Sunday, 8. October 2006, 13:22:07
Boost, STLPort, VC, ICC
开始并不知道这有这么复杂,但是命令实在太长了,索性写了一个批处理文件,内容如下:
bjam.exe "-sTOOLS=intel-win32-stlport" "-sINTEL_VERSION=9.1" "-sINTEL_PATH=C:\Program Files\Intel\Compiler\C++\9.1\IA32" "-sSTLPORT_PATH=D:\The_Last_Version_of" "-sSTLPORT_VERSION=5.1" "-sINTEL_BASE_MSVC_TOOLSET=msvc" "-sMSVC_ROOT=C:\Program Files\Microsoft Visual Studio\VC98" "--stagedir=D:\The_Last_Version_of\boost" "-sBUILD=debug release <runtime-link>dynamic <native-wchar_t>on" stage
Friday, 6. October 2006, 06:44:21
STLPort, Boost, VC, ICC
...
费尽了千辛万苦,终于在 VC6 + ICC91 的环境下编译成功了 STLport + boost。所谓的成功并非完全成功,理论上要编译出 59 个库文件,实际上编译出了 54 个,但比刚开始时好多了。
bjam 在编译参数中要使用 STLport 的话非常麻烦,有很多的误解,文档也非常不明了;我翻阅了部分 Jamfile,似懂非懂地自己算了些东西,总算让 boost 可以在 VC6 下使用 ICC91 编译了。
有点兴奋!
Monday, 2. October 2006, 03:45:54
VC, ICC, CVS, Boost
...
由于不知道的原因,vc6 + icc91 的环境编译出的从 cvs 下载的 boost 1.35 很多库文件缺失,可能是 boost 库的作者们并不曾使用 vc6 + icc91的环境吧,在 Regression Tests 中只看到 intel-vc8-win-9.1_x86_64, intel-vc8-win-9.1 和 intel-vc71-win-9.1 的测试结果。我不知道他们的机器怎么都那么好,用得起 vc8。早晨只好换 vc71,用其自带的编译器。
当然还是使用 STLport,vc71 的标准库不知道是不是线程安全的,但 STLport 肯定是,我也不开发 managed code 所以可以用这个库。
Sunday, 1. October 2006, 06:00:12
ICC, VC, SVN, STLPort
...
昨天我完成了两个非常重大的举措:
1. 用全新的 STLPort 代替了原先 VC6 自己的 PLSTL;STLPort 基于 SGI STL,最重要的是它是线程安全的!
2. 用中高级的 C++ 特性开始对历史代码进行重构。
我从 SVN 上签下的 STLPort 5.1 用 ICC 可以非常顺利地编译;但是现在碰到的问题是 boost 的很多库,比如 boost.filesystem 用 VC6 + ICC9.1 默认不生成 .lib/.dll 等库文件,在程序中无法直接链接上 filesystem 库组件,今天要好好琢磨下了。
Friday, 29. September 2006, 11:03:16
VC.ICC, Boost, STL, Visual Assist
我犯戒了——大量地使用了盗版的软件——正如我以前说过的,这在国内虽然是普遍现象,但不是滥用盗版的理由。前些天使用 Visual C++ 8.0,才体会到什么叫慢。我不知道 M$ 是怎么想的,但是它有两个非常致命的问题:
1. 慢,慢得惊人,当然我的机器不算非常快,但是如果为了使用一个编译器而换台机器,在有选择的前提下,我不会使用那个东西;
2. 不向下兼容:VC8 是不能直接编译 VC6 的代码(但 VC7.1 可以);这个决定非常糟糕,现在有很多 VC6 的历史代码,如果需要很大的代价才能编译的话,那么我以及很多人将选择不使用 VC8。
可以说 VC6 非常不标准,也可以说 VC8 非常标准,两种东西相交的结果就是原基于 VC6 开发的项目要经过大量的改造才能在 VC8 上编译(我有个东西改个半天,link 还是出错);VC8 同时是非常安全的,但是安全是需要代价的,最大的代价就是 VC8 无论编译还是使用起来都非常慢。
综合了许多的考虑,我决定使用 VC6 + ICC9.1 的组合——当然现在使用的是盗版——但如果这个组合能给我带来丰厚收益的话,我会考虑购买正版的。
今天用 ICC 编译一个 VC6 项目,并用 STL/boost 等重构了项目,效果非常好。原来使用 VC6 编译器,一堆的 warning,但是用 ICC 都没了,太爽了!
1 2 Next »
Showing posts 1 -
20 of 28.