基于Swift的建筑控件

(从2017年春季重新发布)

在2016年初,我们在PassiveLogic进行了一次有趣的实验,将一些C代码重构为Apple的新系统语言Swift。 这个实验项目证明是成功的,我们决定采取大胆的举动,用Swift重写我们的整个代码库。

为系统关键型启动采用一种新语言似乎是不寻常的举动。 这是一个经过仔细考虑的决定。 它表明,苛刻的现实是C和C ++的入门系统语言已接近中年。

在过去的几十年中,我们已经看到编程语言随着快速原型开发,Web和应用程序开发以及并行性和客户端-服务器体系结构日益复杂的需求而迅速发展。 相反,系统语言的发展非常缓慢。 这种保守性部分是其持久性的根源。 但是,极端保守主义不是技术行业或初创企业的业务。 在过去的十年中,周围的技术市场一直在寻求高级语言以提高开发速度和竞争优势。

代码成本

PassiveLogic在我们下一代控制平台的开发中越深入,越多的C和C ++像锚一样。 不仅仅是编码速度或程序员的满意……最终的决定对业务至关重要。 毕竟,初始编码实际上是受您的大脑而不是手指的速度的限制。 仅此一项就不是采取语言行动的理由。 我们的一名开发人员向我证明了这一点,他们远远超出了使用普通旧C语言编写的python程序员的能力-他是神话般的10X程序员,可以将其淘汰。 因此,语言效率很重要,但这不是最重要的因素。

实际上,语言选择中最重要的决定是业务决定。 因为编程的成本并没有随开发人员通常划定完成线的最初实现而结束,而是您认为:“我做到了”并达到最高五分。 不,代价是通过单元测试,调试,现场测试,查找生产中的所有极端情况以及下一个家伙今后几年必须承担的累积技术债务,与该代码建立长期关系。

即使您的初创公司渡过了死亡的尽头,也经常会看到公司因为产品陷入技术低迷而陷入困境。 它们在技术上可能会负债累累,以至于所有的工程资源都被浪费在寻找bug上,而不是为客户创造更多的价值。 我们都看到了它的发生。

为什么选择Swift

面临的挑战是如何使开发人员能够实现更大的业务目标? 输入Swift。 Swift是第一种真正解决市场空白的系统语言。 它的目标是成为编程三重奏:

  1. 高效的高级语言语法
  2. 固有的安全性
  3. 像C一样的低速C

前两个实际上是系统编程新手。 是的,随着时间的流逝,C ++确实一直在提高生产率,但是它并不能摆脱不良习惯,安全风险和不确定的行为。 仅以“ null”为例,根据分析,这会导致25%的软件错误。 在Swift中甚至不可能实现null陷阱。 如果添加诸如错误的类型转换,枚举不匹配,内存问题,不完整的案例陈述等之类的东西,那么……一家机器人公司发现,使用Swift甚至不可能发生40%的问题跟踪器中的错误。

有价值? 绝对。 但是效果可以成倍增加。 我看着一个年轻的程序员在C语言中为复杂的指针错误而苦苦挣扎了数周,试图确定他的单元测试。 那是大量的调试时间和脑力劳动,本来可以专注于富有成效的思维和周到的功能开发。

而且,由于C ++程序员的平均年龄只有40多岁,这一挑战变得更加严峻。 部分原因是语言的年龄,而聚会则是因为掌握该语言需要花费很长时间。 这为招聘年轻人才提出了入职挑战。 Swift并没有消除它,毕竟它是一种新语言,并且发展很快。 但是从结构上讲,它是一棵修剪整齐的树,与当前的计算机科学思维相一致,不仅与C系列非常相似,而且与现代脚本语言也没有太多相似之处……使它感到熟悉。 精明的开发人员寻找有趣的机会,例如学习先进的语言,这并没有什么坏处。

这些优势加上Apple的支持,在短短2年内将Swift推入了十大编程语言的前十名,其增长速度超过了历史上任何一种语言。 社区很重要。

迅捷的挑战

我们预期的一些挑战。 采用新语言会带来学习曲线。 随着我们对开发的深入,一些被发现了。

从表面上看,Swift看起来像是C,并且很明显,但是随后它又将值类型,声明式编程和函数体系结构之类的想法潜入了混合中,以使经验丰富的程序员可能会在尝试理解有时非常细微的范例时大吃一惊。他们脚下发生的转变。 一旦所有人入职,这些变化就会带有合理的目的,并为更安全的编程铺平了道路……但是它扩展了学习曲线。 Swift的坡道起步很容易,但有一些不连续之处。

Swift也是一门大语言。 从像Python这样的高级语法中消除鸭子式的简单性是一个不错的选择。 严格和静态为大型项目增加安全性。 但这也导致Swift中类型的爆炸式增长,每种类型都有自己的方法和协议范围。 在此过程中,它失去了一些预期的简单性和灵活性,从而导致您难以理解“在这种情况下我该如何做同样的事情”。 它并不总是像应该的那样正交。

最后,尽管从Swift 2.2到3的迁移非常简单,但确实浪费了资源。 我们的团队成员之一在Linux上进行开发,因为这是开发版本,基础类不完整和构建系统限制的较粗略途径。 幸运的是,随着Swift 3.0的稳定,这些问题已经过去,我们看到了许多好处。

结论

我们在Swift方面的经验是一个积极的过渡。 我们的开发人员喜欢用这种语言工作,而在遇到困难的地方,我们感到耳目一新,看到社区通过每个新版本更好的语法,体系结构,库和语义更新来改善这些问题的速度和参与度。