@pockry
2015-12-24T20:43:57.000000Z
字数 1928
阅读 1497
移动
Swift
2016年1月10日,第一次由国内社区主办的iOS开发盛会Swift开发者大会将在北京举行,本次大会旨在推动Swift语言在国内的发展,不但邀请了国外资深专家,社区的传奇人物,还邀请了拥有Swift实践经验的国内专家,为你在实际项目中使用Swift扫清障碍。
大会讲师包涵卿来自瀑布IM,作为客户端技术负责人,对多个平台的客户端研发有着丰富经验,他们也在使用Swift开发正式应用。在本次大会上,他将分享Swift中的函数式编程实践,会前他接受了InfoQ记者的采访,让我们提前来看看,函数式编程在Swift中有什么不同。
InfoQ: 请介绍一下您现在的工作,从什么时候开始使用Swift开发的?
包涵卿: 我目前在瀑布IM负责各种客户端的开发工作。因为我们团队对新的技术一直都是积极拥抱的态度,所以最初写瀑布IM iOS 版的时候就选择了 Swift 作为开发语言。那时还是 Swift 1.1。一路走到现在的 Swift 2.1,差不多快一年时间了。目前我们 iOS 的代码75%左右是 Swift,正在朝99%的目标努力。
InfoQ: 看到您之前开发过Mac应用,您是否用Swift进行过Mac应用开发?您对Swift在非苹果生态(如Linux、Win、服务端)的开发前景有何看法?
包涵卿: 在 Mac 上用 Swift 写过简单的命令行工具,不过我们的 Mac 版应用目前没有使用 Swift。因为在 Mac 端我们有不少 C++ 的代码,而 Swift 目前还不能兼容 C++。我个人很看好 Swift 在 Linux 上的前景。在其开源之前,社区的很多 Swift 开源项目(比如后端框架 Perfect)就已经做好了支持 Linux 的准备。苹果将其开源后的24小时内,Swift 在 Github 上的 star 数就突破了10000,这是很了不起的成就。而明年将会发布的 Swift 3.0 会把 ABI 稳定下来,这对于应用和库的开发与部署都十分有利。Swift 本身是一门足够优秀的语言,再加上社区空前的热度,未来的发展值得期待。
InfoQ: 您是如何学习函数式编程的,对它怎么看?
包涵卿: 很多年前学习 HTDP 的时候开始接触函数式编程,就留下了非常深刻的印象。函数式编程帮助我们把关注点放在对问题的解上,而不是具体的实现步骤。这使我们可以在一个更高的层次来思考,写出的代码自然也就更简练。现代编程语言或多或少都在吸纳函数式编程的概念和特性就能很好地证明其魅力了。
InfoQ: Swift中使用函数式编程是否方便?在语言设计上支持是否足够好?
包涵卿: 很方便。其实 Swift 的设计一直在借鉴像 Haskell 这样的函数式语言,比如 WWDC 上苹果工程师就拿 Swift 和 Haskell 来对比 Sieve of Eratosthenes 算法的实现。Swift 强大的类型系统对函数式编程提供了良好的支持。其他像是 currying 的语法糖以及对尾递归的支持等也都是很好的证明。
InfoQ: 有人将Swift称为多范式编程语言,体现在哪里?如何让函数式编程和其它范式和谐共存?
包涵卿: Apple 官方其实把 Swift 称作 Protocol-Oriented 的语言。WWDC 上非常火的一个 session 甚至以此命名。但是这并不妨碍我们在 Swift 中写 OO 或者 FP 的代码。多范式和谐共存其实更多的时候是开发者的功课。Swift 已经对这些范式做了比较好的支持,关键就是看开发者本身对于这些范式的理解。不同的范式都有自身比较适合解决的问题,针对问题选择合适的范式即可。
InfoQ: 对Swift的函数响应式编程您怎么看?这种范式未来的前景如何?
包涵卿: FRP 是 Functional Programming 和 Reactive Programming 的结合。FRP 使我们可以用一种声明式的方式来处理数据的变化,是一种非常优秀的编程范式。FRP 这几年在开发者社区中越来越热,各种语言的 FRP 框架层出不穷。Swift 社区中比较知名的重量级 FRP 框架就有 RAC 和 RxSwift。不过未来前景如何还很难说。一方面两种范式本身都有一定的门槛,另一方面实践上现役的 FRP 框架在适配新特性、调试等方面都会给开发者带来一些挑战。个人觉得这种范式如果不获得官方的支持,想要让开发者大规模应用到产品代码中还是会比较难。
InfoQ: Swift中的函数式编程对团队协作会带来什么影响?
包涵卿: 首先就是要在团队中普及函数式编程的概念。没有相关背景的开发人员接受函数式编程往往需要一个过程。语言层面比较需要注意的是自定义的操作符。这在函数式编程中是比较常见的,但是对于不熟悉的人,就会导致代码的可读性直线下降了。这方面就要靠有更好的沟通机制和知识传递机制了。