C Supersets的简要说明?

时间:2012-03-23 11:01:02

标签: c platform

对于C的超级集团,我越来越感到困惑,我进一步冒险进入编程世界。这里有很多版本...... C,C ++,C#,Objective-C,Objective-C ++,上帝知道还有什么。

我只知道这些语言的花絮(有些是面向对象的,有些是程序性的,C最初是为UNIX开发的,C ++是作为扩展而开始的,主要用于Windows操作系统,Objective-C主要用于Linux和Mac OS / iOS等),但我甚至不确定我所知道的是正确的。

我希望有人能够了解我所知道的内容 - 关于哪些是连续版本的更多信息,每个平台通常都使用哪些平台,这是最好的学习版本,等等,如果有人是感觉很慷慨。 :)

更新
另外,我希望最终能够开始本机(不需要插件,比如.NET框架)的Windows和Mac应用程序开发,那么任何人都可以确认我需要学习Windows的C ++和Mac的Objective-C吗?

2 个答案:

答案 0 :(得分:1)

C ++起源于“C with classes”,其中在AT& T工作的Bjarne Stroustrup试图以一种需要尽可能少的运行时库支持的方式向C结构添加方法和继承等功能。添加到“C with classes”的类受Simula语言的影响很大。它已经发展到包括许多其他功能,其中一些重要功能是泛型,lambda函数和富有表现力的标准类型库。

Objective-C的生命与其当前状态并没有太大不同,只是它最初是作为C预处理器实现的。 Brad Cox在他的公司Stepstone,希望将Smalltalk面向对象模型的强大功能与C本机执行的性能结合起来。 Objective-C使用动态消息传递系统来调度对象的调用,这种设计与C ++在编译器中执行所有操作的目标直接相反。因此,虽然objc和c ++从相同的基础开始,但结果却非常不同。

上述两位语言作者还出版了解释其各自语言背后的设计意图的书籍。 Cox's book已经绝版,但如果你有机会,两者都值得一读。 Stroustrup's publications list

Objective-C ++依赖于GCC(或LLVM)可以使用任一语言生成代码的事实,因此编译器编写器允许您在同一源文件中使用两者的功能。对边界层的可能性有一些限制,Objective-C ++主要用于使C ++库适应Objective-C应用程序,或者在Objective-C类中使用C ++中的STL或Boost数据类型。

最后,像C#和Java这样的语言根本不是C超集或C后代。他们使用类似C语法来提供一些熟悉(并且可能避免考虑设计 de novo 语言语法)但是不同的动物以不同的方式工作。

答案 1 :(得分:0)

你正在混淆语言的名称和意味着什么。

C是第一个,程序性和低级非泛型(至少不是类型安全的),你可能知道。

然后C++C为基础,包含类和模板。后来,这种情况逐渐演变为越来越多地与C区分开来,在每一步中扩展其标准库。 C++是一种多范式语言,意味着它具有过程性,通用性,功能性(一点点)和面向对象编程的功能。不要忘记将Boost作为标准库的强大扩展。

Objective-C是一个扩展了C的,具有许多运行时工具(如消息),以简化面向对象的开发。 Objective-C++C++应用的扩展名相同,尽可能与原始语言保持兼容。

C#完全不同。可以把它想象成JavaC++之间的混合体,尽管这会给所有三种语言的用户带来不好的血液。它有一个垃圾收集器。

主要在Linux上使用的

(Objective-)C并不完全正确。所有KDE都是C++C++主要在Windows上并不完全正确,OS API全是C。微软用C++ API(MFC / ATL)制作的是一个活生生的地狱。微软正在推动C#以及相关的.Net内容。因此,将C#视为主要是Windows,尽管正在不断努力创建跨平台的.Net替代方案(单声道)。 Apple的Foundation API是Objective-C,但底层的OS API仍然是C。

“Supersets”是一个错误的术语。 C不是C++的子集。两者共享一个共同的子集。只有Objective-C(++)C(++)的纯超集。

关于要学习的最佳版本:最新的,显然,可能仅限于您将为其编写的各种平台上的编译器支持。