『第一章』命运的齿轮开始转动:雨燕(Swift)诞生!

news2024/10/1 21:35:31

在这里插入图片描述

在本篇博文中,您将学到如下内容:

  • 1. 破茧成“燕”
  • 2. 持续进化!
  • 3. Swift 5.0:ABI 稳定性
  • 4. Swift 5.1:模块稳定性和库进化
  • 5. Swift 5.9 来了
  • 6. 登高望远:Swift 6.0
  • 总结

雨燕翻新幕,风鹃绕旧枝
金鹊徒为滞,雨燕漫飞影

1. 破茧成“燕”

有人说要想深入了解一门学科先要了解它的历史,要想熟练掌握一门编程语言同样也不例外。

在  开发的“远古”时代,Objective-c 语言 (以下简称Objc)作为统治者盘踞了很多年。Objc 拥有 C 语言的一切优点,同时也不得不容忍 C 语言的所有缺点。

在这里插入图片描述

Objc 语法是出了名的“另类怪异 1 ”,代码中多层嵌套的方括号像叠嶂层峦的山峰,不禁让人有点望“码”兴叹:

-(id) WindowOnClick 
{ 
    NSLog(@"window on click!"); 
    if([delegate conformsToProtocol:@protocol(ResPondsWindowMessage)] 
       && [delegate respondsToSelector:@selector(RespondsClick)] ) 
        { 
            [delegate performSelector:@selector(RespondsClick)]; 
        } 
    NSLog(@"click finished!"); 
    return nil; 
} 

秃头码农们眼睁睁地看着众多新奇、现代化、魔法般的特性在 C#、Java、JavaScript、Rust、Ruby、Python 等语言中犹如雨后春笋般层出不穷的时候,不得不对 Objc 八百年古今一辙恨铁不成钢!

对于 Objc 的“不争气”,  开发部高级总监、架构师克里斯·拉特纳(Chris Lattner)看在眼里急在心上。作为一个曾经多次征服“龙书2”的男人,他暗下决心一定要改变这一切!

在这里插入图片描述

2010 年 7 月,克里斯开始利用别人吃鸡摸鱼的时间屏声敛息地设计着一门全新的语言。随后, 其它有野心、有抱负的秃头码农们(DogFooding 狗粮组)也悄然加入其中。

经过近 4 年的不懈努力,苹果正式在 2014 年 6 月 WWDC 开发者大会上高调宣布了这门新语言的诞生:Swift 1.0 正式版终于化茧成“燕”!

在这里插入图片描述

苹果官方宣称 Swift 的特点是:快速、现代、安全、互动,而且明显优于 Objc 语言。Swift 语言辅以强大 LLVM3 的编译支持,使用历史久远的 Cocoa 和 Cocoa Touch 框架毫无违和感。

2. 持续进化!

小荷才露尖尖角,早有蜻蜓立上头
长风破浪会有时,直挂云帆济沧海

2015 年 12 月,苹果宣布开源 Swift,并支持Linux。长达 600 多页的 “The Swift Programming Language” 文档可以在线观看或从苹果官方 Github 下载。

2020 年 1 月 TIOBE 编程语言排行榜显示,Swift 语言从第 15 名上升至第 9名,首次杀入前十!

自诞生以来,Swift 一直在蓬勃发展中。Apple 不断为它添砖加瓦 — 增加新的功能并改进原有的特性以满足开发者们日益增长的需求。

时至今日,Swift 已经从一个小众编程语言演进为苹果平台上包含各种现代化语法、特性、开发框架、详尽开发文档与教程的主流开发语言。

同时,随着 Swift 开源社区和标准化工作的进行,Swift 语言也在其他平台(如 macOS、Linux 等)上得到了应用,进一步扩大了它的影响力。

在这里插入图片描述

不仅如此,苹果正不遗余力的让 Swift 学习门槛不断降低,让众多初学者,甚至零基础的编程爱好者们都可以轻松使用 Swift 进行开发。

在这里插入图片描述

我们将在 第三章 详细介绍 Swift 语言上手环境的搭建。

3. Swift 5.0:ABI 稳定性

任何语言要想厚积薄发并保持可持续发展,语言的 ABI 稳定性是永远绕不开的话题。

Swift ABI 稳定在 macOS、iOS、watchOS 和 tvOS 等平台上一直是一个长期目标。它所带来 Swift 生态系统的最终好处是实现应用程序和库二进制兼容性。

从 Swift 5.0 开始,Swift 的 ABI 在苹果平台上被宣布为稳定(Stability)。随着Swift 在Linux、Windows 和其他平台上的日益成熟,Swift 核心团队也将在这些平台上评估 ABI 的稳定性。

Swift 5.0 为应用程序提供了二进制兼容性,这保证了在未来使用一个版本 Swift 编译器构建的应用程序将能够与使用另一个版本构建的库进行对话。即使在使用与旧语言版本(Swift 4.2 版本)的兼容模式时,也同样适用。4

在这里插入图片描述

4. Swift 5.1:模块稳定性和库进化

如果 ABI 稳定性是在运行时混合各种 Swift 的不同版本。那么在编译时呢?

目前,Swift 语言使用一种名为“swiftmodule”的不透明存档格式来描述库的接口(例如框架“MagicKit”)而不是手动编写头文件。

然而,“swiftmodule”格式也会与当前版本的编译器绑定,这意味着如果 MagicKit 是用不同版本 Swift 构建的,则应用程序开发人员无法导入MagicKit。换句话说,应用程序开发人员和库作者必须使用相同版本的编译器。

为了消除这种限制,库作者需要一个称为 模块稳定性(Module Stability) 的功能。这涉及到用模块文本摘要来增强不透明格式,类似于大家在 Xcode “生成接口”视图中看到的。这样,客户端就可以恣意使用模块而不必关心它是用什么编译器构建的。

苹果在 Swift 5.1 中实现了模块稳定性。5

在这里插入图片描述

到目前为止,我们一直在讨论 Swift 代码保持不变的情况下更改编译器,但是应用程序已经使用库的更改又当如何呢?

目前,当 Swift 库发生更改时,任何使用该库的应用程序都必须重新编译。这确实有一些优点:因为编译器知道应用程序正在使用库的确切版本,所以它可以做出额外假设,以减少代码大小并使应用程序运行得更快。但对于下一个版本的库来说,这些假设可能并不成立。

这就是 Swift 对库进化的支持:提供一个新版本的库,而不必重新编译使用它的 App。比如,当苹果更新操作系统中的库时,就会发生这种情况,

当一家公司的二进制框架依赖于另一家公司时,这一点也非常重要。这时我们希望(理想情况下)更新第二个框架时不需要重新编译第一个框架。

在这里插入图片描述

以上讨论的 Swift ABI、模块稳定性以及库进化可以用下图来总结:

在这里插入图片描述

5. Swift 5.9 来了

2023 年 9 月,苹果发布了 Swift 5.9。截止到笔者写这篇文章时,Swift 最新版本为 5.9.1。

在这里插入图片描述

Swift 5.9 是一个承上启下的重要新版本,它在语言和标准库(Language and Standard Library)、开发者体验(Developer Experience)以及生态系统(Ecosystem)3 个大方面有显著的演进。

它为 Swift 语言添加了一个富有表现力的宏系统,并通过引入双向互操性将 Swift 集成到 C++ 代码库的支持中。

它还新增了参数包、调试时改进的表达式计算器、增强的崩溃处理、Windows平台的进一步支持等功能。

想进一步了解 Swift 5.9 新特性的小伙伴们可以到  WWDC 2023 官方视频 或 Swift 5.9 Released 链接中观赏进阶内容。

6. 登高望远:Swift 6.0

Swift 语言已处在一个非常关键的里程碑时刻,加下来的发展对 Swift 未来更是举足轻重!用苹果的话来说:

The Swift project has achieved a critical milestone of maturity of the core fundamentals, providing stability for users to invest in using Swift in earnest.

Swift 6.0 将是下一个重大更新的 Swift 大版本。Swift 将会在 6.0 版本中有革命性进化。

概括来说,未来 Swift 6.0 的发展会进一步强化以下几个方面:

  • 加速 Swift 软件生态系统的发展;
  • 创造更加奇妙的开发体验;
  • 给开发者更多自主权;

从 Swift 官方网站 Swift.org 的宣言中可以看到  的雄心壮志:

Our goals for Swift are ambitious: we want to make programming simple things easy, and difficult things possible.

何曾几时,这也是 UNIX 码农们的的鸿鹄之志!

目前,Swift 6 有两个目标:

  • 加强并发功能的支持;
  • 继续沿着 Ownership Manifesto 计划推进,优化内存模型;

这次 Swift 6 不会有具体发布时间,Swift 核心团队只会按照功能去公开各部分的开发进度和时间表,Swift 6 将这些目标全都完成时横空出世,让我们拭目以待!


更多关于 Swift 6.0 技术细节的展望,请小伙伴们前往如下链接观赏:

  • On the road to Swift 6
  • swift-evolution

总结

在本篇博文中,我们一起回顾了 Swift 语言从诞生、发展、壮大、到标准化的进程,并从目前承前启后 5.9 版本展望未来 6.0 版本的远景规划。

总之,Swift 正从一只小家碧玉似的小雨燕逐渐涅槃成一只倾国倾城的白天鹅。可以说现今要想从事  平台上的开发,Swift 语言是当仁不让的选择。

在下一篇文章中,我们将会来仔细看看这只小雨燕到底有什么与众不同之处。下篇再见!😉


  1. 1.其实写多了也觉得蛮自然的… ↩︎

  2. 2.史诗级介绍编译原理的书籍,因其封面图为一只巨龙而得名。 ↩︎

  3. 3.LLVM 是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意编程语言编写程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),它始终对开发者保持开放,并兼容已有脚本。 ↩︎

  4. 4.ABI Stability and More ↩︎

  5. 5.Evolving Swift On Apple Platforms After ABI Stability ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1129005.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员的新去处?国内新能源公司大汇总!

近几年来,传统互联网企业哀鸿遍野,而新能源车企却在悄然崛起:HC逐年增加,薪资逐渐起飞,年终分红也让人眼红…… 聪明的程序员们已经把目光瞄准了新时代新能源车企,今天就带大家横向对比一下国内比较火热的…

2.7.C++项目:网络版五子棋对战之session模块的设计

文章目录 零、前置一、意义二、功能三、管理四、框架五、完整代码 零、前置 在WEB开发中,HTTP协议是⼀种无状态短链接的协议,这就导致⼀个客户端连接到服务器上之后,服务器不知道当前的连接对应的是哪个用户,也不知道客户端是否登…

24李永乐模拟6套卷中的一道定积分定义+真题改编题

大概率是武忠祥老师出的一道题,同时考察了数形结合,定积分换元,无穷级数表示,广义积分中值定理,定积分定义的一道真题改编好题。 第二问用第一问结论,区间再现一步秒杀,颇有真题风范。

找不到msvcp100.dll解决教程

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,本文将介绍四个修复msvcp100.dll丢失的方法,帮助读者快速恢复计算机的正常运…

【c++】运算符重载实例

重载自增自减运算符 Intger num(2); num; num;对自增运算符的重载要区分前置和后置。在重载之前需要思考一个问题,num是返回一个临时变量还是num对象的本体。 为了解决这个问题可以考虑实现一个Inc_()函数和_Inc()函数分别模仿后置和前置的行为 Integer Inc_(){i…

Calibre拾遗:FDI (Foreign Database Interface)系统简介

Calibre是强大的GDS处理工具,包括查看,验证,分析等操作,操作由浅入深,除过手动编辑GDS的不是很灵活外,其他各种命令和操作策略,都是远(遥)远(遥)走…

使用create-vue创建项目

认识create-vue create-vue是Vue官方新的脚手架工具,底层切换到了vite(下一代构建工具),为开发提供极速响应。 使用create-vue创建项目 1.前提环境条件 已安装16.0或更高版本的Node.js node -v 2.创建一个Vue应用 npm init…

Monocular arbitrary moving object discovery and segmentation 论文阅读

基本信息 题目:Monocular Arbitrary Moving Object Discovery and Segmentation 作者: 来源:BMVC 时间:2021 代码地址:https://github.com/michalneoral/Raptor Abstract 我们提出了一种发现和分割场景中独立移动的…

[算法训练营] 回溯算法专题(一)

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Linux系列讲解 —— VIM配置与美化

目录 1. Vim基本配置1.1 配置文件1.2 基本配置 2. 插件管理器Vundle2.1 下载Vundle2.2 在vimrc中添加Vundle的配置 3. Vundle的使用3.1 安装插件3.2 卸载插件 1. Vim基本配置 1.1 配置文件 vim的配置文件有两处,请根据实际情况选择修改哪个。 (1) 全局配置文件&am…

电子元器件管理系统 JAVA语言开发

目录 一、系统介绍 二、系统下载 三、系统截图 一、系统介绍 基于VueSpringBootMySQL的电子元器件管理系统包含元器件单位模块、元器件仓库模块、元器供应商模块、元器件品类模块、元器件明细模块、元器件采购模块、元器件采购审核模块、元器件领用模块、学生元器件申请模块…

前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(二)

阳光总在风雨后,请相信有彩虹。 案例 - 图书管理 bootstrap弹框 需求,点击添加按钮,没有离开当前页面,在当前页面弹出弹框(弹窗) 先学着实现一个简单的弹框,如下图右下角 bootstrap有两种方式…

openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户

文章目录 openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户108.1 创建、修改和删除用户108.2 私有用户108.3 永久用户108.4 用户认证优先规则 openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户 使用CREATE USER和ALTER USER可以创建和管理数据…

解决虚拟机联网问题

虚拟机开机后发现右上角缺少联网标志(下面有正常联网标志),这样就是连不上网的 不信你可以打开Ubuntu里面的浏览器或ping www.baidu.com 1.编辑虚拟机设置-->网络适配器-->如图所示 2.选择编辑-->虚拟网络编辑器 3.更改设置 4此处可以选择还原默认设置&am…

【JAVA学习笔记】42 - 内部类(难点,重点)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/innerclass_ 一、基本介绍 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成…

【蓝桥每日一题]-动态规划 (保姆级教程 篇12)#照相排列

这次是动态规划最后一期了,感谢大家一直以来的观看,以后就进入新的篇章了 目录 题目:照相排列 思路: 题目:照相排列 思路: 首先记录状态f[a][b][c][d][e]表示每排如此人数下对应的方案数,然…

java中按行读取文件内容

java中按行来读取文件内容,一般对文件也是又要求的,比如文件编码utf-8,内容是按行可读,而不是一堆字节码。这类文件,我们按行读取,主要是方便快速查看内容,并且用这些内容来作别的用途&#xff…

FileUpload控件上传文件时出现 不支持给定路径的格式.的解决方法

正常代码,部署到server 2012时,在上传音频mp3文件时,显示错误“不支持给定路径的格式”,上传控件使用FileUpload控件: 因为程序之前是正常的,因此应该不是程序的问题。 上传时,发现在选择文件时…

F28335-可移植新建工程模板-基于bitfield

文章目录 前言步骤新建工程工程管理拷贝底层文件 添加测试函数编写main.c测试函数 前言 实验要求利用28335芯片,重新学习一下DSP28335,并做个记录。 值得一提的是,28335只能用寄存器开发,而不能用库函数开发,相应的也…

LDAP注入漏洞

1、LDAP 注入 LDAP (Light Directory Access Portocol) 是基于X.500标准的轻量级目录访问协议,提供访问目录数据库方法的服务和协议,常用于与目录数据库组成目录服务。其中目录是一个为查询、浏览和搜索而优化的专业分布式数据库,它呈树状结…