C/C++ young library 设计与实现 — 序篇

    开始有实现自己的STL的想法始于2003年,当时刚开始深入学习STL,对各个编译器STL
还不是很了解,大概在2004年年初的时候,在工作中碰到的一件事情促使我开始了这项工作。
当时,因为工作的需要,我需要Borland C++ Builder下调用Visual C++写的动态链接库,
我在动态链接库的一个接口函数中使用了vector,不用说,大家也可以想到,这个函数无
法在Borland C++ Builder下被调用——两个编译器实现的STL完全不同!当时不知所以,后
来在网上查阅了资料,最主要的是阅读了侯捷先生的《STL源码剖析》之后,才明白了原因。
当时没有做太多的考虑,只是想解决STL的移植问题,心想SGI STL移植太麻烦,不如自己
写一个算了,就算写不出来,也算是锻炼了自己的编程能力,复习了一遍数据结构和算法
好了。于是,工作就这样开始了。
    在2005年年中,我完成了用C++实现的一个包含了STL容器和算法以及部分function
object的模板库,因为只想自己用,所以用自己的性的谐音起了一个namespace——young。
但是,理想是美好的,现实是残酷的,在开发的过程中,我一直使用GCC,实际使用时才
发现大多数编译器无法正确编译!唉!说来也怪自己,在看《STL源码剖析》时,直接把
移植那一部分给跳了过去……自我感觉程序写的还算整齐,之后,我把这个库的源码在网上
共享,供想学习STL实现的朋友参考。而这个事情随着我工作的加重,也就被我慢慢的淡
忘了,直到2005年12月……当时我所在的公司是一家从事电力系统产品开发的公司,弱电部
分主要以嵌入式产品为主,我所在的项目是个例外,是一个以PC为上位机,以单片机为下
位机的产品,我主要负责上位机部分。2005年年末的时候,我所负责的部分已快接近尾声,
有一天,负责下位机的同事和我聊天时表示他准备在新产品中使用DSP,他要我在完成工作
之后帮他实现一个实时操作系统。言者无心,听者有意,我正想从事一些基础软件的开发,
遂开始了学习和预研,在设计的时候,我发现因为自己长期在PC平台下工作,习惯了大量
使用STL来进行开发,但是在嵌入式系统的开发中就没有这种待遇了,这对于习惯了使用
STL的我来说可不是一个好消息,“工欲善其事,必先利其器”,我遂决定先开发一个STL的
C实现,再在此基础上进行开发。在开发新的C库的过程中,我大量借鉴了原先开发的C++模
板库的经验,为了区分,我把原来的模板库重新更名为MiniSTL,新的C库称为youngc。
    早在写MiniSTL的时候,我就感觉到C++ template更像一种构建在C++类型系统上的
shell语言,但是使用模板来进行一些传统的开发未必合适。例如模板带来的代码膨胀问题
就是一个头疼的事情。在写MiniSTL的时候,我发现所有的容器类大部分代码都是相同的,
只是调用的默认构造函数、复制构造函数、赋值操作符、析构函数不同而已;所以在写完
youngc之后,我又尝试性的以youngc为kernel,以C++ template为shell,先写了一个
vector,写完之后一调试,发现完全可行!于是,趁热打铁,不到两个星期就把STL中的容
器以这种方式一一实现了,而且还在参考了C++ TR1后,实现了unordered_set, unordered_map,
unordered_multiset、unordered_multimap四个新增的容器。
    在工作以及完成程序库的过程中我积累了一些经验,看着网上不少刚学编程的朋友欲
入门而不得其法,我觉得我应该写些东西,希望读过这个系列文章的朋友能少走一些弯路。
有鉴于此,我想以我实现的这个程序库为例,向刚入门的朋友讲解我在实现过程中所学习
和使用的技术,C/C++编程,数据结构、算法以及一部分软件工程的知识是讲述的重点。
说到软件工程,没有从事过实际工作的朋友很难理解为什么要学习这门“华而不实”的学科,
其实我也是在完成了一个实际的开发工作后才真正的有一点理解的!尤其是测试的重要性,
我也是在最近才理解!我所在的公司有两位年过50的专家,他们就告诉我,开发中最难的
是设计和测试,实现是最简单的。在库的发布中有我编写的数千行的交互式的测试程序,
有了它们的帮助,我找出了程序中的很多致命的BUG,在后续的文章中我将详细的介绍。


    源码我已在sourceforge上发布,下载地址为:
    https://sourceforge.net/projects/theylib/files/


附:下面列出的书包含了我在实现young程序库所用到的知识,这些书都是我仔细读过或走
马观花翻阅过的。
    《C程序设计语言(第二版)》
    《C++程序设计语言(特别版)》
    《算法导论(第二版)》
    《数据结构与STL》
    《泛型编程与STL》
    《STL源码剖析》
    《深度探索C++对象模型》
    《C++ template》(中文版)
    《Exceptional C++》(中文版)
    《More Exceptional C++》(中文版)
    《Exceptional C++ Style》(中文版)
    《Effective STL》
    《C++编程规范》
    《设计模式:可复用面向对象软件的基础》
    《代码大全(第二版)》













  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值