objc.io issue 20 的一篇访谈, 谈 Swift 目前另人难受的地方 很有同感

2015-02-26 10:49:26 +08:00
 banxi1988

终身学习的一代人

对吐槽的引用如下:

事实上我其实觉得 Apple 的 Swift 开发团队是 Apple 里最优秀的工程师团队,但是工作还没有完成。现在还到处都是 bug,经常崩溃,偶尔还会生成错误代码。更严重的是,它真的很慢。非常非常慢。不能增长式编译是最大的问题。我们构建的是一个有 UI 的应用,所以我们得花上和考虑如何促进学习差不多相同的时间来打磨应用的用户交互和动画 ,然而每次都要花接近两分钟才能看到效果实在是很伤 -- 并不仅仅是效率而是士气。这让所有人都很愤怒,基本上所有时间所有人都很愤怒。更糟的是,这让我们变懒了。因为太慢,我们不想改东西,所以如果用 Swift 实现的 UI 比 Objective-C 实现的 UI更难看我一点都不会吃惊,因为在上面的迭代总是让我们崩溃。

PS: 现在我正在尝试 Xcode 6.3 Beta 2, 感觉编译速度上已经好很多了.

4705 次点击
所在节点    iDev
21 条回复
Karsa
2015-02-26 10:54:51 +08:00
一直在关注他是否变好,可能在逐步变,但一直没有到能替代oc的地步
freefcw
2015-02-26 10:57:36 +08:00
翻译得很别扭??

增长式编译会不会是增量编译?
banxi1988
2015-02-26 11:03:53 +08:00
@freefcw
确实,翻译得不地道,就是增量编译
原文:
> The lack of incremental compilations is the biggest pain point for me.

我认为这样翻译比较好:
> 对我来说,没有增量编译是最大的痛点

痛点一词我感觉是常用的.

Xcode 6.3 beta 也带来了此特性,Release Note 如下:
> Swift now supports building targets incrementally, i.e. not rebuilding every Swift source file in a target when a single file is changed. This is based on a conservative dependency analysis, so you may still see more files rebuilding than absolutely necessary. If you find any cases where a file is not rebuilt when it should be, please file a bug report; running Clean on your target should then allow you to complete your build normally. (18248514)


@Karsa
我初学就是用 Swift 来写项目的了,在我来看,OC 只是辅助的地位. 因为我觉得写 Objective-C 代码有点难受.
palxex
2015-02-26 12:01:32 +08:00
swift走的是C++的老路:静态类型,模板化参数,编译期绑定。即使实现了增量式编译,我也不看好它的编译速度能有多快。
苹果的系统一直是用动态语言构建的,想一步登天改成swift这样一个静态语言,结果就是以前鸭子类型遮住的bug一下子全都暴露出来了。现在仅限于xcode都这么能死,我不敢想象苹果一旦决定用swift改写系统组件会是什么级别的地震。
damngood
2015-02-26 12:16:05 +08:00
@palxex objc 应该不能算为 duck type 这个类别里面

更严格的编译器检查把潜在的 bug 提前暴露出来不是好事么.
只是工作量应该有点大.
看最近 swift 的变化, 感觉和已有的 c/objc 库之前的契合要越来越好. 所以个人觉得完全 swift 化应该不是件很紧急的事情.
arachide
2015-02-26 13:09:01 +08:00
小众语言

皈依偶们大javascript吧
alsotang
2015-02-26 13:16:56 +08:00
@arachide 哈哈哈哈,说得好。js all the things
palxex
2015-02-26 13:30:32 +08:00
@damngood objc里有能力给任意object发任意message……这比一般意义上的duck typing都要强。http://en.wikipedia.org/wiki/Duck_typing#In_Objective-C
静态强类型是有上面列举的好处,这点应该承认,但得到这些好处并非没有代价。它本身是会极大阻碍语言自身的表达力的。举个最简单的例子,纯swift里——跟C++一样——连json字面量都写不出来。所有swift的json库,你可以看看是否有不基于ObjC的NSDictionary做出来的。参数化类型(C++模板/swift范型)为此能做的不多,但是拖慢编译时间有余。而语言的表达力和编译速度是快速迭代的基石。这基本上可以解释C++为什么在今天不再是主流前端语言,而我看不出为什么swift会例外。
注:我本人没在用swift做开发,仅就了解到的情况评论,听者自辩。以上仅就当前swift与objc泾渭分明的情况立论,未来可能swift和objc会从语言层面进一步融合,我个人认为只有那样它才有替代objc的可能。
arachide
2015-02-26 13:54:20 +08:00
偶过去写的代码 能用奔放一说的

只有

1.javascript
2.objectpascal(delphi)
3.objective-c(cocoa)

别的都多少有些不爽
robertlyc
2015-02-26 15:26:05 +08:00
@palxer 同意 静态强类型的语义表达真的有限 对比duck typing 其实是在开倒车
pepsin
2015-02-26 16:00:10 +08:00
苹果里面感觉就没有差劲的工程师团队,每次看里面出来的人的活,都只能惊呼不可战胜
arachide
2015-02-26 16:06:24 +08:00
@pepsin 小米锤子秒杀苹果
garfeildma
2015-02-26 16:10:46 +08:00
duck typing本身是一个扯淡的词,不过是一种late binding
palxex
2015-02-26 16:36:32 +08:00
@garfeildma 同出而异名罢了。late binding着重在绑定时间上,duck typing则着重强调忽略类型调用的能力,在讨论语言表达能力时后者更切题一点——虽然说的的确是同一个概念。
bombless
2015-02-26 19:46:12 +08:00
你们看增长式编译难道看不出说的就是增量编译?
我自己觉得完全不影响阅读。

恰好昨天晚上也是看到某微信公众号在推这篇文章,我还把这段截屏了丢到vczh的群上。
arachide
2015-02-26 20:22:29 +08:00
不皈依javascript的 都是浮云
notcome
2015-02-27 08:20:37 +08:00
静态类型表达能力有限………………
Chris Lattner 为什么不干脆把 Haskell 全抄过来,然后雇人写个好点的教程,哪有这么多麻烦事,要性能有性能,要表达能力有表达能力,要安全有安全。
garfeildma
2015-02-27 10:13:44 +08:00
@notcome 那就没几个人学得会了
notcome
2015-02-27 12:22:23 +08:00
@garfeildma 哈哈哈
wezzard
2015-03-06 10:14:09 +08:00
Swift內的對象在內存模型上完整實現了 NSObject 這個 protocol,所以也是具有一定動態性的,只是不知道爲甚麼蘋果不開放出來。
另外,表面上看 Swift 的任何 class 都是沒有根類的,但是其實是有的,這個根類叫 SwiftObject。

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

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

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

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

© 2021 V2EX