程式师应该要放心大胆地用 Swift 重写 C++ 的东西

2022-05-02 01:24:41 +08:00
 ShikiSuen

Swift 5.x 以及 SwiftUI 在全球 Cocoa Devs 群体掀起了一阵旋风,这股旋风也吹到了台澎金马的技术社群里头。

我们所敬爱的业界前辈保哥,就在 GitHub 上利用了他的宝贵时间,将某农作物注音输入法内充满类型安全问题的 ObjC 部分用 Swift 重写了一半。之后,还给这款输入法引入了状态管理架构,还强调了 Swift 的类型安全性有多重要。

威注音专案为了要厚颜无耻地蹭保哥的热度,在此给出了实际表率:自己分离出来成为独立的专案,将保哥没有完成的那部分 ObjC++ 也几乎用 Swift 重写殆尽、甚至将语言模型模组也全都用 Swift 重写了。威注音主张:一款专案,无论内部的 C++ 模组多么机巧高深,都要尝试用 Swift 去重写、而不是在那里沉浸于「一定要膜拜那些擅长玩弄记忆体指针的 C++ 大佬们」的那种政治气氛。如果一款产品的开发参与者们将彼此之间的表面上的礼仪关系看得比产品品质还要远远更重要的话,那这基本就是 product quality ensurance 的大敌。

(这假掰文写不下去了,我学不来这种文风[1]。)

1^ 杨维中《工程师应该要放心大胆地不写文档》 https://p5d12000.medium.com/543c11062cd6

6506 次点击
所在节点    iDev
8 条回复
weak
2022-05-02 02:03:52 +08:00
程式师=程序员 看标题我就知道发帖的来自台湾
ShikiSuen
2022-05-02 10:09:27 +08:00
@weak Xcode 目前尚未提供原生的 Rust 支援。
ShikiSuen
2022-05-02 10:10:14 +08:00
@weak 另外我这篇是模仿原文的文风。
Building
2022-05-02 12:35:01 +08:00
Swift 5.x 及 SwiftUI 在全球 Cocoa Devs 群体中掀起了一阵旋风,这股旋风吹到了台澎金马的技术社群里。
保哥是一名受人尊敬的业界前辈, 他最近将宝贵的时间利用在了 GitHub 上,将某农作物注音输入法内充满类型安全问题的 ObjC 语言部分用 Swift 语言重写,还给这款输入法引入了状态管理架构,并强调了 Swift 类型的安全性。
威注音专案跟随保哥的热度,也给出了实际表率,决定自己分离出来成为独立的专案,将保哥没有完成的 ObjC++ 部分全部用 Swift 重写,甚至包括其中的语言模型模组。威注音主张说明一款专案,无论内部的 C++ 模组多么机巧高深,都建议尝试用 Swift 去重写,而不是沉浸于“一定要膜拜那些擅长玩弄记忆体指针的 C++ 大佬们”的政治气氛。
如果一款产品的开发参与者们将彼此之间的表面礼仪关系看得比产品品质更重要的话,那这是 product quality ensurance 的大敌。
agagega
2022-05-02 14:25:14 +08:00
- C++在所有平台的 GUI 开发上都是一等公民,开发工具会主动支持 C++代码。Swift 在 Apple 平台里属于一等公民,Rust 在哪都不是
- Swift 于 2014 年发布,2015 年开源并支持 GNU/Linux ,2020 年支持 Windows ,然后到现在都没有一个 FreeBSD 的 package ,这社区力量也太弱了点
- Apple 对 Swift 开源这事相比微软缺乏诚意。微软用开源的.NET Core 实现统一了不同平台.NET 的基础部分,但 Apple 平台的 Swift 和其他平台的 Swift 依然是两套运行时(如果说错了请指正)。并且 Swift on Server 搞了这么多年,看起来 Apple 没有给予任何支持。有点怀疑 Swift 开源并不是 Apple 软件部门的什么战略考虑,而是当年 Chris Lattner 等项目领导人的个人爱好
- 虽然大家对 MVVM 这套在前端界已经流行快十年的东西见怪不怪,但 SwiftUI 充分把类型约束应用到 GUI 组件的做法毫无疑问是种创新。我认为即使没有 Result Builder 这个语法糖,想用 C++或者 Rust (甚至 TypeScript?)写 GUI 的框架都可以学一学
- 跨语言调用难免有各种代价,代价最小的方式就是用 Objective-C 给 C/C++封一层,很管用,除此之外也确实很少有用 Objective-C 而不是 Swift 的理由。Swift/C++/Rust 这三个语言的内存管理模型都不完全一样,交互起来挺要命的。不过 Swift 有 Ownership 和 Lifetime 的计划,Clang 也有了加入 Lifetime 标记的提案,大概要天下大同了?另外,三个语言对「字符」的定义都不一样,混用的话我觉得一定会出 bug
- 目前 Swift 性能相比 Clang 和 Rust 明显落后,即使基于同样的后端 LLVM
- 既然选择用 Swift/SwiftUI ,想必是原生技术爱好者。既然如此,那便入乡随俗吧
mxalbert1996
2022-05-03 12:01:29 +08:00
一般说 quality assurance (QA)吧
imkerberos
2022-05-03 22:15:13 +08:00
我有一个至少读取 2GB 数据文件进行分析的程序, 看 swift 都发展了快 10 年了, 而且又这么现代, 我下定决心用 swift 重写. 三个月过去了, 还没有进展, 谁能告诉我 swift 中和 fopen 等效的函数是哪个?
MrKrabs
2022-05-04 14:20:27 +08:00
@imkerberos 可以直接用 fopen

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/850447

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX