|
|
1
37
我已经维护了Visual Studio对C++标准库的实现7年(VC的STL是由Dinkumware的P.J.Plauger在90年代中期编写并获得许可的,我与PJP合作以获取新功能和维护错误修复),我可以告诉你,我的所有编辑都是在纯文本编辑器中“手动”完成的。STL的头文件或源文件都不是自动生成的(尽管Dinkumware的主源文件(我从未见过)经过自动过滤,以便为Microsoft生成定制的drop),而签入源代码管理的内容则直接发送给用户,无需任何进一步修改(现在,也就是说,之前我们对它们进行了一个过滤步骤,这导致了很多麻烦)。我因不使用IDEs/autocomplete而臭名昭著,尽管我确实使用SourceInsight浏览代码库(尤其是我不太熟悉的底层CRT),而且我广泛依赖grep。(当然,我使用diff工具;我最喜欢的是名为“odd”的内部工具。) 非常 仔细的剪切和粘贴编辑,但与新手的原因相反;当我完全理解代码的结构时,我会这样做,并且我希望准确地复制代码的一部分,而不会意外地遗漏一些内容。(例如,不同的容器需要非常相似的机器来处理分配器;它可能应该是集中的,但同时当我需要修复basic_string时,我将验证向量是否正确,然后复制它的机器。)我可能已经生成了两次代码——一次是在冲压出我设计的C++14透明运算符函子时(加<>、乘<>、更大<gt;等都是高度重复的),另一次是实现/提出类型特征的变量模板时(最近投票通过了库基础技术规范,可能是针对C++17的)。IIRC,我为运算符函子编写了一个实际的程序,而为变量模板使用了sed。我使用的纯文本编辑器(Metapad)具有搜索和替换功能,这些功能非常有用,尽管比直接正则表达式弱;如果我想复制文本块,我需要更强的工具(例如is_same_v=is_same<T>::value)。 STL维护人员如何记住所有这些东西?这是一份全职工作。当然,我们也在不断地查阅标准/工作文件,了解所需的接口和代码行为。(我最近发现,我很难从内存中枚举所有50个美国州,但我肯定无法从内存中列举所有STL算法 最长的 名字,作为一个无用的琐事。:->) |
|
|
2
6
它的外观旨在 奇怪的 在某种意义上。标准库和其中的代码需要避免与用户程序中使用的名称冲突,包括 宏 并且对于用户程序中的内容几乎没有限制。
它们很可能是手写的,正如其他人所提到的,如果你花一些时间看它们,你会发现编码约定是什么,变量是如何命名的等等
|
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |