V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
banxi1988
V2EX  ›  Python

Python的设计错误:yingwang:程序语言的常见设计错误(2) - 试图容纳世界

  •  
  •   banxi1988 ·
    banxi1988 · 2013-04-19 19:43:00 +08:00 · 8738 次点击
    这是一个创建于 4265 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我觉得说得挺有道理的,而且我知道这里很多Python高手,转来给大家评评。
    http://www.yinwang.org/blog-cn/2013/04/18/language-design-mistake2/

    PS:yinwang同学最近博客更新比较多,我是每天都会打开他的主页去看看的。
    53 条回复    1970-01-01 08:00:00 +08:00
    swulling
        1
    swulling  
       2013-04-19 19:45:45 +08:00
    我觉得这种不应该举个抽象的例子,而是实打实的说个应用场景。甚至可以附上代码。

    否则泛泛而谈没啥意思
    binux
        2
    binux  
       2013-04-19 19:53:17 +08:00
    如果出现了没有头的人,并且它活得好好的,说明它就是可以存在的。
    国王不去想怎么解决这个问题,而是想怎么解决出问题的人,这到底是谁的错误?
    zuroc
        3
    zuroc  
       2013-04-19 20:32:37 +08:00   ❤️ 1
    just say : " Stop talking and show me your code"
    kran
        4
    kran  
       2013-04-19 20:59:24 +08:00 via iPhone
    @zuroc 文章里有连接,show了code了
    clino
        5
    clino  
       2013-04-19 21:11:43 +08:00
    话说看了 scheme 的代码只觉得一阵阵的恶心,完全没兴趣再多了解一点这"一种非常严谨的语言",所以不知道博主喜欢的这种"动态语言"到底好在哪里

    其实我觉得语言本身的使用者更有发言权,过多地去担心"这个国家到处跑着没有头,三只手,六只眼的怪人",可是我印象里没看到过动态语言的使用者有过这种抱怨
    flypiggy
        6
    flypiggy  
       2013-04-19 21:59:38 +08:00
    @clino 稍微深入了解一点,scheme还是很舒服的=.=尤其是racket已经做的很友好了~很多语言了解一下很有意思的...至今为止让我最不适的语言是php....
    keakon
        7
    keakon  
       2013-04-19 22:03:13 +08:00   ❤️ 1
    有的人就是不懂 putOnHat(people) 和 people.putOnHat() 的区别。
    whtsky
        8
    whtsky  
       2013-04-19 22:03:21 +08:00 via iPhone
    按照作者的说法,他写了 Jython ?
    clino
        9
    clino  
       2013-04-19 22:20:11 +08:00
    @flypiggy 看到那么多括号很倒胃口,我比较讨厌天生可读性差的语言,像 perl/shell 这种用$的我比较讨厌
    yangxin0
        10
    yangxin0  
       2013-04-19 22:37:25 +08:00   ❤️ 1
    @whtsky 静态分析就是在程序执行前对源码做语义分析,可以分析出潜在的错误,注意这里说的不是语法错误。
    muzuiget
        11
    muzuiget  
       2013-04-19 22:38:56 +08:00
    不明觉厉
    yangxin0
        12
    yangxin0  
       2013-04-19 22:39:19 +08:00   ❤️ 1
    @swulling 不应该叫人家去show code,而是自己主动探索。建议看看SICP,我反正看了一些,做了部分题目,感觉发现了更大的世界, 现在可能功力不够,还不能道出。
    lightening
        13
    lightening  
       2013-04-19 22:46:40 +08:00
    @keakon 嗯,说得好
    clowwindy
        14
    clowwindy  
       2013-04-19 23:04:36 +08:00   ❤️ 4
    总结起来就是,给 duck typing 的语言写静态类型分析器,没写出来,怪这个语言设计错了。
    nine
        15
    nine  
       2013-04-19 23:11:57 +08:00
    “当然,我在扯淡”
    GordianZ
        16
    GordianZ  
    MOD
       2013-04-19 23:13:11 +08:00
    请不要全文转载。内容已删。
    reorx
        17
    reorx  
       2013-04-19 23:19:54 +08:00
    看这种文章中经常链接到自己其他文章的博客,你会很快被作者的世界观洗脑的。
    dreampuf
        18
    dreampuf  
       2013-04-19 23:35:28 +08:00
    拿CPython的实现去复合"程序语言的常见设计错误(2) - 试图容纳世界"
    enotey
        19
    enotey  
       2013-04-20 00:17:14 +08:00 via Android
    哈哈,作者好可爱
    knightliaotest4
        20
    knightliaotest4  
       2013-04-20 00:46:18 +08:00
    cassyfar
        21
    cassyfar  
       2013-04-20 06:31:06 +08:00
    比喻都是对学术严谨的最大侮辱 这更向一篇科普
    我觉得如果yingwang真的有这么多idea,为什么没有做出一些得到业界认可的成果。比较怀疑他的墨水真的有多少,或者太过浮躁了。
    hooluupog
        22
    hooluupog  
       2013-04-20 11:06:43 +08:00
    说的很有道理。感兴趣的人可以看看http://www.python.org/dev/peps/pep-3117/#id14
    skywalker
        23
    skywalker  
       2013-04-20 12:08:44 +08:00
    scheme很好,python不完美,那又怎么样? 语言只是工具,它们产生的原因不是为了完美,而是解决问题,就像菜刀虽然会切到手,但是只要小心点还是很好用的。 python这个不完美的工具所创造的东西比scheme要多得多,王垠要真像证明scheme比其它语言强大,不妨写个实际的东西出来。
    hooluupog
        24
    hooluupog  
       2013-04-20 12:34:29 +08:00
    我觉得王垠一个劲的夸scheme是有私心的。1.他的导师是《The Little Schemer》的作者,对scheme爱屋及乌;2.他是研究编译器的,所以他所说的东西都是站在一个底层编译器,解释器的设计者的角度去谈语言的。刚才看了篇http://coding.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems/(hacker news上的一篇)文章,这里面又涉及到静态vs动态,强类型vs弱类型等等历史争论,不是三言两语说的清的。但那篇文章的结论很好:Dynamically typed languages are popular now. The pendulum will swing back and forth many times in the coming years. The only solution is flexibility. Learn to work in each environment and you’ll work well with any team.
    kavinyao
        25
    kavinyao  
       2013-04-20 12:35:29 +08:00
    @hooluupog Are you serious?
    hit9
        26
    hit9  
       2013-04-20 15:08:05 +08:00
    @reorx 哈,又看到你了.
    burnex
        27
    burnex  
       2013-04-20 15:13:52 +08:00
    w
    reorx
        28
    reorx  
       2013-04-20 15:46:58 +08:00
    @hit9 \( ̄▽ ̄)
    venglide
        29
    venglide  
       2013-04-20 16:46:46 +08:00   ❤️ 2
    show me the code?我可不觉得语言设计层面的东西是show了code大家就都能明白的了(先不管正确与否),如果某个具体场景或算法什么的来点代码或许大家还能有点头绪。不要把show me the code当板蓝根用好不。
    ——难得的吐槽
    feiandxs
        30
    feiandxs  
       2013-04-20 18:18:08 +08:00
    对绝大部分用python都写不出个像样的架构合理的错误极少的项目的人来说,参与讨论语言设计方面的东西基本也可以类比成白菜命白粉心。
    aisk
        31
    aisk  
       2013-04-20 18:39:13 +08:00
    垠神这种学院派哪里知道我等码农的辛苦,我们为了开发效率宁愿留着这些语言dirty的地方。
    perrywky
        32
    perrywky  
       2013-04-20 21:34:01 +08:00
    他说的这个问题可以通过良好的架构设计来避免,根本就不是什么大问题
    再好的语言配上垃圾的架构设计一样漏洞百出
    如何在代码不断膨胀的情况下依然维持一个良好的架构,考验的是你的耐心和技巧,和你用什么语言一毛钱关系都没有
    e1443367
        33
    e1443367  
       2013-04-20 21:40:43 +08:00
    + + + +
    RisingV
        34
    RisingV  
       2013-04-22 13:51:35 +08:00
    就事论事就行了,针对问题讨论问题。景德镇居民的特点就是说着说着就扯到人了,进而因为捍卫自己对问题的立场而去质疑人的品格和能力。问题还是那个问题,无论是谁提出来的。这才是基本的治学态度。
    zaeneas
        35
    zaeneas  
       2013-04-22 14:31:41 +08:00
    我倒是觉得这像是在说类型检查或者说静态语言和动态语言之争

    如黑客与画家提到了,某些程序元不喜欢程序去限制他们的自由,于是他们偏好于动态语言;但是还有一些觉得应该有很多的类型检查之类防止程序猿犯错,所以他们偏好于静态语言或者有类型的语言
    oldcai
        36
    oldcai  
       2013-04-22 19:01:26 +08:00
    @clino 原来你也不喜欢钱啊,我看到php里面的$就烦。
    binux
        38
    binux  
       2013-04-28 13:53:26 +08:00
    @venglide 有一天,觉得原来的代码风格太烂了,决定重新调整一下,commit之后发现,干什么都没变
    nullptr404
        39
    nullptr404  
       2013-04-28 14:04:12 +08:00
    @zuroc 他有github账号的https://github.com/yinwang0 那个ydiff写的很有水平
    nullptr404
        40
    nullptr404  
       2013-04-28 14:24:02 +08:00
    @clino scheme是非常简单,纯粹和美的语言。racket的库非常丰富,开发各种类型的应用都没有问题。
    @clino 所谓的“可读性”差只是相对个人经历而言的,如果你一开始就从lisp入门,没准觉得C语言可读性差呢。
    banxi1988
        41
    banxi1988  
    OP
       2013-04-28 15:54:14 +08:00
    @nullptr404 同意,今天安装了racket试试了试,感觉
    用DrRacket写代码的感觉也挺不错的。而且racket确实对于常用的功能都有库函数提供。
    #lang racket
    (define readability "这个东西很多时候跟母语一样")
    (define (reaable lang)
    (you have learn it))
    davepkxxx
        42
    davepkxxx  
       2013-04-28 16:06:40 +08:00
    非常同意王垠说的,所以说我更喜欢 scala 和 golang 。
    clino
        43
    clino  
       2013-04-28 16:06:49 +08:00
    @nullptr404 我接触perl比python早,入门早,怎么没觉得perl可读性比python好呢? scheme那么多括号真的是给人读的吗?为什么不设计成其他的方式?我现在在了解不多的情况下凭自己的好恶只能得出这个语言的设计者脑子进水鸟.
    davepkxxx
        44
    davepkxxx  
       2013-04-28 16:11:39 +08:00
    对了,他说给 Python 写过一个静态分析器,是他在Google实习的时候写的,这个分析器有可能是用在Google Code项目上。
    nino
        45
    nino  
       2013-04-28 16:16:32 +08:00
    davepkxxx
        46
    davepkxxx  
       2013-04-28 16:45:24 +08:00
    @nino 我基本同意他的观点,我去年花了2周的时间自学Go,接触不到2个月我就放弃了。还因为一些给不出原因的地方和google groups上的golang-cn主题里的人产生了些许不快。

    我把我当时的观点说一下:

    1、语法很奇怪,除了能省几个括号。谁能看出这么写有什么特别的好处吗?设计语言的人有多讨厌 Lisp 啊……
    for i := 0; i < 10; i++ {
    if i > 5 {
    }
    }

    2、Go的接口设计更像组合,而不是继承,作为一个Java Developer觉得不适应是理所当然的。而且我看不处这么设计有什么好处。

    3、不少地方性能亟待提高,比如 int to string 和 反射。

    4、在Windows上要使用Go很麻烦,我看不出用Win编程有什么不合理的地方。

    5、没有好的 IDE,不是文本编辑器。

    那么说说我放弃Go这么久依然看好它的原因吧。

    首先这个语言很年轻,我觉得它很有潜力。

    静态类型语言很棒,动态类型语言的缺点王垠已经说过很多了。

    其次它的设计理念值得肯定,多线程肯定是未来的方向,从一开始设计的时候就考虑这点肯定比以后打补丁要强。

    Google有实力开发于推广一们优秀的语言,虽然它还没有先例。
    hooluupog
        47
    hooluupog  
       2013-04-28 16:58:48 +08:00   ❤️ 1
    我对王垠批Go的原因就一句话概括:做学术的人看不顺眼一个以优化软件工程为目标的语言。如果他能看顺眼,那才怪了。他那么推崇lisp系的东西也是也是爱屋及乌。
    nullptr404
        48
    nullptr404  
       2013-04-28 17:09:37 +08:00
    @clino 怎么是脑子进水呢,当然是有历史原因的。建议了解下lisp系的历史再来评说。
    kaidee
        49
    kaidee  
       2013-04-28 23:11:42 +08:00
    通看一遍他的文章(也值得全看一遍),能免去很多不必要的争论。
    lfhong
        50
    lfhong  
       2013-04-28 23:25:44 +08:00   ❤️ 1
    以前在stackoverflow看过一个大牛谈到过不同语言,不同framework的对比(他自己是一个著名framework的创始人), 基本上他能回答所有的这些争论。 答案就是

    ”它们就是被设计成这样的“

    每个语言,每个framework,最初都是为了一个比较特定的目的而设计的,因为这样,所以一些项目成功了,成功以后,它们会被用到更广泛的地方,然后最初的那些特意为之的东西,就变成这个博里说的”不足“。

    所以专门把几种不同的语言拿出来挑刺,就显得狭隘了。
    guoquan
        51
    guoquan  
       2013-04-29 00:57:38 +08:00 via iPad
    这不就是prototype机制么,如果这叫设计错误,那面向对象也是一种错误了,因为他使得数据结构很复杂,你需要维护类的许多信息,当你遇到派生,多态,你简直觉得图灵机上设计编译器是np问题,这使得c++,java,c#等标榜这一特性的语言笨重不堪。
    davepkxxx
        52
    davepkxxx  
       2013-04-29 12:46:49 +08:00
    其实关于Python这个语言如何,你看看Python的IDE和其他的语言的IDE就知道了。
    ShiningRay
        53
    ShiningRay  
       2013-04-29 22:30:04 +08:00
    王垠每次写文章都在自吹自擂,强调自己多牛逼,我不否认他牛逼,但他反复提总是让我很不爽
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   833 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:18 · PVG 05:18 · LAX 13:18 · JFK 16:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.