Swift 5 将使用 UTF-8 作为首选字符串编码

2019年03月23日

Swift 官方博客公布了 Swift 5 将首选字符串编码从 UTF-16 切换到 UTF-8 的消息,同时保留与 Objective-C 有效的互操作性。因为 String 类型会对这些底层问题进行抽象,所以开发者不需要对源代码进行更改。

切换到 UTF-8 实现了 String 的长期目标之一 —— 实现高性能处理,这也是关注性能的开发者呼声最大的请求。更重要的是,该功能还为将来提供更高性能的 API 奠定了基础。字符串的首选编码将会成为影响 Swift ABI 性能的一部分,因此这次在 Swift 5 版本中为了 ABI 的稳定性而实现该功能是势在必行的。

背景

尽管 String 类型在技术上是同一个结构,但它可以以多种形式存在。我们不妨将 String 视为手工枚举,使用传统的 bit-twiddling 技术手工制作,以生成紧凑高效的代码。

由上图可以看到,Swift 5 之前,字符串内容以 UTF-16 和 ASCII 两种形式存储。出于与现代计算环境的高效兼容性、简化相关操作以及对性能提升的考虑,Swift 决定在 Swift 5 中使用 UTF-8 作为首选字符串编码。

对现有的影响

按照官方说法,在代码层面,这个变动对大多数开发者的影响不大,并且依然会提供与 Objective-C API 的高效互操作性。

展开阅读全文
12 收藏
分享
加载中
精彩评论

引用来自“crystalsis”的评论

utf16就是个坑

引用来自“AkataMoKa”的评论

很少听到utf16,这个的应用场景是啥?
最早的时候,unicode就只有两个字节,而且凭借自己的话语权干掉了四个字节的iso标准,于是utf16就是固定长度的实现,但是后来两个字节实在不够用,unicode也改成了四个字节,utf16也变成了可变长度,集合了utf8的缺点和utf32的缺点,于是自然变成了最坑的。
2019-03-23 10:47
10
举报

引用来自“crystalsis”的评论

utf16就是个坑

引用来自“AkataMoKa”的评论

很少听到utf16,这个的应用场景是啥?
也是这样的原因,那些不早不晚的几十年的语言软件之类的都被utf16坑了,好多地方把utf16叫做unicode也是这么来的。
2019-03-23 10:49
6
举报
支持utf-8
2019-03-23 10:50
5
举报

引用来自“小99”的评论

社区都吐槽这语言是新版本就是新语言,夸张了吧?
不夸张,Swift的每个大版本(第一个数字)都是不向前兼容的。于是Swift4和Swift3成了不同语言,关键这货还更新频繁,一两年出一个大版本。
2019-03-23 12:45
4
举报
ECMAScript Dart 都是这个字符编码,坑太多,不知道新出的Dart为什么还要使用这个,可能是为了兼容ECMAScript吧,太不值得。
2019-03-23 10:07
2
举报
最新评论 (14)
恭喜swift又出新语言了.
2019-03-25 09:29
0
回复
举报
现在用utf8不会过时吧
2019-03-23 18:28
0
回复
举报

引用来自“小99”的评论

社区都吐槽这语言是新版本就是新语言,夸张了吧?
不扩张, 我们的swift3写的程序又要重新做一边了…
2019-03-23 16:39
0
回复
举报

引用来自“小99”的评论

社区都吐槽这语言是新版本就是新语言,夸张了吧?
不夸张,Swift的每个大版本(第一个数字)都是不向前兼容的。于是Swift4和Swift3成了不同语言,关键这货还更新频繁,一两年出一个大版本。
2019-03-23 12:45
4
回复
举报

引用来自“crystalsis”的评论

utf16就是个坑
@crystalsis 嗯,
2019-03-23 11:34
0
回复
举报
社区都吐槽这语言是新版本就是新语言,夸张了吧?
2019-03-23 11:07
0
回复
举报
支持utf-8
2019-03-23 10:50
5
回复
举报

引用来自“crystalsis”的评论

utf16就是个坑

引用来自“AkataMoKa”的评论

很少听到utf16,这个的应用场景是啥?
也是这样的原因,那些不早不晚的几十年的语言软件之类的都被utf16坑了,好多地方把utf16叫做unicode也是这么来的。
2019-03-23 10:49
6
回复
举报

引用来自“crystalsis”的评论

utf16就是个坑

引用来自“AkataMoKa”的评论

很少听到utf16,这个的应用场景是啥?
最早的时候,unicode就只有两个字节,而且凭借自己的话语权干掉了四个字节的iso标准,于是utf16就是固定长度的实现,但是后来两个字节实在不够用,unicode也改成了四个字节,utf16也变成了可变长度,集合了utf8的缺点和utf32的缺点,于是自然变成了最坑的。
2019-03-23 10:47
10
回复
举报
ECMAScript Dart 都是这个字符编码,坑太多,不知道新出的Dart为什么还要使用这个,可能是为了兼容ECMAScript吧,太不值得。
2019-03-23 10:07
2
回复
举报
更多评论
14 评论
12 收藏
分享
返回顶部
顶部