大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

Chris Lattner 谈 Swift 3 和 Cocoa“重命名”

  • 2016-02-02
  • 本文字数:1103 字

    阅读完需:约 4 分钟

近日,在“ swift-evolution ”邮件列表中,Swift 创建者 Chris Lattner 在一篇博文中概述了 Swift 3 定义的一些指导原则,并明确表示该版本会带来破坏性修改。

由于新特性的设计和实现本身还存在许多未知,所以预测 Swift 3 最终会包含什么并不容易。虽然认识到了这一点,但 Lattner 还是着重指出了 Swift 3 的主要目标以及有助于该目标实现的几个方面:

Swift 3 […] 的目标是推动 Swift 下一波应用热潮,让 Swift 为更多的人所用。以下几个方面有望成为实现这一目标的动力:Linux(及其他平台)上的 Corelibs+Swift 开发成为现实,新用户出现;SwiftPM[Swift 包管理器] 成为一款优秀的工具,并形成了自己的特色;Swift 语言 /stdlib 进一步成熟。

鉴于 Swift 3 的范围已经明确定义,Lattner 补充道,许多“好的想法”将会被搁置,尤其是需要对语言进行重大扩展而又不影响核心模型的想法:

我认为,对于 Swift 3,我们有一贯的方法,我们一直致力于修复基本语言的核心缺陷、修复实现问题以及设计影响 ABI 稳定性的弹性功能,同时对语言进行小幅扩展。

一个例子是,灵活的成员初始化是一个可能不会纳入Swift 3 的特性,而另一个例子是,属性行为是一个在Swift 3 中备受期待的特性,该特性有助于消除一些同 lazy@NSManaged等实现相关的“编译器魔法(compiler magic)”。

此外,Swift 3 将带来大量的破坏性修改,这主要是由重命名 Cocoa 方法使它们更像 Swift 导致的:

由于 Cocoa 重命名将要落地,Swift2 到 Swift 3 将会不可避免地给代码带来破坏性变化,而我们将会另外构建令人印象深刻的迁移技术。

重命名 Cocoa 方法意味着若干变化,例如:

  • 移除不必要的指定期望参数类型的单词,简化方法名称,例如:

    let content = listItemView.text.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

    将变成:

    let content = listItemView.text.trimming(.whitespaceAndNewlines)

  • 移除 Foundation API 的 NS 前缀,比如var NSDateComponentUndefined: Int { get }将变成var dateComponentUndefined: Int { get }

  • 方法声明中增加参数默认值,比如,为可空的尾部闭包参数指定默认值nil,为名字中包含optionsattributesinfo等的数组和字典参数指定默认值[][:]

Lattner 有关 Swift 3 并非源代码兼容的声明引发了一些抱怨。Lattner 本人表示,他认识到他们不能再这样下去,长时间按照“开发人员的步伐”修改Swift,但是,他希望从Swift 3 到4 的过渡会更简单些。不过,苹果计划提供一个迁移开关 -swift3-migration),使开发人员能够更轻松地将 Swift 2.2 的代码移植到 Swift 3。

查看英文原文: Chris Lattner on Swift 3 and Cocoa “Renamification”

2016-02-02 18:003336
用户头像

发布了 1008 篇内容, 共 442.1 次阅读, 收获喜欢 346 次。

关注

评论

发布
暂无评论
发现更多内容

【愚公系列】2022年10月 Go教学课程 018-分支结构之switch

愚公搬代码

10月月更

最长回文串

掘金安东尼

10月月更 算法、

【牛客刷题-算法】NC16 对称的二叉树

清风莫追

算法 二叉树 10月月更

【牛客刷题-算法】NC22 合并两个有序的数组

清风莫追

算法 数组 10月月更

基于IDE和dlv远程调试Kubernetes组件

琦彦

Go Kubernetes 调试 10月月更 delve

Collections之Arraylist源码解读(五)

知识浅谈

ArrayList 10月月更

Mac下vagrant从安装到体验

程序员欣宸

vagrant 虚拟机 10月月更

ESP32-C3 学习测试 蓝牙 篇(六、添加 Service)

矜辰所致

service 蓝牙 ESP32-C3 10月月更

书单推荐|宅家不动过国庆,好书相伴不寂寞

图灵教育

书单 国庆节

C++学习---_IO_new_fdopen函数原理分析学习

桑榆

c++ 源码分析 10月月更

【C语言难点突破】指针入门讲解

Geek_65222d

10月月更

InetAddress.getLocalHost() 执行很慢?

xiaoxi666

网络 网络库

经常会采坑的javascript原型应试题

loveX001

JavaScript

书单推荐|宅家不动过国庆,好书相伴不寂寞

图灵社区

书单 国庆节

2022-10-04:以下go语言代码输出什么?A:{123} main.T{x:123} B:{123} T{x:123} C:boo boo D:boo main.T{x:123}。 packag

福大大架构师每日一题

golang 福大大 选择题

什么是 Python 垃圾回收机制中的引用计数

宇宙之一粟

Python 垃圾回收机制 引用计数 10月月更

微服务通信

穿过生命散发芬芳

微服务 10月月更

面试官:React怎么做性能优化

beifeng1996

React

【牛客刷题-算法】NC25 删除有序链表中重复的元素-I

清风莫追

算法 链表 10月月更

老生常谈React的diff算法原理-面试版

beifeng1996

React

深度剖析React懒加载原理

xiaofeng

React

令人头秃的js隐式转换面试题,你能做对吗

loveX001

JavaScript

【一Go到底】第五天---指针

指剑

Go golang 10月月更

网络请求模块(2)

张立梵

Python. 爬虫必备知识讲解 10月月更

React-Hooks怎样封装防抖和节流-面试真题

beifeng1996

React

Fiddler(一) - Fiddler简介

No Silver Bullet

fiddler 10月月更 抓包工具

Vue3入门指北(八)v-model

Augus

Vue3 10月月更

面向对象究竟是什么鬼?该如何理解?

乌龟哥哥

10月月更

硬核好文!网络拓扑类型:总线、环形、星形、网状、树形、点对点、混合

wljslmz

网络技术 网络拓扑 10月月更

80%的前端开发都答不上来的js异步面试题

loveX001

JavaScript

Fiddler(二) - 使用Fiddler做抓包分析

No Silver Bullet

fiddler 抓包分析 10月月更

Chris Lattner谈Swift 3和Cocoa“重命名”_开源_Sergio De Simone_InfoQ精选文章