王垠对 Swift 的评价 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nathanw
V2EX    Swift

王垠对 Swift 的评价

  •  
  •   nathanw
    nathanwhy 2016-06-07 15:12:42 +08:00 10454 次点击
    这是一个创建于 3412 天前的主题,其中的信息可能已经有所发展或是发生改变。
    39 条回复    2016-06-15 22:13:22 +08:00
    yoa1q7y
        1
    yoa1q7y  
       2016-06-07 15:20:43 +08:00
    依旧不可一世
    ChaosPark
        2
    ChaosPark  
       2016-06-07 15:25:10 +08:00   4
    自从前几天我知道这是一个近 40 岁的老男人,经济上如此悲惨;学术上没有什么拿得出手的成就;感情上回国约炮女粉丝,还在为不知道多少岁的前女友学费奋斗。就放弃了关注此人。
    ditsing
        3
    ditsing  
       2016-06-07 15:27:26 +08:00   1
    同意"如果你看透了 value type 的实质"这一段和之前的所有段落。他对 reference type 和 value type 的理解也让我有茅塞顿开之感。

    当然我既不是程序语言专家也不是编译器专家。欢迎讨论~
    kkhaike
        4
    kkhaike  
       2016-06-07 15:34:37 +08:00
    他提到,如果是值就一定会拷贝,其实 swift 提到过会尽量避免拷贝,编写者需要明知这是拷贝倒是事实。
    EPr2hh6LADQWqRVH
        5
    EPr2hh6LADQWqRVH  
       2016-06-07 15:34:38 +08:00
    懂个卵,一切都是语法糖,预编译阶段会解决所有这种问题
    Andiry
        6
    Andiry  
       2016-06-07 15:35:47 +08:00 via Android   1
    如果王垠这一篇指出的问题是真的,那我确实同意 swift 的设计者是 SB 。
    kera0a
        7
    kera0a  
       2016-06-07 15:36:18 +08:00
    我觉得他说的有道理啊,
    swift Array 一传递就拷贝,确实和我的心里预期不符。
    以至于还是得用 NSArray
    shiny
        8
    shiny  
       2016-06-07 15:36:49 +08:00   4
    有人了说 V2EX 开了王垠博客的 RSS 订阅

    诚不我欺也。
    daya
        9
    daya  
       2016-06-07 15:44:18 +08:00 via Android
    @shiny 知乎也开了王垠博客的 RSS 订阅
    ;)
    hjc4869
        10
    hjc4869  
       2016-06-07 15:51:06 +08:00
    真这么设计的话这 SB 语言一辈子不碰(
    hxtheone
        11
    hxtheone  
       2016-06-07 16:01:14 +08:00
    并不了解 Swift, 如果这篇文章属实, 那这个设计真的是太蠢了
    Mutoo
        12
    Mutoo  
       2016-06-07 16:16:44 +08:00
    这篇文章讲得挺中肯的。不过他就是喜欢对事也对人。
    paradoxs
        13
    paradoxs  
       2016-06-07 16:17:04 +08:00
    居然承认了 apple 的统治地位
    chmlai
        14
    chmlai  
       2016-06-07 16:20:42 +08:00
    Swift 的 Array 语义上是 Value Type;
    至于实际什么时候才真正拷贝数据 这个自然是有优化的啦.
    chmlai
        15
    chmlai  
       2016-06-07 16:21:49 +08:00
    这个设计其实挺符合现在 immutable-object 的潮流
    2225377fjs
        16
    2225377fjs  
       2016-06-07 16:22:22 +08:00   1
    写的不错
    nevermind1998
        17
    nevermind1998  
       2016-06-07 16:23:46 +08:00
    @ChaosPark 约炮女粉丝 ??
    chairuosen
        18
    chairuosen  
       2016-06-07 16:28:42 +08:00   1
    他说的对啊
    kkhaike
        19
    kkhaike  
       2016-06-07 16:30:53 +08:00
    @ChaosPark 感情求详细,瓜子板凳
    timothyye
        20
    timothyye  
       2016-06-07 16:37:09 +08:00 via Android
    最后一句才是重点
    n37r06u3
        21
    n37r06u3  
       2016-06-07 16:55:59 +08:00
    BTW ,如果 Apple 支付足够多的费用,我倒可以考虑兼职做他们的语言设计顾问 ;-)
    ChaosPark
        22
    ChaosPark  
       2016-06-07 17:19:45 +08:00
    @kkhaike
    https://www.zhihu.com/question/25118295 征求女粉丝,原文已经删掉了。前女友的问题很多文章都有提及。
    nonoroazoro
        23
    nonoroazoro  
       2016-06-07 17:43:33 +08:00   4
    总之如果王反应的是实情,那 Swift 就是设计有问题。

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

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

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

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

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

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

    即使是 const 的指针在检查参数的时候也需要检查空指针, C++ 里的引用本身就不存在空指针的情况,所以不用检查。但这和 const 不 const 没关系。
    YuJianrong
        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 的)……

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

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

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

    我的理解是, bibi 谁都会,有本事,自己弄。每种语言,每种语法,每种实际的运行处理方式,都有设计者的考量,也都有利弊,没事儿别 bibi ,多为社区做点贡献,在项目中少给后面维护的人留点垃圾看不懂的代码和 bug ,才是真的。
    alsotang
        38
    alsotang  
       2016-06-08 11:58:52 +08:00
    @ChaosPark 啥啥啥,约炮???没搜到相关信息啊。。
    wizardforcel
        39
    wizardforcel  
       2016-06-15 22:13:22 +08:00 via Android
    Swift.Array 的实现方式其实就是 std::vector ,没看到王垠喷一句 c++,难道是因为欺软怕硬??
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5528 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 03:45 PVG 11:45 LAX 20:45 JFK 23:45
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86