博文

目前显示的是 一月, 2006的博文

C++ FAQs:为什么要把代码写的规范?

C++ FAQs:
为什么要把代码写的规范?每当我教一个新手写程序的时候,反复要给他强调的就是一定要把代码写规范,说简单点,就是千篇一律,让一千个一万个人写出来的代码几乎都是一个模样。对于规范性,我们要遵守的只有两条
1.尽力符合现有行业标准,比如ISO C++标准,POSIX,etc...
2.尽力符合此项目各程序员之间的统一约定,统一规范
3.遵守自己长久以来形成的固有习惯为什么呢?大概是以下几个方面的考虑。1.尽力遵守ISO C++标准等行业标准,是因为我们希望让这段代码可以在尽可多的编译器和平台上跑起来。(当然有时候恰恰相反,我们不故意不遵守标准是为了能让这段代码在老的平台和编译器上依旧能跑起来,这是后话)。而对于一个新手,应该先学习什么是标准,再学习如何在不标准的环境下去变通。
举例:
**使用#include <cstdio>代替#include <stdio.h>
**使用static_cast等代替老式类型转换
**尽量把main函数的返回值显式声明为int,而不是省略不写2.简单一致的代码易于阅读。尽管一个人一种风格,但是其实各类常见的C/C++风格也就不超过10种。比如如何命名变量如何书写注释等,都是有很多现成的规范的。3.简单规范的代码不容易出错。
因为简单规范,所以只需要和类似的代码一比较,就可以发现是否有什么错误。例如,如果我们要手动实现一个for_each,int a[10];
for(int* p=a;p!=a;a++){
//...
}这样的代码就很规范,因为我是仿照STL的for_each算法的实现来写的。你可能会说对一个数组遍历谁都会,但是,如果是一个复杂类型,比如std::list,比如std::vector呢。保持如此类似的风格来书写,可以帮助你减少不必要的麻烦。
(p.s.代码风格甚至可以细致到'='左右是否需要留白,大括号是应该写在一行之末还是单独占一行)4.规范的代码易于格式化程序处理。
比如,程序员总是懒得写文档,但是只要你的注释写的规范(符合某种自动化处理程序的规范),那么它就会根据你的代码把你的注释生成漂亮的参考文档。如果你一片混乱,或者同一个项目内程序员各自作主张,那么麻烦就来了。最后说一句,各种习惯规范,也不是简单的我说这样就这样,它说那样就那样的,也都是经过老牌程序员多年经验和很多的讨论才有的…

Software Transactional Memory

HistoryMaurice Herlihy http://www.cs.brown.edu/~mph/美国布朗大学计算机科学系教授。1993发表了论文《Transactional Memory:Architectural Support for Lock-Free Data Structures》,对于事务性内存的研究基本是随着这篇paper兴起的。最近我在读他和Nir Shavit写的《The Art of Multiprocessor Programming》。Nir Shavit http://www.math.tau.ac.il/~shanir/ 以色列Tel-Aviv大学任教。主要研究方向是多核机器上的并发数据结构,以及共享内存计算模型的数学基础。 1997年,Nir Shavit, and D. Touitou,在Distributed Computing杂志上发表《Software Transactional Memory》论文。这算是STM的公开研究的起点。 Deuce STM 的作者之一。Tim Harris http://research.microsoft.com/en-us/um/people/tharris/微软剑桥研究院研究员,2004加入微软剑桥研究院。Keir Fraser and Tim Harris. Concurrent programming without locks. TOCS: ACM Transactions on Computer Systems, 25(2), May 2007 最近他写了一本书,《Transactional Memory》,已经出了第二版,我在艰难的啃着。Simon Peyton Jones http://research.microsoft.com/en-us/people/simonpj/微软剑桥研究院研究员,1998年加入。研究重点主要在Haskell这样的函数式语言。David Dice http://blogs.oracle.com/dave/ Sun的工程师,TL/TL2的作者。Bratin Saha Intel的Programming Systems Lab 的高级研究员,参与了Nelhalem的cache同步及并发控制的设计。McRT-STM的设计者。Michael L. Sc…