专家与新手
C++ 已经慢慢地变成了一种 "专家友好" 的语言. 在一个专家聚集的地方 (人或者 web 上), 很难在某些 "仅仅" 为了帮助新手的地方达成一致.通常的意见 (在这种集中情况下) 大都是: 我们能做的最好的事是帮助新手成为专家. 但是成为专家是需要时间的, 而大多数人们需要的是在这过程中达到一定的生产率. 更令人感兴趣的是, 许多 C++ 新手并不期望或者并不需要成为 C++ 的专家. 如果你是一个需要每周做一些计算的物理学家, 或者一个跟软件相关的某个商业过程的专家, 或者一个正在学习编程的学生, 你只想要学习语言中那些能够让你完成任务的特性. 你不想成为一个语言专家 - 你想成为你自己的领域的专家并知道一些能让你完成工作的编程语言就足够了. 在合适的库的支持下, C++ 可以象那样用 - 那样用得很广泛. 可是, 各种陷阱, 缺陷, 以及教育方式使得这种 "临时使用" C++ 的方式变得不必要地困难. 经过适当的努力, C++0x 能够在这个领域做得更好. 考虑一些小的例子. 你是否曾经写过一些类似这样的代码:
vector<vector<double>> v;
或者这样:
int i = extract_int(s); // s is a string, e.g. "12.37"
或者这样:
vector<int>::iterator p =
find(tbl.begin(),tbl.end(),x); // tbl is a const vector<int>
如果没有, 我想你大概用过另一种不同的, 有它自己的问题的 C++ 风格, 或者只写过很少的 C++ 程序. 允许 >> 作为两个模板参数列表的结尾能解决第一个问题. 提供一个标准库从 string 里解析出数字值能把一个新手从寻找 (显然是专家级的) 象 extract_int() 这样的函数的原型的 (相当强的) 困扰中解救出来. 允许 p 的类型从它的初始化表达式中推导出来能解决第三个问题:
auto p = find(tbl.begin(),tbl.end(),x);
// tbl is a const vector<int>
// p becomes a vector<int>::const_iterator
>> 和 auto 关键字解决方案已经在 C++0x 的原则里得到了批准. 解决 C++ 在支持 "任意背景的新手" 方面的问题需要语言和标准库两方面的共同努力. 涉及到教育的方面会是中心; 比如 [4].
基于 concept 的重载 (见例子节) 可以允许更多的简化:
auto p = find(tbl,x);
// tbl is a const vector<int>
// p becomes a vector<int>::const_iterator
为新手 (所有级别的) 而增加的特性不能通过产生某些 "犹太人区" 的方式从语言的其他部分隔离开来. 跟所有的特性一样, 它们必须是能在主要的系统中使用, 能平滑地与别的特性交互, 并且提供一条学习整个语言和标准库的路径.
总结一下: C++0x 在支持任何背景的新手方面做得比现在更好 - 既通过更不易错误使用的语言, 也通过更多的库支持.
若你在年轻时上过水木, 它会一生跟随着你, 如一场浮动的盛宴
禁色和禁果仍被保存吗?
这世界有否给潜移默化?
离过家回了家仍住中环吗?
-----信有带到新居里烧吗?
一切美好的都会消失
人要是没有理想, 跟咸鱼有什么两样?
“把人们引向艺术和科学的最强烈动机之一,是要逃避日常生活中令人厌恶的粗俗和使人绝望的沉闷,是要摆脱人们自己反复无常的欲望的桎梏。一个修养有素的人总是渴望逃避个人生活而进入客观直觉和思维的世界。”
不要忘了,这个世界穿透一切高墙的东西,它就在我们的内心深处,他们无法达到,也接触不到,那就是希望。(FROM《肖申克的救赎》)