1
yoa1q7y 2016-06-07 15:20:43 +08:00
依旧不可一世
|
2
ChaosPark 2016-06-07 15:25:10 +08:00 4
自从前几天我知道这是一个近 40 岁的老男人,经济上如此悲惨;学术上没有什么拿得出手的成就;感情上回国约炮女粉丝,还在为不知道多少岁的前女友学费奋斗。就放弃了关注此人。
|
3
ditsing 2016-06-07 15:27:26 +08:00 1
同意"如果你看透了 value type 的实质"这一段和之前的所有段落。他对 reference type 和 value type 的理解也让我有茅塞顿开之感。
当然我既不是程序语言专家也不是编译器专家。欢迎讨论~ |
4
kkhaike 2016-06-07 15:34:37 +08:00
他提到,如果是值就一定会拷贝,其实 swift 提到过会尽量避免拷贝,编写者需要明知这是拷贝倒是事实。
|
5
EPr2hh6LADQWqRVH 2016-06-07 15:34:38 +08:00
懂个卵,一切都是语法糖,预编译阶段会解决所有这种问题
|
6
Andiry 2016-06-07 15:35:47 +08:00 via Android 1
如果王垠这一篇指出的问题是真的,那我确实同意 swift 的设计者是 SB 。
|
7
kera0a 2016-06-07 15:36:18 +08:00
我觉得他说的有道理啊,
swift Array 一传递就拷贝,确实和我的心里预期不符。 以至于还是得用 NSArray |
8
shiny 2016-06-07 15:36:49 +08:00 4
有人了说 V2EX 开了王垠博客的 RSS 订阅
诚不我欺也。 |
10
hjc4869 2016-06-07 15:51:06 +08:00
真这么设计的话这 SB 语言一辈子不碰(
|
11
hxtheone 2016-06-07 16:01:14 +08:00
并不了解 Swift, 如果这篇文章属实, 那这个设计真的是太蠢了
|
12
Mutoo 2016-06-07 16:16:44 +08:00
这篇文章讲得挺中肯的。不过他就是喜欢对事也对人。
|
13
paradoxs 2016-06-07 16:17:04 +08:00
居然承认了 apple 的统治地位
|
14
chmlai 2016-06-07 16:20:42 +08:00
Swift 的 Array 语义上是 Value Type;
至于实际什么时候才真正拷贝数据 这个自然是有优化的啦. |
15
chmlai 2016-06-07 16:21:49 +08:00
这个设计其实挺符合现在 immutable-object 的潮流
|
16
2225377fjs 2016-06-07 16:22:22 +08:00 1
写的不错
|
17
nevermind1998 2016-06-07 16:23:46 +08:00
@ChaosPark 约炮女粉丝 ??
|
18
chairuosen 2016-06-07 16:28:42 +08:00 1
他说的对啊
|
20
timothyye 2016-06-07 16:37:09 +08:00 via Android
最后一句才是重点
|
21
n37r06u3 2016-06-07 16:55:59 +08:00
BTW ,如果 Apple 支付足够多的费用,我倒可以考虑兼职做他们的语言设计顾问 ;-)
|
22
ChaosPark 2016-06-07 17:19:45 +08:00
|
23
nonoroazoro 2016-06-07 17:43:33 +08:00 4
总之如果王反应的是实情,那 Swift 就是设计有问题。
这跟王自不自大、有没有钱、草不草粉有什么关系。 所以我强烈反对楼上好多位的观点,你们还是太浮于表面啊。 说直白点,你能装个逼引来这么多人逼逼吗? |
24
dorentus 2016-06-07 17:50:32 +08:00
前半篇说的都是 Swift 1.2 已经解决掉的问题……
至于后面, Array 怎么就不能是 Value Type 啦?照他那么说, String 也没必要是 Value Type , NSString 作为引用类型已经够用了啊,那为啥大家 NSString 属性都用 copy 不用 strong ? |
25
sumhat 2016-06-07 17:55:21 +08:00
其实也没啥不好的,至少有了一种按值传 array 的方法,要传引用的话,包一个 class 就好了。不可变类型说白了就是语法糖,编译器层面的不可变类型基本没有意义,真要改它的值还是有各种方法可以改。
|
26
damngood 2016-06-07 18:00:10 +08:00
Array 的实现具体是什么样子的还是要看源代码的吧
Array 赋值的时候传递的是 value 并不意味着整个 Array 包含的内存块都需要 copy 的吧, 这个要看具体的实现 我记得很多函数式语言里面, 比如 OCaml 里的 list 在传递的时候其实传的就是一个 header, 大部分函数式编程里面的这种数据结构或多或少有一定的优化吧. |
27
yukirock 2016-06-07 19:19:48 +08:00
@sumhat 不可变的意义不是明明可以变的东西故意给你设限,而是可以提升安全性与性能。你知道一个东西不会变,那么天生没有写操作,读操作的安全性也能大大提升。比方 C++ 函数传参,引用和指针并没有本质的区别,但可以 const 可以跳过检查空指针,就是好用。
|
28
sumhat 2016-06-07 21:01:56 +08:00
@yukirock 对于 const 的优化,有没有 const 标识,编译器都可以进行优化的。 const 的主要作用是让编译器检查出不正确的用法,这跟运行时的性能和安全性一点关系都没有。
即使是 const 的指针在检查参数的时候也需要检查空指针, C++ 里的引用本身就不存在空指针的情况,所以不用检查。但这和 const 不 const 没关系。 |
29
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 的)…… 语言设计者如此设计,必然有其背后的原因和取舍,一个网红随随便便看看就想指点高低实在是有点…… |
30
stupidcat 2016-06-07 22:18:02 +08:00
人家又老又穷又没学术成就,但是还是有女粉艹啊。(至于男粉,可能比女粉多一个数量级吧)话说,这楼里某几位有女粉吗?哈哈哈
|
31
hstdt 2016-06-08 00:31:07 +08:00 via iPhone
说说个人拙见。觉得只是他的使用习惯和 swift 的设计者不一致罢了,单独拎了个 array 来说事,但是 swift 里面那么多和 array 相关的语法,能不能从这些找出缺点来呢?文章中许多地方不知道是不是我太水或者太愚钝,感觉论据说的让我云里雾里的,并不能让我有种茅塞顿开的感觉。
|
32
hstdt 2016-06-08 00:34:45 +08:00 via iPhone
结尾把人贬的一钱不值,从而突出自己所谓的牛逼。总感觉在哪里见过一样,应该是错觉吧,嗯嗯。
|
33
loveuqian 2016-06-08 01:00:31 +08:00 via iPhone
苹果有空能不能修修 Xcode
天天要爆炸 |
34
tairan2006 2016-06-08 08:39:12 +08:00
不用 swift ,不过我觉得人家说的有道理啊,确实挺蠢的…数组可能很大啊。
|
36
yukirock 2016-06-08 10:42:21 +08:00
@sumhat 检查不正确的用法就是安全性啊,避免可能发生的误操作不就是安全性关注的目标之一么。
引用不用检查空指针必然是安全性的提升,也有潜在的性能方面的提升。 const 的确不仅仅是引用的专利这是我疏忽了。但归根结底,一样东西你设计得简单,那么它出问题的风险显然更小。 |
37
daniellu 2016-06-08 11:36:45 +08:00
@YuJianrong +1
@timothyye 个人见解,如果需要频繁传递操作一个很大的数组,很有可能是数据处理 /程序逻辑有问题。我觉得需要尽量避免用数组来传递很大的数据。滥用数组( OC 时见过一个项目,另一个人直接说没法改了,不想改,一个数据全局的,各种使用各种修改,根本不知道到底哪里修改了数据,造成了 bug )。 我的理解是, bibi 谁都会,有本事,自己弄。每种语言,每种语法,每种实际的运行处理方式,都有设计者的考量,也都有利弊,没事儿别 bibi ,多为社区做点贡献,在项目中少给后面维护的人留点垃圾看不懂的代码和 bug ,才是真的。 |
39
wizardforcel 2016-06-15 22:13:22 +08:00 via Android
Swift.Array 的实现方式其实就是 std::vector ,没看到王垠喷一句 c++,难道是因为欺软怕硬??
|