C ++标准库是否必须用C或汇编语言编写?

时间:2010-12-06 14:51:30

标签: c++ implementation standard-library

是否可以仅使用C ++编写完整的C ++标准库(当然包括STL,但只包含内部依赖项)?我认为容器和<cstdlib>功能在char s,bitshifts,for循环和其他字节花哨的东西方面是可行的,但是像异常这样的东西可能是std::cout和{{1没有依赖开始我似乎很难。假设有一组可用的OS功能,它们在装配中完全实现(以避免任何C污染)。

我假设编译器理解从类和虚函数到模板和函数重载的所有内容,这些是语言级别的东西,并且在库IMHO中没有位置。

如果之前已经提出这个或者是一个非常愚蠢的问题,请原谅我。我不打算在这里开始一场C ++战争,只是想弄清楚实施野兽的局限性,比如标准库......

谢谢!

4 个答案:

答案 0 :(得分:6)

由于几乎任何用C语言编写的东西都可以在C ++中相当容易地重写,因此你会问是否需要汇编代码,答案通常是否定的。

除非我们讨论嵌入式编程,否则操作系统通过系统调用提供所有必需的文件和I / O功能,通常(现在)采用C格式。库需要通过extern "C"{ ... }声明来调用它们。操作系统函数不被视为C ++库的一部分,通常与C ++标准中定义的任何内容不完全匹配。

要实现C ++标准库,您需要熟悉语言本身,了解您将要使用的OS调用,并拥有您将要使用的算法。那时,编写软件是一个相对简单的问题。

答案 1 :(得分:3)

首先,无论是C,C ++还是D都没关系。最后任何可编译的编程语言都会给你(大部分)提供相同的汇编对象文件。

第二件事,STL是用C ++编写的,你不能用C语言或任何其他语言编写C ++库(嗯,你可以但我认为,我们正在讨论合理的解决方案)。您无法在C中实现STL容器,因为它们强烈使用模板。

GCC在asm中为异常生成非常好的输出。我建议阅读有关C ++ ABI的内容(如果您对此感兴趣)。

C ++编译器现在非常了解所有C ++特定的功能。由于真正高级的代码分析和优化,它能够生成快速的可执行文件(参见第一段)。

我希望我至少部分回答了你的问题。

答案 2 :(得分:1)

STL非常依赖#include ed头文件。那几乎必须是C ++。

任何不在其中一个头文件中的东西虽然理论上可以用C,Ada,汇编或您选择的其他系统编程语言实现。但是,如果你没有至少创建顶层C ++,你可能必须维护两个接口。

答案 3 :(得分:1)

唯一需要汇编的C ++是异常处理。我认为如果存在用于处理必要的寄存器和堆栈管理的库,它在C ++中可能是可行的。

当然,那些库将包括汇编。没有任何其他方法可以进行直接注册管理。