我计划编写一个开源库,它确实需要用面向对象的语言编写。一个问题是,库应该可以与C一起使用,在这里,直接包含源代码或(动态)链接到预编译库并不重要。
我知道这三个C++,C和目标-C。
Objective是C的一个超集(也就是说,每个C代码,甚至Linux内核,都应该能够被编译为Objective);因此,如果使用库的C应用程序被编译为Objective(当然,我可以在使用说明中包括这一点),它应该能工作。
C++不是C的超集,但它比Objective更受支持,而且比Objective更多的是C++程序员和编译器。
我该怎么办?
二进制文件是用C编写的,还是在编译为目标C时具有更低的性能?
发布于 2010-08-14 15:20:27
Obj编译在几乎所有方面都得到了支持,因为它是gcc的一部分.
然而,Obj和C++的最大区别在于,Obj还需要一个运行时库。这远没有得到广泛的支持,而且GnuStep版本落后于one。
Obj的动态特性使编写和编译跨平台代码在技术上更容易,但实际上,您需要确切了解不同目标环境支持哪些方法,因为编译器不会捕获它们。
此外,GnuStep、Cocotron和Etoile --这3种非Apple环境--只在Windows和Linux开发者中占据了一席之地。这将减少对OS开发人员和其他平台上极少数开发人员的占用。例如,Cocotron主要用于OS开发人员,他们正在寻找通往Windows的快速端口,而不是寻找一个好的x平台工具的开发人员。
另一种选择可以是看看苹果自己在macosforge ( CoreFoundation、WebKit、clang )上的开源努力,或者是操作系统的结构和其他采用现有代码并暴露在Obj中的第三方项目。
一个典型的模式是拥有一个核心C或C++项目,然后通过Obj公开该项目。
人们对C++和C也做了同样的工作--即编写OO C++代码,但随后通过接口级的过程包装器将其公开给C。如果您希望将代码链接到普通C中,则可能需要考虑这一点。
总之,除非用Obj编写可以简化设计,而且您的受众是OS /iOS开发人员,否则我建议使用C++ (您说库需要用OO语言编写),然后用Obj包装它。
如果它只适用于OS /iOS,我会选择Obj。
另一种选择可能是完全放弃C语言需求,而采用像Python或Ruby这样的可移植OO语言,那里有一个活跃的开源开发人员社区。
https://stackoverflow.com/questions/3483814
复制相似问题