荣耀/刘未鹏 译
荣耀: Herb Sutter和Stan Lippman目前正在微软主持C++/CLI的设计工作,意图将动态的、基于组件的.NET编程模型和ISO C++集成在一起。您对此有何评价?您认为C++需要.NET吗?您认为C++/CLI会取得成功吗?
Bjarne: 不,C++根本不需要.NET,C++只需要最小限度的运行时支持,用于new/delete、异常处理以及RTTI等,而且仅当你使用这些特性时才需要。C++程序通常可以使用每一分可用的资源,在硬件上直接跑。C++的这些能力使其非常适合于系统级编程以及嵌入式系统任务。当然,也有些C++应用需要.NET,比如那些为了和微软.NET框架和服务紧密集成而专门设计的应用。然而,C++语言和标准库的宗旨是远离这些平台相关性的纠缠。另一方面,许多.NET设施都依赖于C++,因为除了C++之外,再也找不到更通用、更高效的语言来很好地完成这个任务,从这个意义上说,.NET需要C++。
从“很多人将会使用它”这个意义上来说,C++/CLI是会成功的。使用.NET CLI,开发者选择甚少,而C++则是最佳选择之一,而且很明显在Windows上也是,因为微软给予C++最好的支持。话虽如此,我仍然倾向于在设计系统时保持良好的移植性,而将对平台相关或专有特性的使用限制在特定的代码块中,并使用以ISO标准C++所表达的接口去访问它们。
荣耀: 尽管我现在相信这是一个毫无意义的问题,不过我想我最好还是澄清一下。当我说“C++需要.NET吗?”,我的意思是想问“我们需要.NET来使C++更普及吗?”。这就好比问“世界和平需要美国吗?”,或者,“我们需要美国来维护世界和平吗?”。当然了,我们都不喜欢讨论政治性话题,也许这个比方很不合适。
Bjarne: 政治关乎可行性。从这个意义上来说,我们必须考虑政治,而你的问题当然也是合理的。鉴于微软在软件领域的地位以及它对.NET强大而完全的支持(将.NET的系统接口以CLI来表达),.NET的地位会变得很重要。要想在微软的世界里玩得转的话,C++必须很好地绑定到.NET。事实上这种绑定(C++/CLI)已经建立了,微软还为之申请了ECMA标准。.NET跟我理想中的尚有些差距,而C++/CLI如果让我来设计的话可能也不会是这个样子,然而不可否认的是,C++/CLI在.NET上的确是能力非常强的语言,也是迄今为止为.NET设计的语言中能力最强的。如果微软未考虑将C++作为.NET上的关键语言之一,或者.NET平台上的应用创建者没有坚持对C++提供第一流支持的话,情况会糟很多。
所以,为了能够在微软的世界里流行,C++需要一个良好的CLI绑定。我仍然鼓励人们将C++/CLI仅仅视作一个绑定物。这就是说,把对C++/CLI特性的使用隔离到一些特定的区域里,并且通过ISO标准C++设施去访问它们。C++/CLI的一些设施使其成为一门具有吸引力的语言,然而和标准C++却相去甚远,所以如果你在代码中到处使用这些C++/CLI设施的话,那么你将失去平台无关性,并有损失性能优势的潜在危险。
荣耀: 鉴于Herb Sutter的双重身份:ISO C++标准委员会主席和微软软件架构师,C++/CLI对C++0x标准会产生什么样的影响?这种可能的影响是您希望看到的吗?
Bjarne: C++/CLI会在一些领域对C++产生影响,因为将会有许多人使用它。显而易见,在使用中人们将会建议加入一些新的设施,以便和ISO C++平滑地互操作。在确保ISO C++平台中立的前提下,这些建议会依据其优点而被评估。我并不认为Herb的双重身份会带来任何负面影响。请注意,ISO委员会的会议召集人的角色属于管理方面的。我认为微软将Herb的才能贡献到标准化进程中是一个积极的信号。一如往常,微软在实践着其“拥抱并扩展”策略,但至少他们拥抱的是ISO C++而非某种C++方言。
荣耀: C++0x标准大概可于哪一年颁布?目前标准化工作进展如何?我们在这个新标准中预期可以看到哪些新特性?
Bjarne: 我希望三、四年内能够颁布,不过目前我们还没有一个明确的进度表。
我们打算在语言的扩展上持保守态度,并在与C++98的兼容性方面仔细斟酌。改进的关键可能会落在对泛型编程更好的支持以及对新手更易学习上。我们期望一个关于模板实参的类型系统“concepts”能成为泛型编程的基石。
在标准库的扩展方面我们打算胆子更大一些。新标准库技术报告也许会使你对它的发展方向有一些认识。我们的关键目标是使标准库成为一个更广泛的系统编程平台!
荣耀: 一个冒昧的问题。为什么C++标准委员会主席是Herb Sutter而不是您?我记得您是进化工作组主席,我们都很有兴趣知道您在目前标准化过程中具体从事什么工作。
Bjarne: 我并不想担当会议召集人的职务。Herb和他的前任们在那个职位上比我所能做到的要出色得多。会议召集人主要负责管理性和组织性的事务。我的(非正式的)角色在于努力维持语言一致性的方向。我是语言进化工作组的主席,这个工作组负责处理所有语言扩展方面的提议。这个职位意味着绝大部分定义语言改变的文本都是我写出来的,而这些文本最终形成了标准文档。
作为进化工作组的主席,目前我正致力于三件事情:“concept”,改进的初始化设施,以及对C++新手的更好支持。你可以从我的主页上以下链接看到人们对标准下一个修订版(即“C++0x”)建议的期望特性列表:http://www.research.att.com/~bs/C++.html。简单的数一下你就会发现这些特性根本不能全部塞到标准中去,所以,我们需要一些优先级上的考虑。此外,我们还需要把注意力集中到一些相互关的问题上,而不是每次单独处理这些个体提议。如果把每个特性都单独考虑的话,你无论如何也不能得到一个内在一致且易教学的语言。正如语言本身一样,特性必须是为解决问题而设计的,而不仅仅是一个一个地“看上去很美”。
让我扼要介绍一下我眼下正以高优先级进行的三个语言扩展:concepts,初始化,以及“消除一些令人不愉快的瑕疵”:
在《C++语言的设计与演化》(D&E)中对模板的讨论部分,我花了整整三页来讨论模板实参的约束。很明显,我觉得它需要一个更好的解决方案。在使用模板(例如标准库算法)时哪怕出一丁点儿差错都可能招致极其“壮观”而无用的错误信息。问题在于,模板代码对其模板实参的“期望”是隐式的。让我们考虑一下find_if():
template<class In, class Pred>
In find_if(In first, In last, Pred pred)
{
while (first!=last && !pred(*first)) ++first;
return first;
}
这里,我们对类型In和Predicate作了若干假设。从代码中我们可以看出,In必须支持!=、*和++,并且这些操作符还必须具有恰当的语义。另外,我们必须能够拷贝In类型的对象作为实参和返回值。类似地还可以看出,我们可以“以*作用在In对象上所返回的值”作为实参来调用Pred,并且把“!”运用到该调用返回的结果上,从而得到一个可以在语义上看成是布尔值的东西。然而,这些约束在代码中都是隐式表达的。标准库为前向迭代器(此处为In)以及谓词(此处为Pred)小心翼翼地记录了各自要求的条件,但编译器可不会阅读文档!试试以下错误的代码,看看你的编译器会有什么反应:
find_if(1,5,3.14); // 错误!
我以前的想法提供了一个不完备、但相当高效的解决方案,即使用一个构造函数来检查对于模板实参的假定条件(见D&E 15.4.2),这个解决方案现在得到了广泛运用,被称为“concepts(概念)”或“constraints classes(约束类)”。你可以从我的主页上的技术FAQ中找到一些例子:http://www.research.att.com/~bs/bs_faq2.html#constraints。
然而,我们真正想要告诉编译器的是“我们期望模板实参是什么样子的”或者“我们期望模板实参满足哪些要求”,例如:
template<Forward_iterator In, Predicate Pred>
In find_if(In first, In last, Pred pred);
假设我们可以表达Forward_iterator和Predicate是什么,编译器就能够在不用查看find_if()定义的情况下检查对它的调用是否正确。这里我们所要做的就是为模板实参构建一个类型系统。在现代C++中,这种“类型的类型”被称为“concepts”。有多种方式可以用于表达concepts,眼下我们暂且把它们看成一些受到直接的语言支持并具有优雅语法的“约束类”。一个concept表明了一个类型必须提供哪些能力,但并不强制规定它们如何提供这些能力。理想的concept(例如<Forward_iterator In>)应该非常类似于数学抽象(对于任意的In,它必须可被递增(++)、解引用(*)以及拷贝),就像原来的形式“<class T>”从数学上来说是“针对所有的类型T”那样。
这样一来,在仅仅给出find_if()的声明的情况下,我们可以写:
int x = find_if(1,2,Less_than<int>(7));
这将会失败,因为int并不支持解引用(*)。换句话说,这个调用将不能通过编译,因为int并不是一个Forward_iterator。很重要的一点是,这将会使编译器更容易在该调用首次被看到的那一点上报告用户所犯的错误。
遗憾的是,仅仅知道iterator实参是Forward_iterator以及predicate实参是Predicate还不足以保证对find_if()的调用能够成功编译。这两个实参类型之间是有着交互作用的。说得详细一点就是,predicate所接受的实参是一个被解引用的iterator (pred(*first))。我们的目标在于对模板进行“和调用相分离”的完全检查以及无需查看模板定义就能对每次调用进行的完全检查,所以,concept必须具有足够强的表达力,以便处理这种模板实参之间的交互关系。方式之一是对concept本身也进行参数化,就像模板本身的参数化那样。例如:
template<Value_type T,
Forward_iterator<T> In, // 对一个T序列进行迭代
Predicate<bool,T> Pred> // 接受一个T并返回一个bool
In find_if(In first, In last, Pred pred);
在这儿,我们要求Forward_iterator必须指向一个T类型的元素,而该元素的类型必须和Predicate的实参类型一样(译注:实际上只要类型兼容即可)。
这方面的工作正在进行中。你可以从C++委员会的文件、学术文献以及有关C++0x的讨论中找到这方面更多的信息,在这里我没有太多的时间或地方进行更详细地阐述。“concept”的目标是提供模板使用和模板定义的完美的分离式检查,同时不引入任何运行期负担(译注:在C#的所谓的泛型中,concept只不过是间接函数调用的语法糖而已,运行期额外负担仍然存在。)以及不必要的concept耦合(译注:在C#所谓的泛型中,concept要求模板实参继承自一个公共基类,因此耦合仍然存在。)。
换句话说,我们想要把静态类型检查的好处引入到C++中的高度抽象的层面上去,同时不损及目前的模板技术所提供的灵活性和效率。
C++的基本思想之一是“对用户定义类型提供和内建类型一样良好的支持”(见D&E4.4)。但考虑下面这个例子:
double vd[ ] = { 1.2, 2.3, 3.4, 4.5, 5.6 };
vector<double> v(vd, vd+5);
我们可以直接使用“初始化列表”来直接初始化数组,而对于vector,最好的情况是我们可以先创建一个内建数组然后再用它来初始化vector。如果只有很少的几个初始化值,我可能会倾向于使用push_back()以避免将初始值的数目显式“写死”在代码中(上面例子中的初值是5个):
vector<double> v;
v.push_back(1.2);
v.push_back(2.3);
v.push_back(3.4);
v.push_back(4.5);
v.push_back(5.6);
我想任何人都不会认为这两种解决方案有任何“优雅”可言。要想得到可维护性更好的代码并且让vector比内建(具有固有的危险性)数组更“讨人喜欢”的话,我们需要这样的能力:
vector<double> v = { 1.2, 2.3, 3.4, 4.5, 5.6 };
或者:
vector<double> v ({ 1.2, 2.3, 3.4, 4.5, 5.6 });
由于实参传递是依据初始化来定义的,因此这对接受vector为参数的函数同样奏效:
void f(const vector<double>& r);
// …
f({ 1.2, 2.3, 3.4, 4.5, 5.6 });
(译注:这里即是说,实参传递和初始化的语义是一样的,例如:
void f(T a);
f(x);
这里“把x作为实参传递给a”的过程等同于
T a = x;
这是个初始化表达式。)
我相信这种初始化器(initializers)的一般形式将会成为C++0x的一部分,这不过是将成为对构造函数进行全面检修的一部分,因为人们已经发现了有关构造函数的不少弱点,这些弱点看起来可以通过对构造函数进行一些修整来解决,例如“转发构造函数(forwarding constructor)”、“有保障的编译期构造函数(guaranteed compile-time constructors)”以及“继承的构造函数(inherited constructors)”等。
第三件事是“剔除语言里的一些令人不愉快的瑕疵”,也就是说,修整一些细小的不合常规或不方便的东西,它们对有经验的C++老手不会产生什么影响,然而却可能严重打击C++新手。一个非常简单的例子就是:
vector<vector<double>> v;
在C++98中,这里有一个语法错误,因为“>>”被看成一个单独的词汇标记,而不是两个“>”。正确的写法如下:
vector< vector<double> > v;
对于C++98这样一个“不近人情”的规则,虽然有足够技术上的理由,但这不应该强加给任何背景的新手(包括其它语言的专家)。如果编译器不接受前一种最为明显的v的声明形式的话,那么C++用户和教师都会在这上面浪费大量的时间。我希望这个“>>问题”以及其它一些瑕疵都会在C++0x中消失。事实上,在和Francis Glassborow以及其他一些人的工作中,我一直努力去系统地消除出现频率最高的此类语言瑕疵。
荣耀: 和大多数人一样,我认为C++缺乏一个大一统的库是阻碍C++更为广泛地使用的关键原因,您认为现在C++社群有足够的资源来开发一个像Java或.NET那般规模的库了吗?如果没有,我们该怎么做?我发现使用形形色色的第三方库非常不方便(一个插曲。我在使用微软Visual C++时,有时希望使用STL组件,例如vector,但由于我大幅使用了MFC,而MFC中也有类似的容器,所以,虽然vector更好用,但为了避免因链接两个不同的库而导致文件体积增大,我最终往往放弃使用标准库。不过,倘若标准库提供了MFC所提供的所有功能,我将肯定全部改用标准库)。
Bjarne: 毫无疑问,MFC是迄今为止被广泛运用的最糟糕的基础库。它违反了一个好的C++设计应该遵循的大多数原则。它严重地扭曲了许多程序员对于“什么是C++”的看法!
当然,我也认为缺乏全面且标准的基础库是C++社群的一个主要问题。对于个体程序员来说,这也许是他们面对的最困难的问题。我在《C++语言的设计与演化》中谈到了这一点,至今我仍然坚持这一点。
C++社群没有一个有钱的公司来支持“平台中立的”标准库的开发 — 从来没有,跟其它专有语言(以及它们的“标准”库)相比,这一直是阻碍C++发展的一道藩篱。和专有的基础库的扩展速度相比,我们对标准库的扩展是很慢的(不过和其他ISO标准库相比,我们的扩展速度应该算是比较快的)。我们还期望能够和新兴的非标准库(译注:如Boost)逐渐达成更为平滑的整合。别忘了,当年MFC以及其它“后80年代”风格的库被设计出来投放市场之际,尚无任何标准库可作它们的构建基础。因此,我希望今后的专有库和开源库都能充分尊重标准库,以便使它们之间的互操作变得容易 — 至少容易一点点。
C++社群并不是为大规模设计和实现而组织的。C++社群中也没有什么传统或惯例。和其它社群相比,我们缺少一个“统帅”,他可以有效地激励新库的创建,否决或“保佑”我们的努力和成果。然而,我对“统帅模式”是否可行心里没底 — 除非你所做的事情只是基本的模仿而已。Boost(www.boost.org)是一个优秀的成果,它的某些方面已经超出了模仿的范畴,然而它仍然缺乏一个明确的目标以及用于维持自身发展的权威机构或权威人物。
在以下三个相关的领域中,大规模的合作努力对于C++社群而言是必需且有意义的:基本的并发编程库(包括线程、锁和lock-free算法等);平台无关的操作系统服务库(目录和文件操纵以及套接字等);以及GUI编程库。前两个看起来是可行的,但要想建立一个标准的GUI库,也许从技术上、经济上尤其是政治上都显得太困难了。
荣耀: 是的,我相信对于许多C++程序员而言,一个标准的GUI库是极其重要的。许多人以为GUI库不是一个太复杂的问题,但我却认为这可能是最棘手的问题。为了解决它,我们可能需要难以置信的大量的资源。同时我认为政治问题可能是其他问题的根源。举个例子,我们知道Windows的GUI风格和Java的GUI风格是不一样的,甚至不同版本的Windows的GUI风格也不一样。而且我们知道GUI风格很不稳定,它发展演化得非常快,而且很容易被微软这样的大公司所引导和操纵。
Bjarne: 在这个问题上,资源(包括财力和人力)是一个关键问题,与“保持设计蓝图的一致性”同样重要。另外,即使我们已经有了这三样东西:蓝图、人力(数打甚至更多)、以及财力(至少要担负得起一些优秀的人在这个项目上的全职工作),这仍然会是个需要N年才能完成的项目。而SUN、微软、苹果以及其他主要竞争对手将会做些什么呢?毕竟包含了一个工业强度的GUI库的ISO标准C++对于它们的专有系统可不啻一记重击啊!我的猜测是它们大多会通过强大的市场手段来保护既得利益,标准委员会可不是为了在这种市场环境中呼风唤雨而组织起来的,我们至少还需要一个工业社团的支持以及和开源社群主力军的联盟。
荣耀: 在您看来,C++要想继续向前发展,除了开发一个更为广泛、更具威力的库以外,我们还应该做些什么?
Bjarne: 我认为库方面的工作是关键。标准委员会没有足够的资源去创建一个全新的库,而且无论如何“让委员会设计”都不是个好主意。如果人们创建了新的库,在紧密相关的领域把它们的努力融合起来以达到冲突最小,并且文献记录良好(并非只记录细节,还有设计原则),那么他们也许可以把这些东西带到委员会来,并有希望让它们成为标准。如果没有成为标准的话,至少他们的努力有最大的机会成为“准”标准。有此打算的人应该把C++真正当作“C++”(使用继承、模板以及异常等)来看待,而不是从其它特性不是那么丰富的语言中抄袭设计而来。如果一个库的设计被发现没有用C++最佳地表达出来,那么它被接受为标准的几率微乎其微。
另一个可作贡献的领域是对技术的开发和推广。C++往往被以“很不理想”的方式使用着,MFC就是一个典型的例子,它甚至还达不到80年代中期对一个良好的OO设计的看法!我所说的“不理想”,是指没有达到它所能达到的可维护性的设计(通常这是由于对设计决策的糟糕的分解、低劣的封装以及对概念的拙劣表达而造成的),而并非指在外部压力下要尽快把项目赶出来的个体程序员或团队的“不理想”。通常,一个较好的设计和现有的实践是背道而驰的,后者往往需要立即付出代价(往往在很短时间内)。显然,任何显著的改进都需要在“一切照常”的基础上,并且至少追加学习所需的代价以及时间上的延迟。
这就把我们带到了最重要并且也许是最明显的改进实践的途径面前:教育。我们对编程和设计的教育必须比当前做得更好。新的语言特性、新技术以及新库碰到了不能理解并使用它们的人仍然是无用之刃。遗憾的是,我们恰恰缺乏优秀的C++入门书籍。Francis Glassborow的新书《You Can Do It》(译注:中文版《C++编程你也行》即将由人民邮电出版社出版)和Koenig & Moo的《Accelerated C++》是打破旧式而令人厌烦的教育方式的例子。那种教育方式把C++当作一个“稍微好一点的C”或者一门在实现“真正的面向对象”方面失败的语言。前者倾向于用一大堆语言技术细节来迷糊和恼怒读者,偏离了学习好的编程及设计技术的正确道路。后者通常除了存在这些问题之外,还没能够教会在性能攸关的领域里编程的必要技术,而且没有让人感受到静态类型系统的价值。尤其遗憾的是,Glassborow和Koenig & Moo的书的风格都不是编程入门教材的传统风格,这也阻碍了它们的广泛普及。
我自己的两本书《C++程序设计语言》和《C++语言的设计与演化》的目标读者则是已经知道如何去编程然而不知道如何使用C++的人。这两本书确实满足了这部分读者,但我们要做的还不止这些。
任何时候只要有可能,程序员都可以通过将程序的主要部分用ISO C++来写,并将系统依赖性封装起来,从而来支持标准。也就是说,把系统依赖性限定到特定的区域,并通过以标准C++表达的接口去访问它们。通常这并不容易做到,因为厂商总是怂恿程序员在代码中使用专有的、排他性的特性,但这就影响了可移植性,从而使程序移植到其他系统上非常困难。然而,站在应用构建者的立场来说,从长远来看,挣脱厂商的束缚、维持可移植性是一件好事,这种隔离系统依赖性的努力终将从经济和技术两方面都得到回报。
荣耀
2005年1月
南京师范大学
www.royaloo.com
A.I. 人工智能
A2A integration A2A整合
abstract 抽象的
abstract base class (ABC)抽象基类
abstract class 抽象类
abstraction 抽象、抽象物、抽象性
access 存取、访问
access function 访问函数
access level访问级别
account 账户
action 动作
activate 激活
active 活动的
actual parameter 实参
adapter 适配器
add-in 插件
address 地址
address space 地址空间
address-of operator 取地址操作符
ADL (argument-dependent lookup)
ADO(ActiveX Data Object)ActiveX数据对象
advanced 高级的
aggregation 聚合、聚集
algorithm 算法
alias 别名
align 排列、对齐
allocate 分配、配置
allocator分配器、配置器
angle bracket 尖括号
annotation 注解、评注
API (Application Programming Interface) 应用(程序)编程接口
app domain (application domain)应用域
appearance 外观
append 附加
application 应用、应用程序
application framework 应用程序框架
Approximate String Matching 模糊匹配
Arbitrary Precision Arithmetic 高精度计算
architecture 架构、体系结构
archive file 归档文件、存档文件
argument引数(传给函式的值)。参见parameter
array 数组
arrow operator 箭头操作符
ASP(Active Server Page)活动服务器页面
ASP.NET worker process ASP.NET工作者进程
assembly 装配件、配件
assembly language 汇编语言
assembly manifest 装配件清单
assert(ion) 断言
assign 赋值
assignment 赋值、分配
assignment operator 赋值操作符
associated 相关的、相关联的
associative container 关联式容器(对应sequential container)
asynchronous 异步的
atomic 原子的
atomic operation 原子操作
attribute 特性、属性
audio 音频
authentication service 验证服务
authorization 授权
B2B integration B2B整合、B2B集成(business-to-business integration)
background 背景、后台(进程)
backup 备份
backup device备份设备
backup file 备份文件
backward compatible 向后兼容、向下兼容
bandwidth 带宽
Bandwidth Reduction 带宽压缩
base class 基类
base type 基类型
batch 批处理
BCL (base class library)基类库
Bin Packing 装箱问题
binary 二进制
binary function 双参函数
binary large object二进制大对象
binary operator 二元操作符
binary search 二分查找
binary tree 二叉树
binding 绑定
bit 位
bitmap 位图
bitwise 按位...
bitwise copy 为单元进行复制;位元逐一复制,按位拷
bitwise operation 按位运算
block 块、区块、语句块
bookkeeping 簿记
boolean 布林值(真假值,true或false)
border 边框
bounds checking 边界检查
boxing 装箱、装箱转换
brace (curly brace) 大括号、花括号
bracket (square brakcet) 中括号、方括号
breakpoint 断点
browser applications 浏览器应用(程序)
browser-accessible application 可经由浏览器访问的应用程序
bug 臭虫
build 编连(专指编译和连接
built-in 内建、内置
bus 总线
business 业务、商务(看场合)
business Logic 业务逻辑
business rules 业务规则
buttons 按钮
by/through 通过
byte 位元组(由8 bits组成)
cache 高速缓存
calendar 日历
Calendrical Calculations 日期
call 调用
call operator 调用操作符
call-level interface (CLI)调用级接口(CLI)
callback 回调
candidate key 候选键 (for database)
cascading delete 级联删除 (for database)
cascading update 级联更新 (for database)
casting 转型、造型转换
catalog 目录
chain 链(function calls)
character 字符
character format 字符格式
character set 字符集
check box 复选框
check button 复选按钮
CHECK constraints CHECK约束 (for database)
checkpoint 检查点 (for database)
child class 子类
CIL (common intermediate language)通用中间语言、通用中介语言
class 类
class declaration 类声明
class definition 类定义
class derivation list 类继承列表
class factory 类厂
class hierarchy 类层次结构
class library 类库
class loader 类装载器
class template 类模板
class template partial specializations 类模板部分特化
class template specializations 类模板特化
classification 分类
clause 子句
cleanup 清理、清除
CLI (Common Language Infrastructure) 通用语言基础设施
client 客户、客户端
client application 客户端应用程序
client area 客户区
client cursor 客户端游标 (for database)
client-server 客户机/服务器、客户端/服务器
clipboard 剪贴板
Clique 最大团
clone 克隆
CLS (common language specification) 通用语言规范
code access security 代码访问安全
code page 代码页
COFF (Common Object File Format) 通用对象文件格式
collection 集合
COM (Component Object Model) 组件对象模型
Combinatorial Problems 组合问题
combo box 组合框
command line 命令行
comment 注释
commit 提交 (for database)
communication 通讯
compatible 兼容
compile time 编译期、编译时
compiler 编译器
component组件
composite index 复合索引、组合索引 (for database)
composite key 复合键、组合键 (for database)
composition 复合、组合
Computational Geometry 计算几何
concept 概念
concrete具体的
concrete class 具体类
concurrency 并发、并发机制
configuration 配置、组态
Connected Components 连通分支
connection 连接 (for database)
connection pooling 连接池
console 控制台
constant 常量
Constrained and Unconstrained Optimization 最值问题
constraint 约束 (for database)
construct 构件、成分、概念、构造(for language)
constructor (ctor) 构造函数、构造器
container 容器
containment包容
context 环境、上下文
control 控件
Convex Hull 凸包
cookie (不译)
copy 拷贝
CORBA 通用对象请求中介架构(Common Object Request Broker Architecture)
cover 覆盖、涵盖
create/creation 创建、生成
crosstab query 交叉表查询 (for database)
CRTP (curiously recurring template pattern)
Cryptography 密码
CTS (common type system)通用类型系统
cube 多维数据集 (for database)
cursor 光标
cursor 游标 (for database)
custom 定制、自定义
data 数据
data connection 数据连接 (for database)
Data Control Language (DCL) 数据控制语言(DCL) (for database)
Data Definition Language (DDL) 数据定义语言(DDL) (for database)
data dictionary 数据字典 (for database)
data dictionary view 数据字典视图 (for database)
data file 数据文件 (for database)
data integrity 数据完整性 (for database)
data manipulation language (DML)数据操作语言(DML) (for database)
data mart 数据集市 (for database)
data member 数据成员、成员变量
data pump 数据抽取 (for database)
data scrubbing 数据清理 (for database)
data source 数据源 (for database)
data source 数据源 (for database)
Data source name (DSN) 数据源名称(DSN) (for database)
data structure数据结构
Data Structures 基本数据结构
data table 数据表 (for database)
data warehouse 数据仓库 (for database)
data-aware control数据感知控件 (for database)
data-bound 数据绑定 (for database)
database 数据库 (for database)
database catalog 数据库目录 (for database)
database diagram 数据关系图 (for database)
database file 数据库文件 (for database)
database object 数据库对象 (for database)
database owner 数据库所有者 (for database)
database project 数据库工程 (for database)
database role 数据库角色 (for database)
database schema 数据库模式、数据库架构 (for database)
database script 数据库脚本 (for database)
datagram 数据报文
dataset 数据集 (for database)
dataset 数据集 (for database)
DBMS (database management system)数据库管理系统 (for database)
DCOM (distributed COM)分布式COM
dead lock 死锁 (for database)
deallocate 归还
debug 调试
debugger 调试器
decay 退化
decision support 决策支持
declaration 声明
declarative referential integrity (DRI)声明引用完整性(DRI) (for database)
deduction 推导
default 缺省、默认值
DEFAULT constraint默认约束 (for database)
default database 默认数据库 (for database)
default instance 默认实例 (for database)
default result set 默认结果集 (for database)
defer 推迟
definition 定义
delegate 委托
Delegates 一般译法为"委托",微软没有对这个术语进行正式解释或翻译。
delegation 委托
dependent name
deploy 部署
dereference 解引用
dereference operator (提领)运算子
derived class 派生类
design by contract 契约式设计
design pattern 设计模式
destroy 销毁
destructor(dtor)析构函数、析构器
Determinants and Permanents 行列式
device 设备
DHTML (dynamic HyperText Markup Language)动态超文本标记语言
dialog 对话框
Dictionaries 字典
digest 摘要
digital 数字的
DIME (Direct Internet Message Encapsulation)直接Internet消息封装
directive (编译)指示符
directory 目录
dirty pages脏页 (for database)
dirty read 脏读 (for database)
disassembler 反汇编器
DISCO (Discovery of Web Services)Web Services的查找
Discrete Fourier Transform 离散Fourier变换
disk 盘
dispatch 调度、分派、派发(我喜欢“调度”)
DISPID (Dispatch Identifier)分派标识符
distributed computing 分布式计算
distributed query 分布式查询 (for database)
DNA (Distributed interNet Application) 分布式网间应用程序
document 文档
DOM (Document Object Model)文档对象模型
dot operator (圆)点操作符
double-byte character set (DBCS)双字节字符集(DBCS)
DP——Dynamic Programming——动态规划
Drawing Graphs Nicely 图的描绘
Drawing Trees 树的描绘
driver 驱动(程序)
DTD (document type definition) 文档类型定义
dump 转储
dump file 转储文件
dynamic assembly 动态装配件、动态配件
dynamic binding 动态绑定
dynamic cursor 动态游标 (for database)
dynamic filter 动态筛选 (for database)
dynamic locking 动态锁定 (for database)
dynamic recovery 动态恢复 (for database)
dynamic snapshot 动态快照 (for database)
dynamic SQL statements 动态SQL语句 (for database)
e-business 电子商务
EAI (enterprise application integration)企业应用程序集成(整合)
EBCO (empty base class optimization) 空基类优化(机制)
Edge and Vertex Connectivity 割边/割点
Edge Coloring 边染色
EDI (Dlectronic Data Interchange)电子数据交换
efficiency 效率
efficient 高效
encapsulation 封装
enclosing class 外围类别(与巢状类别 nested class有关)
end user 最终用户
end-to-end authentication 端对端身份验证
engine 引擎
entity 实体
enum (enumeration) 枚举
enumerators 枚举成员、枚举器
equal 相等
equality 相等性
equality operator 等号操作符
error log 错误日志 (for database)
escape character 转义符、转义字符
escape code 转义码
Eulerian Cycle / Chinese Postman Euler回路/中国邮路
evaluate 评估
event 事件
event driven 事件驱动的
event handler 事件处理器
evidence 证据
exception 异常
exception declaration 异常声明
exception handling 异常处理、异常处理机制
exception specification 异常规范
exception-safe 异常安全的
exclusive lock 排它锁 (for database)
exit 退出
explicit 显式
explicit specialization 显式特化
explicit transaction 显式事务 (for database)
export 导出
expression 表达式
facility 设施、设备
Factoring and Primality Testing 因子分解/质数判定
fat client 胖客户端
feature 特性、特征
Feedback Edge/Vertex Set 最大无环子图
fetch 提取
field 字段 (for database)
field 字段(java)
field length 字段长度 (for database)
file 文件
filter 筛选 (for database)
finalization 终结
finalizer 终结器
Finite State Machine Minimization 有穷自动机简化
firewall 防火墙
firmware 固件
flag 标记
flash memory 闪存
flush 刷新
font 字体
For GUI 界面
foreign key (FK) 外键(FK) (for database)
form 窗体
formal parameter 形参
forward declaration 前置声明
forward-only 只向前的
forward-only cursor 只向前游标 (for database)
fragmentation 碎片 (for database)
framework 框架
full specialization 完全特化
function 函数
function call operator (即operator ()) 函数调用操作符
function object 函数对象
function overloaded resolution函数重载决议
function template函数模板
functionality 功能
functor 仿函数
GAC (global assembly cache) 全局装配件缓存、全局配件缓存
game 游戏
GC (Garbage collection) 垃圾回收(机制)、垃圾收集(机制)
generate 生成
Generating Graphs 图的生成
Generating Partitions 划分生成
Generating Permutations 排列生成
Generating Subsets 子集生成
generic 泛化的、一般化的、通用的
generic algorithm通用算法
genericity 泛型
getter (相对于 setter)取值函数
global 全局的
global object 全局对象
global scope resolution operator 全局范围解析操作符
grant 授权 (for database)
granularity 粒度
Graph Data Structures 图
Graph Isomorphism 同构
Graph Partition 图的划分
Graph Problems -- hard 图论-NP问题
Graph Problems -- polynomial 图论-多项式算法
group 组、群
group box 分组框
GUI 图形界面
GUID (Globally Unique Identifier) 全球唯一标识符
Hamiltonian Cycle Hamilton回路
hand shaking 握手
handle 句柄
handler 处理器
hard disk 硬盘
hard-coded 硬编码的
hard-copy 截屏图
hardware 硬件
hash table 散列表、哈希表
header file头文件
heap 堆
help file 帮助文件
hierarchical data 阶层式数据、层次式数据
hierarchy 层次结构、继承体系
high level 高阶、高层
hook 钩子
Host (application)宿主(应用程序)
hot key 热键
HTML (HyperText Markup Language) 超文本标记语言
HTTP (HyperText Transfer Protocol) 超文本传输协议
HTTP pipeline HTTP管道
hyperlink 超链接
icon 图标
IDE (Integrated Development Environment)集成开发环境
identifier 标识符
IDL (Interface Definition Language) 接口定义语言
idle time 空闲时间
if and only if当且仅当
IL (Intermediate Language) 中间语言、中介语言
image 图象
IME 输入法
immediate base 直接基类
immediate derived 直接派生类
immediate updating 即时更新 (for database)
implement 实现
implementation 实现、实现品
implicit 隐式
implicit transaction隐式事务 (for database)
import 导入
in-place active 现场激活
increment operator 增加操作符
incremental update 增量更新 (for database)
Independent Set 独立集
index 索引 (for database)
infinite loop 无限循环
infinite recursive 无限递归
information 信息
infrastructure 基础设施
inheritance 继承、继承机制
initialization 初始化
initialization list 初始化列表、初始值列表
initialize 初始化
inline 内联
inline expansion 内联展开
inner join 内联接 (for database)
instance 实例
instantiated 具现化、实体化(常应用于template)
instantiation 具现体、具现化实体(常应用于template)
integrate 集成、整合
integrity 完整性、一致性
integrity constraint完整性约束 (for database)
interacts 交互
interface 接口
interoperability 互操作性、互操作能力
interpreter 解释器
interprocess communication (IPC)进程间通讯(IPC)
Intersection Detection 碰撞测试
introspection 自省
invariants 不变性
invoke 调用
isolation level 隔离级别 (for database)
item 项、条款、项目
iterate 迭代
iteration 迭代(回圈每次轮回称为一个iteration)
iterative 反复的、迭代的
iterator 迭代器
JIT compilation JIT编译 即时编译
Job Scheduling 工程安排
Kd-Trees 线段树
key 键 (for database)
key column 键列 (for database)
Knapsack Problem 背包问题
laser 激光
late binding 迟绑定
left outer join 左向外联接 (for database)
level 阶、层例
library 库
lifetime 生命期、寿命
Linear Programming 线性规划
link 连接、链接
linkage 连接、链接
linker 连接器、链接器
list 列表、表、链表
list box 列表框
literal constant 字面常数
livelock 活锁 (for database)
load 装载、加载
load balancing 负载平衡
loader 装载器、载入器
local 局部的
local object 局部对象
lock 锁
log 日志
login 登录
login security mode登录安全模式 (for database)
Longest Common Substring 最长公共子串
lookup table 查找表 (for database)
loop 循环
loose coupling 松散耦合
lvalue 左值
machine code 机器码、机器代码
macro 宏
maintain 维护
Maintaining Line Arrangements 平面分割
managed code 受控代码、托管代码
Managed Extensions 受控扩充件、托管扩展
managed object 受控对象、托管对象
mangled name
manifest 清单
manipulator 操纵器(iostream预先定义的一种东西)
many-to-many relationship 多对多关系 (for database)
many-to-one relationship 多对一关系 (for database)
marshal 列集
Matching 匹配
Matrix Multiplication 矩阵乘法
Medial-Axis Transformation 中轴变换
Median and Selection 中位数
member 成员
member access operator 成员取用运算子(有dot和arrow两种)
member function 成员函数
member initialization list成员初始值列表
memberwise 以member为单元…、members 逐一…
memberwise copy
memory 内存
memory leak 内存泄漏
menu 菜单
message 消息
message based 基于消息的
message loop 消息环
message queuing消息队列
metadata 元数据
metaprogramming元编程
method 方法
micro 微
middle tier 中间层
middleware 中间件
MIME Multipurpose Internet Mail Extension 多用途 Internet 邮件扩展
Minimum Spanning Tree 最小生成树
Minkowski Sum Minkowski和
modeling 建模
modeling language 建模语言
modem 调制解调器
modifier 修饰字、修饰符
module 模块
most derived class最底层的派生类
Motion Planning 运动规划
mouse 鼠标
multi-tasking 多任务
multi-thread 多线程
multicast delegate 组播委托、多点委托
multidimensional OLAP (MOLAP) 多维OLAP(MOLAP) (for database)
multithreaded server application 多线程服务器应用程序
multiuser 多用户
mutable 可变的
mutex 互斥元、互斥体
named parameter 命名参数
named pipe 命名管道
namespace 名字空间、命名空间
native 原生的、本地的
native code 本地码、本机码
Native Image Generator (NGEN)本地映像生成器
Nearest Neighbor Search 最近点对查询
nested class 嵌套类
nested query 嵌套查询 (for database)
nested table 嵌套表 (for database)
network 网络
network card 网卡
Network Flow 网络流
nondependent name
Numerical Problems 数值问题
object 对象
object based 基于对象的
object file 目标文件
object model 对象模型
object oriented 面向对象的
object pooling 对象池化
ODBC data source ODBC数据源 (for database)
ODBC driver ODBC驱动程序 (for database)
ODR (one-definition rule)
OLE Automation objects OLE自动化对象 (for database)
OLE Automation server OLE自动化服务器 (for database)
OLE DB consumer OLE DB使用者 (for database)
OLE DB for OLAP 用于OLAP的OLE DB (for database)
OLE DB provider OLE DB提供者 (for database)
one-to-many relationship 一对多关系 (for database)
one-to-one relationship 一对一关系 (for database)
online analytical processing (OLAP) 联机分析处理(OLAP) (for database)
online redo log 联机重做日志 (for database)
online transaction processing (OLTP) 联机事务处理(OLTP) (for database)
Open Data Services (ODS) 开放式数据服务(ODS) (for database)
Open Database Connectivity (ODBC) 开放式数据库连接(ODBC) (for database)
operand 操作数
operating system (OS) 操作系统
operation 操作
operator 操作符、运算符
optimizer 优化器
option 选项
outer join 外联接 (for database)
overflow 上限溢位(相对于underflow)
overhead 额外开销
overload 重载
overload resolution 重载决议
overloaded function 重载的函数
overloaded operator 被重载的操作符
override 覆写、重载、重新定义
package 包
packaging 打包
palette 调色板
parallel 并行
parameter 参数、形式参数、形参
parameter list 参数列表
parameterize 参数化
parent class 父类
parentheses 圆括弧、圆括号
parse 解析
parser 解析器
part 零件、部件
partial specialization 局部特化
pass by address 传址(函式引数的传递方式)(非正式用语)
pass by reference 传地址、按引用传递
pass by value 按值传递
pattern 模式
PDA (personal digital assistant)个人数字助理
PE (Portable Executable) file 可移植可执行文件
performance 性能
persistence 持久性
PInvoke (platform invoke service) 平台调用服务
pixel 像素
placeholder 占位符
placement delete
placement new
Planarity Detection and Embedding 平面性检测和嵌入
platform 平台
POD (plain old data (type))
POI (point of instantiation)
Point Location 位置查询
pointer 指针
poll 轮询
Polygon Partitioning 多边形分割
polymorphism 多态
pooling 池化
pop up 弹出式
port 端口
postfix 后缀
precedence 优先序(通常用于运算子的优先执行次序)
prefix 前缀
preprocessor 预处理器
primary key (PK)主键(PK) (for database)
primary table 主表 (for database)
primary template原始模板
primitive type 原始类型
print 打印
printer 打印机
Priority Queues 堆
procedural 过程式的、过程化的
procedure 过程
process 进程
profile 评测
profiler 效能(性能)评测器
program 程序
programmer 程序员
programming编程、程序设计
progress bar 进度指示器
project 项目、工程
property 属性
protocol 协议
pseudo code伪码
qualified 经过资格修饰(例如加上scope运算子)
qualified name
qualifier 修饰符
quality 质量
queue 队列
race condition 竞争条件(多线程环境常用语)
radian 弧度
radio button 单选按钮
raise 引发(常用来表示发出一个exception)
random number 随机数
Random Number Generation 随机数生成
range 范围、区间
Range Search 范围查询
rank 等级
raw 未经处理的
re-direction 重定向
readOnly只读
record 记录 (for database)
recordset 记录集 (for database
recursion —— 递归
recursive 递归
refactoring 重构
refer 引用、参考
reference 引用、参考
reference counting引用计数
referential integrity (RI)引用完整性(RI) (for database)
reflection 反射
refresh data 刷新数据 (for database)
register 寄存器
regular expression 正则表达式
relational database 关系数据库
remote 远程
remote request 远程请求
represent 表述,表现
resolution 解析过程
resolve 解析、决议
result set 结果集 (for database)
retrieve data 检索数据
return 返回
return type 返回类型
return value 返回值
revoke 撤销
right outer join 右向外联接 (for database)
robust 健壮
robustness 健壮性
roll back 回滚 (for database)
roll forward 前滚 (for database)
routine 例程
row 行 (for database)
row lock 行锁 (for database)
rowset 行集 (for database)
RPC (remote procedure call)RPC(远程过程调用)
runtime 执行期、运行期、执行时、运行时
rvalue 右值
Satisfiability 可满足性
save 保存
savepoint 保存点 (for database)
SAX (Simple API for XML)
scalable 可伸缩的、可扩展的
schedule 调度
scheduler 调度程序
schema 模式、纲目结构
scope 作用域、生存空间
scope operator 生存空间操作符
scope resolution operator 生存空间解析操作符
screen 屏幕
scroll bar滚动条
SDK (Software Development Kit)软件开发包
sealed class 密封类
search 查找
Searching 查找
semantics 语义
semaphore 信号量
sequential container序列式容器
serial 串行
serialization/serialize 序列化
server 服务器、服务端
server cursor服务端游标、服务器游标 (for database)
session 会话 (for database)
Set and String Problems 集合与串的问题
Set Cover 集合覆盖
Set Data Structures 集合
Set Packing 集合配置
setter 设值函数
Shape Similarity 相似多边形
shared lock 共享锁 (for database)
Shortest Common Superstring 最短公共父串
Shortest Path 最短路径
sibling 同级
side effect 副作用
signature 签名
Simplifying Polygons 多边形化简
single-threaded 单线程
slider滑块
slot 槽
smart pointer 智能指针
SMTP (Simple Mail Transfer Protocol) 简单邮件传输协议
snapshot 截屏图
snapshot 快照 (for database)
SOAP (simple object access protocol) 简单对象访问协议
software 软件
Solving Linear Equations 线性方程组
Sorting 排序
source code 源码、源代码
specialization 特化
specification 规范、规格
splitter 切分窗口
SQL (Structured Query Language) 结构化查询语言 (for database)
stack 栈、堆栈
stack unwinding 叠辗转开解(此词用于exception主题)
standard library 标准库
standard template library 标准模板库
stateless 无状态的
statement 语句、声明
static cursor 静态游标 (for database)
static SQL statements 静态SQL语句 (for database)
status bar 状态条
Steiner Tree Steiner树
stored procedure 存储过程 (for database)
stream 流
string 字符串
String Matching 模式匹配
stub 存根
subobject子对象
subquery 子查询 (for database)
subroutine 子例程
subscript operator 下标操作符
subset 子集
subtype 子类型
support 支持
suspend 挂起
symbol 记号
syntax 语法
system databases 系统数据库 (for database)
system tables 系统表 (for database)
table 表 (for database)
table lock 表锁 (for database)
table-level constraint 表级约束 (for database)
tape backup 磁带备份 (for database)
target 标的,目标
task switch 工作切换
TCP (Transport Control Protocol) 传输控制协议
template 模板
template argument deduction 模板参数推导
template explicit specialization 模板显式特化
template parameter 模板参数
template template parameter
template-id
temporary object 临时对象
temporary table 临时表 (for database)
text 文本
Text Compression 压缩
text file 文本文件
thin client 瘦客户端
third-party 第三方
thread 线程
thread-safe 线程安全的
throw 抛出、引发(常指发出一个exception)
token 符号、标记、令牌(看场合)
Topological Sorting 拓扑排序
trace 跟踪
transaction 事务 (for database)
transaction log 事务日志 (for database)
transaction rollback 事务回滚 (for database)
transactional replication 事务复制 (for database)
Transitive Closure and Reduction 传递闭包
translation unit 翻译单元
Traveling Salesman Problem 旅行商问题
traverse 遍历
Triangulation 三角剖分
trigger 触发器 (for database)
tuple
two-phase commit 两阶段提交 (for database)
two-phase lookup 两阶段查找
type 类型
UDDI(Universary Description, Discovery and Integration)统一描述、查询与集成
UML (unified modeling language)统一建模语言
unary function 单参函数
unary operator 一元操作符
unboxing 拆箱、拆箱转换
underflow 下限溢位(相对于overflow)
Unicode 统一字符编码标准,采用双字节对字符进行编码
Union query 联合查询 (for database)
UNIQUE constraints UNIQUE约束 (for database)
unique index 唯一索引 (for database)
unmanaged code 非受控代码、非托管代码
unmarshal 散集
unqualified 未经限定的、未经修饰的
URI (Uniform Resource identifier) 统一资源标识符
URL (Uniform Resource Locator) 统一资源定位器
user 用户
user interface 用户界面
value types 值类型
variable 变量
vector 向量(一种容器,有点类似array)
VEE (Virtual Execution Engine)虚拟执行引擎
vendor 厂商
Vertex Coloring 点染色
Vertex Cover 点覆盖
viable 可行的
video 视频
view 视图 (for database)
view 视图
virtual function 虚函数
virtual machine 虚拟机
virtual memory 虚拟内存
Voronoi Diagrams Voronoi图
vowel 元音字母
Web Services web服务
WHERE clause WHERE子句 (for database)
wildcard characters 通配符字符 (for database)
wildcard search 通配符搜索 (for database)
window 窗口
window function 窗口函数
window procedure 窗口过程
Windows authentication Windows身份验证
wizard 向导
word 单词
word processor 字处理器
wrapper 包装、包装器
write enable 写启用 (for database)
write-ahead log 预写日志 (for database)
write-only 只写
WSDL (Web Service Description Language)Web Service描述语言
XML (eXtensible Markup Language) 可扩展标记语言
XML Message Interface (XMI) XML消息接口
XSD (XML Schema Definition) XML模式定义语言
XSL (eXtensible Stylesheet Language) 可扩展样式表语言
XSLT (eXtensible Stylesheet Language Transformation)可扩展样式表语言转换
xxx based 基于xxx的
xxx oriented 面向xxx