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

王垠对 Swift 的评价

  •  
  •   nathanw ·
    nathanwhy · 2016-06-07 15:12:42 +08:00 · 9975 次点击
    这是一个创建于 3120 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   875 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:32 · PVG 04:32 · LAX 12:32 · JFK 15:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.