是否可以仅使用C ++编写完整的C ++标准库(当然包括STL,但只包含内部依赖项)?我认为容器和<cstdlib>
功能在char
s,bitshifts,for循环和其他字节花哨的东西方面是可行的,但是像异常这样的东西可能是std::cout
和{{1没有依赖开始我似乎很难。假设有一组可用的OS功能,它们在装配中完全实现(以避免任何C污染)。
我假设编译器理解从类和虚函数到模板和函数重载的所有内容,这些是语言级别的东西,并且在库IMHO中没有位置。
如果之前已经提出这个或者是一个非常愚蠢的问题,请原谅我。我不打算在这里开始一场C ++战争,只是想弄清楚实施野兽的局限性,比如标准库......
谢谢!
答案 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 ++中可能是可行的。
当然,那些库将包括汇编。没有任何其他方法可以进行直接注册管理。