Skip to content

cxx_rules

Anthony Lee edited this page Nov 13, 2018 · 5 revisions

C++编码重要原则

不使用标准库(std);不使用异常处理(expection);尽量少用模板(template)。

不使用标准库

细心的人可能会发现,项目的源代码中从不见 namespace std,为什么呢?有 std::map、std::list、std::vector 等等这些现成有用的标准库,为何偏偏去用 BString 和 BList 等等这种专用的类呢?

BeOS 大肆使用多线程的时候,很多编译器的标准库都并非线程安全,包括 C++ 标准库 std。当时,PowerPC 平台主要使用 Metrowork CC 编译器,x86 平台用的是 GNU GCC 2.9x,这两个编译器的标准库都存在问题;即使在当年,其它平台的编译器所提供的标准库也大多数不兼容多线程环境,比如 Windows 平台下的 Visual C++;也正是因为当时标准库的安全、效率等问题,才催生了 Boost 项目。

项目使用 BeOS API,即程序与多线程密切相关(虽然一般程序基本上只有两到三个线程),即使大多数最新编译器亦已对标准库进行了线程安全相关修正,项目依然继承 BeOS API 的习惯:不使用标准库。另外,从项目整体编译后占用空间考虑,不使用标准库亦是最佳选择(libstdcpp占用将近 1MB),与标准库相关的仅有 C++ ABI 中的类信息(class info)。

项目结合 OpenWrt 系统后直接采用 uClibc++ 作为标准库,适合嵌入式平台开发的同时,亦可满足部分开发需求。

不使用异常处理

基于 “不使用标准库” 同样原因,项目同样不使用异常处理。另外,亦建议不使用进程信号(signal)的手法处理一般问题。

尽量少使用模板

为方便快速定位问题所在,建议尽量少使用模板。虽然 BeOS 最后一个难产的 Dano(5.1d0) 版本中 Interface2 大量使用模板,但事实证明,复杂度越高的模板,定位出错原因更困难。

Clone this wiki locally