首页 > 其他分享 >GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?

GCC支持Objective C的故事?Objective-C?GCC只能编译C语言吗?Objective-C 1.0和2.0有什么区别?

时间:2025-01-18 10:31:34浏览次数:3  
标签:GCC 1.0 C++ 编译 ObjC Objective 2.0

GCC支持Objective C的故事

Objective-C 主要由 Stepstone 公司的Brad Cox和 Tom Love 在1980 年左右发明。乔布斯离开苹果公司后成立了NeXT STEP公司, 买下了Objective-C 语言的授权。GCC对Objective-C语言的支持是在1992年加入的,具体是在GCC 1.3版本中首次引入的。GCC的后续版本继续改进了对Objective-C的支持,包括对Objective-C++的支持,后者允许在同一个源文件中混合使用Objective-C和C++代码。但随着苹果公司对ObjC编程语言有更多的需求修改,但GCC社区有时并不买账,苹果决定请高人开发Clang/LLVM对ObjC提供更好支持,对于ObjC的支持,Clang的支持越来越及时,而GCC的支持也逐渐老旧。

Objective-C

ObjC比较小众,在1980年左右由Stepstone公司的Brad Cox和Tom Love发明。后来NeXT公司获得ObjC语言使用权,再后来到1996年NeXT被苹果公司收购也变成苹果公司使用,Mac市场占有率本身就不高,ObjC没有太多程序员。在移动互联网时代iPhone开发爆发,ObjC也开始火爆。真正了解ObjC的人会觉得它算是面向对象语言中比较易学且实用的一种,不像C++那么复杂,ObjC真正做到了够用即可。

ObjC是C的面向对象扩展

  • ObjC是C的超集,增加了面向对象设计,借鉴了SmallTalk消息机制,此机制允许动态判断某个对象是否有某个方法,不像C++类方法调用,编译时期就决定是否可调用。
  • 习惯了C代码风格,刚开始学ObjC消息机制, 几乎无一例外感到不解和困扰,如果连续使用超过半年以上,慢慢会习惯并感受到它消息机制的”优雅”, 虽然代码没有C简洁,但清晰易懂。
  • ObjC可以用GCC编译,早期苹果macOS和iOS均用GCC编译,后来转向Clang.

特别的语法

  • ObjC用@表示类定义和实现,起源于Smalltalk 中,使用 @ 符号来表示类和类定义的方法。

1.0和2.0

  • GNUStep只支持ObjC 1.0, 对2.0支持不完整。

GCC只能编译C语言吗?

最早,GCC只用于编译C语言,后来GCC逐渐演变为GNU Compiler Collection,变成编译器的前端集合。GCC相当于只是前端,理论上后面可以接任何语言编译器完成编译。目前支持列表如下:

  • C (gcc)
  • C++ (g++)
  • Objective-C/C++ 1.0 (部分2.0) (gobjc)
  • Java (gcj and gij) (GCC 7开始移除)
  • Go 1
  • Fortran (g77 or gfortran)
  • Ada
  • D 2.0
  • BRIG(HSAIL) (GCC 7开始加入,GCC 12开始移除)
  • M2(Modula-2) (截止2024-3-31统计,正在开发)

例如,当我们用gcc命令编译.cpp文件,实际上是调用g++程序编译.cpp文件。

Objective-C 1.0和2.0有什么区别?

2006年,苹果公司发布2.0版本。2.0比1.0有如下主要变化:

  • 属性
    C#的属性和它很类似,可以自动生成getter/setter方法。
  • 泛型
    轻量级泛型,由编译器实现。
  • 分类
    C#有partitial class概念,可让一个类实现分布在不同文件。
  • 改进的垃圾回收
    2.0引入了ARC,在macOS上类似于Java/C#自动垃圾回收,在iOS上并未启动自动垃圾回收。
  • block语法
    允许开发者在函数内部定义匿名函数,并在不同的上下文中传递和使用它们。
  • 快速枚举


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

标签:GCC,1.0,C++,编译,ObjC,Objective,2.0
From: https://blog.csdn.net/cxsjabcabc/article/details/145221930

相关文章

  • 30天开发操作系统 第 15 天 --多任务 v1.0
    前言话说,多任务到底是啥呢?”我们今天的内容,就从这个问题开始吧。多任务,在英语中叫做“multitask”,顾名思义就是“多个任务”的意思。简单地说,在Windows等操作系统中,多个应用程序同时运行的状态(也就是同时打开好几个窗口的状态)就叫做多任务。对于生活在现代社会的各......
  • 运维系列&安卓系列【亲测有效】:Your build is currently configured to use incompati
    YourbuildiscurrentlyconfiguredtouseincompatibleJava21.0.3andGradle5.4.1build报错:YourbuildiscurrentlyconfiguredtouseincompatibleJava21.0.3andGradle5.4.1Cannot...报错显示报错原因成功解决方案尝试过未成功的方案buil......
  • 来试试用c++来测出你的幸运值吧~~~(1.0版)(while循环)(好玩小游戏)
    你是不是也想知道自己的幸运值呢?来试试看吧!废话不多说,上代码!不要忘记点赞哦~~~#include<bits/stdc++.h>#include<windows.h>usingnamespacestd;voidmeasureLuck(intl){intn;cout<<"输入测幸运次数吧!:";cin>>n;cout<<"最大的和是"<&......
  • 【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-
    【02】做一个精美的打飞机小游戏,python开发小游戏-鹰击长空—优雅草央千澈-持续更新-分享源代码和游戏包供游玩-记录完整开发过程-用做好的素材来完善鹰击长空1.0.1版本背景之前优雅草央千澈在AE特效制作处博文已经完整介绍了本款游戏的素材开发,本文开始把素材利用起来放进去......
  • goal vs objective vs target
    goal680objective2421target1284 GOALvsOBJECTIVEleft4WORD1:GOAL过滤200 WORDW1W2 SCORED14231HehasscoredafurtherfivegoalsintheSpanishSupercupandtheChampionsLeague.他在西班牙超级杯和冠军联赛中又打进了五个进球。  scored......
  • apache-skywalking-apm-10.1.0使用
    ​apache-skywalking-apm-10.1.0使用本文主要介绍如何使用apache-skywalking-apm-10.1.0,同时配合elasticsearch-8.17.0-windows-x86_64来作为存储 es持久化数据使用。步骤如下:一、下载elasticsearch-8.17.0-windows-x86_641、下载ES(elasticsearch简称ES下载链接:https://w......
  • 地平线 LiDAR-Camera 融合多任务 BEVFusion 参考算法-V1.0
    该示例为参考算法,仅作为在征程6上模型部署的设计参考,非量产算法。1.简介激光雷达天然地具有深度信息,摄像头可以提供丰富的语义信息,它们是车载视觉感知系统中两个最关键的传感器。但是,如果激光雷达或者摄像头发生故障,则整个感知框架不能做出任何预测,这在根本上限制了实际自......
  • 为什么设置MSVC cl.exe到PATH路径,依然无法正常编译?为什么MSVC toolchain有多个cl.exe
    为什么设置MSVCcl.exe到PATH路径,依然无法正常编译?MSVC可以正常编译C/C++代码的前提,还包括INCLUDE/LIB路径等都正确配置,而这无法仅仅通过MSVCcl.exe的PATH路径来完成。VS提供了一个官方的配置MSVC环境的方式,可以通过开始菜单的"DeveloperCommandPromptforVS2019......
  • Linux开发工具--vim编辑器-gcc/g++编译器-gdb调试器
    目录1.vim编辑器 1.1.vim的基本概念1.2vim的基本操作1.3vim三个模式的命令集 插入模式命令模式 末行模式2.gcc/g++编译器2.1gcc如何完成重点概念——函数库 2.2gcc选项3.gdb调试器 3.1.开始使用 1.vim编辑器 1.1.vim的基本概念vim可以帮我们文......
  • RapidTable release v1.0.3
    引言经过几日来的不懈努力,RapidTable库终于迎来了1.0系列。RapidTable库是专门用来文档类图像的表格结构还原,表格结构模型均属于序列预测方法,结合RapidOCR,将给定图像中的表格转化对应的HTML格式。效果展示模型列表model_type模型名称推理框架模型大小推理耗时......