王垠对 Swift 的评价

2016-06-07 15:12:42 +08:00
 nathanw

http://www.yinwang.org/blog-cn/2016/06/06/swift

9671 次点击
所在节点    Swift
39 条回复
n37r06u3
2016-06-07 16:55:59 +08:00
BTW ,如果 Apple 支付足够多的费用,我倒可以考虑兼职做他们的语言设计顾问 ;-)
ChaosPark
2016-06-07 17:19:45 +08:00
@kkhaike
https://www.zhihu.com/question/25118295 征求女粉丝,原文已经删掉了。前女友的问题很多文章都有提及。
nonoroazoro
2016-06-07 17:43:33 +08:00
总之如果王反应的是实情,那 Swift 就是设计有问题。

这跟王自不自大、有没有钱、草不草粉有什么关系。

所以我强烈反对楼上好多位的观点,你们还是太浮于表面啊。

说直白点,你能装个逼引来这么多人逼逼吗?
dorentus
2016-06-07 17:50:32 +08:00
前半篇说的都是 Swift 1.2 已经解决掉的问题……

至于后面, Array 怎么就不能是 Value Type 啦?照他那么说, String 也没必要是 Value Type , NSString 作为引用类型已经够用了啊,那为啥大家 NSString 属性都用 copy 不用 strong ?
sumhat
2016-06-07 17:55:21 +08:00
其实也没啥不好的,至少有了一种按值传 array 的方法,要传引用的话,包一个 class 就好了。不可变类型说白了就是语法糖,编译器层面的不可变类型基本没有意义,真要改它的值还是有各种方法可以改。
damngood
2016-06-07 18:00:10 +08:00
Array 的实现具体是什么样子的还是要看源代码的吧

Array 赋值的时候传递的是 value 并不意味着整个 Array 包含的内存块都需要 copy 的吧, 这个要看具体的实现

我记得很多函数式语言里面, 比如 OCaml 里的 list 在传递的时候其实传的就是一个 header, 大部分函数式编程里面的这种数据结构或多或少有一定的优化吧.
yukirock
2016-06-07 19:19:48 +08:00
@sumhat 不可变的意义不是明明可以变的东西故意给你设限,而是可以提升安全性与性能。你知道一个东西不会变,那么天生没有写操作,读操作的安全性也能大大提升。比方 C++ 函数传参,引用和指针并没有本质的区别,但可以 const 可以跳过检查空指针,就是好用。
sumhat
2016-06-07 21:01:56 +08:00
@yukirock 对于 const 的优化,有没有 const 标识,编译器都可以进行优化的。 const 的主要作用是让编译器检查出不正确的用法,这跟运行时的性能和安全性一点关系都没有。

即使是 const 的指针在检查参数的时候也需要检查空指针, C++ 里的引用本身就不存在空指针的情况,所以不用检查。但这和 const 不 const 没关系。
YuJianrong
2016-06-07 21:35:03 +08:00
简直是鬼话连篇。

“由于这个原因,没有任何其它现代语言( Java , C#,……)把 array 作为 value type ”

人家进步一下就不行吗? C/C++的 string 都是 mutable 的,那在 C/C++时期开发的新语言我们是不是要指责

“由于这个原因,没有任何其它现代语言( C , C++,……)把 string 作为 immutable 的数据类型”

这样下去还会有 string 是 immutable 的语言出现吗?还说什么“违反了程序员对于数组这种大型结构的心理模型”,我一开始接触 immutable 的 string 也违反了对于 string 这种大型结构的心理模型好不好(想想一个几十 K 的字符串居然是 immutable 的)……

语言设计者如此设计,必然有其背后的原因和取舍,一个网红随随便便看看就想指点高低实在是有点……
stupidcat
2016-06-07 22:18:02 +08:00
人家又老又穷又没学术成就,但是还是有女粉艹啊。(至于男粉,可能比女粉多一个数量级吧)话说,这楼里某几位有女粉吗?哈哈哈
hstdt
2016-06-08 00:31:07 +08:00
说说个人拙见。觉得只是他的使用习惯和 swift 的设计者不一致罢了,单独拎了个 array 来说事,但是 swift 里面那么多和 array 相关的语法,能不能从这些找出缺点来呢?文章中许多地方不知道是不是我太水或者太愚钝,感觉论据说的让我云里雾里的,并不能让我有种茅塞顿开的感觉。
hstdt
2016-06-08 00:34:45 +08:00
结尾把人贬的一钱不值,从而突出自己所谓的牛逼。总感觉在哪里见过一样,应该是错觉吧,嗯嗯。
loveuqian
2016-06-08 01:00:31 +08:00
苹果有空能不能修修 Xcode
天天要爆炸
tairan2006
2016-06-08 08:39:12 +08:00
不用 swift ,不过我觉得人家说的有道理啊,确实挺蠢的…数组可能很大啊。
kobe1941
2016-06-08 09:48:32 +08:00
@loveuqian Xcode7.3 断点的时候经常卡住,感觉是 Apple 故意的,毕竟今年要出新机器了
yukirock
2016-06-08 10:42:21 +08:00
@sumhat 检查不正确的用法就是安全性啊,避免可能发生的误操作不就是安全性关注的目标之一么。

引用不用检查空指针必然是安全性的提升,也有潜在的性能方面的提升。 const 的确不仅仅是引用的专利这是我疏忽了。但归根结底,一样东西你设计得简单,那么它出问题的风险显然更小。
daniellu
2016-06-08 11:36:45 +08:00
@YuJianrong +1

@timothyye 个人见解,如果需要频繁传递操作一个很大的数组,很有可能是数据处理 /程序逻辑有问题。我觉得需要尽量避免用数组来传递很大的数据。滥用数组( OC 时见过一个项目,另一个人直接说没法改了,不想改,一个数据全局的,各种使用各种修改,根本不知道到底哪里修改了数据,造成了 bug )。

我的理解是, bibi 谁都会,有本事,自己弄。每种语言,每种语法,每种实际的运行处理方式,都有设计者的考量,也都有利弊,没事儿别 bibi ,多为社区做点贡献,在项目中少给后面维护的人留点垃圾看不懂的代码和 bug ,才是真的。
alsotang
2016-06-08 11:58:52 +08:00
@ChaosPark 啥啥啥,约炮???没搜到相关信息啊。。
wizardforcel
2016-06-15 22:13:22 +08:00
Swift.Array 的实现方式其实就是 std::vector ,没看到王垠喷一句 c++,难道是因为欺软怕硬??

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

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

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

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

© 2021 V2EX