V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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
miniyao
V2EX  ›  Python

Python 4 会不会又是一门新语言?

  •  
  •   miniyao · Dec 18, 2019 · 19394 views
    This topic created in 2333 days ago, the information mentioned may be changed or developed.
    历史原因 Py3 不兼容 Py2,现在 Python 3 已经到 3.8,3.9 了,很快 3.n 的数字要用完了,版本号应该 4.0 起跳了。Python 4 会借大版本号,再搞一次大跃进吗?全面拥抱多核心 CPU ?
    106 replies    2020-01-03 14:38:36 +08:00
    1  2  
    raysonx
        1
    raysonx  
       Dec 18, 2019 via iPhone   ❤️ 22
    3.9 3.10 3.11 3.12 ... 3.10086
    Tink
        2
    Tink  
    PRO
       Dec 18, 2019 via iPhone
    不会
    MinQ
        3
    MinQ  
       Dec 18, 2019 via Android   ❤️ 18
    最后版本号可以是 3.141592653 嘛🐶
    wtks1
        4
    wtks1  
       Dec 18, 2019 via Android
    说不定直接从 python3 变成 python+了呢
    Xuyiyang23333
        5
    Xuyiyang23333  
       Dec 18, 2019
    @raysonx 23333。
    shintendo
        6
    shintendo  
       Dec 18, 2019
    python 2020
    tiedan
        7
    tiedan  
       Dec 18, 2019
    python 3 plus
    linvaux
        8
    linvaux  
       Dec 18, 2019 via Android   ❤️ 2
    Python3A,Python4 多不吉利
    lhx2008
        9
    lhx2008  
       Dec 18, 2019
    如果向前兼容的话,就还是 3.10 3.11 ,不向前兼容才是 4.0,并不是 Java 和 Chrome 那种只管加主版本
    ipwx
        10
    ipwx  
       Dec 18, 2019 via Android   ❤️ 2
    楼主你需要理解 semver
    Pastsong
        11
    Pastsong  
       Dec 18, 2019 via Android   ❤️ 4
    3.n 就要用完了还行,是谁规定 n<10 的?
    lhx2008
        12
    lhx2008  
       Dec 18, 2019
    @lhx2008 #9 向前 -> 向后
    mimzy
        13
    mimzy  
       Dec 18, 2019
    不会。「 Python 4.0 will merely be "the release that comes after Python 3.9". (Also the release after 3.9 will probably just be 3.10.) 」另外 GIL 不是那么容易去掉的。

    http://www.curiousefficiency.org/posts/2014/08/python-4000.html
    miniyao
        14
    miniyao  
    OP
       Dec 18, 2019   ❤️ 1
    @raysonx 这个命名方式今后会造成很大的困惑,比如 Python 3.6 和 Python 3.60 看起来很像,其实相隔了 54 个小版本。
    leavic
        15
    leavic  
       Dec 18, 2019
    真拥抱多 CPU 核心了我管他兼容不兼容,一定上。
    echo1937
        16
    echo1937  
       Dec 18, 2019   ❤️ 1
    emm,Python 这个语言如果不搞好 Python Specification 的,靠 CPython 修修补补,很难解决所谓的多核心问题。
    mimzy
        17
    mimzy  
       Dec 18, 2019
    raysonx
        18
    raysonx  
       Dec 18, 2019 via iPhone
    @miniyao 然而这种版本命名方式已经成为现在绝大多数著名软件所用了,包括 Linux 内核 kubernetes Nginx 之类的
    DefoliationM
        19
    DefoliationM  
       Dec 18, 2019 via Android
    ? 3.10 3.11 3.10000 被你吃了?
    imgse
        20
    imgse  
       Dec 18, 2019
    python 是要作死吗? python2 和 3 的兼容问题,才快解决完。
    xpresslink
        21
    xpresslink  
       Dec 18, 2019   ❤️ 4
    给楼主科普一下 Python 的版本号知识。
    实际所有的官方 release 版本号都是由完整三段组成的,分别是:major.minior.micro,每段不限于 1 位数,比如 3.12.34 这是合法的。

    major 号变化是翻天覆地的。
    minior 号变化说明有新增功能或功能变更,
    micro 变化没有功能不同,只是优化或解决 bug

    官方说明: https://www.python.org/dev/peps/pep-0440/

    python 的三方库都执行这个规则定版本号。比如 django 1.11.27
    ys0290
        22
    ys0290  
       Dec 18, 2019 via iPhone
    别啊,3 的手册还没看完呢
    hakono
        23
    hakono  
       Dec 18, 2019
    @Pastsong 但是作为一个正常程序猿的思维,n 会自然地被作为 string 中的一个字符来看待,而不是数字中的自然数 n。
    比如 3.11 会首先觉得是 3.1 的子版本而不是十一
    因为这种思维上的问题,早就出过不止一次问题了。最经典的应该就是当年 windows 10 发布,因为 windows 获取系统版本的 api,返回的版本号是 10.0,导致很多软件只取第一个字符,把系统版本编号当成了 1,认为系统版本过老拒绝启动



    顺便贴一下 MSDN 上的各个系统对应的版本数字,也让大家来想想,如果自己处在 windows xp 或者 windows 7 的时代,面对这么缓慢增长的版本数字,当时肯定会觉得,在有生之年微软也不回把版本跌倒到 10。然而谁也没想到,微软直接来了个 win10。如果自己处在那个时代,是否能避免上面说的 BUG ?

    Operating system Version number
    Windows 10 10.0*
    Windows Server 2019 10.0*
    Windows Server 2016 10.0*
    Windows 8.1 6.3*
    Windows Server 2012 R2 6.3*
    Windows 8 6.2
    Windows Server 2012 6.2
    Windows 7 6.1
    Windows Server 2008 R2 6.1
    Windows Server 2008 6.0
    Windows Vista 6.0
    Windows Server 2003 R2 5.2
    Windows Server 2003 5.2
    Windows XP 64-Bit Edition 5.2
    Windows XP 5.1
    Windows 2000 5.0
    KyonLi
        24
    KyonLi  
       Dec 18, 2019 via iPhone
    @hakono #23 那我属于不正常的,可能是因为第一次有意识的看版本号就是三段的,导致我产生了要用以.分隔后的正整数来比较大小的错误习惯
    Pastsong
        25
    Pastsong  
       Dec 18, 2019   ❤️ 5
    @hakono 作为一个程序员,你不仅要知道被广泛使用的 SemVer https://semver.org/ ( Python,Node.js ,Go,PHP 等),还要知道版本只是一个约定的规范,软件可以自由地使用任何版本系统,比如 Windows 10 Version 1903 Build 18362.535 ,Java SE 8u231,TeX 3.14159265
    Vegetable
        26
    Vegetable  
       Dec 18, 2019
    Osk
        27
    Osk  
       Dec 18, 2019 via Android
    同不正常,导致数学上比较 1.11 和 1.2 这种,下意识觉得 1.11 更大,但仔细一想又发觉哪里好像不对劲。。。😭
    toptyloo
        28
    toptyloo  
       Dec 18, 2019 via Android
    不会
    wwqgtxx
        29
    wwqgtxx  
       Dec 18, 2019 via iPhone   ❤️ 2
    @hakono 包括但不限于 linux 内核,nodejs,golang 都在大量的使用 n>10 的版本号,可能你要想想什么才是正常程序猿的思维了
    em70
        30
    em70  
       Dec 19, 2019
    @linvaux iphone 4 也不吉利吗
    Felldeadbird
        31
    Felldeadbird  
       Dec 19, 2019 via iPhone
    所以我还是没理解到 1 和 10 难道不是区别很大的版本?唔…?
    zdnyp
        32
    zdnyp  
       Dec 19, 2019
    老实说,经历了 2、3 的噩梦,应该不会重蹈覆辙了。
    pyscream
        33
    pyscream  
       Dec 19, 2019
    可以采用巨硬的风格,直接 python 10
    lqf96
        34
    lqf96  
       Dec 19, 2019   ❤️ 1
    @echo1937 现在 Python 官方正在推 Sub-interpreter,应该有望解决多线程的问题,简单来说就是每个 interpreter 运行在一个线程上,各自拥有自己的 GIL,唯一的问题就是需要 c 库更新代码...
    Trim21
        35
    Trim21  
       Dec 19, 2019 via Android
    @Osk 数学上都没有 3.1.4…
    laike9m
        36
    laike9m  
       Dec 19, 2019 via Android
    @lqf96 Python 官方并没有推多解释器,它目前还只是个 pep,说是 Eric Snow 的个人项目都没问题
    charlie21
        37
    charlie21  
       Dec 19, 2019 via Android   ❤️ 1
    半只脚踏进坟墓的东西了也能聊真是
    arischow
        38
    arischow  
       Dec 19, 2019 via iPhone
    为什么你不去搜索?
    superrichman
        39
    superrichman  
       Dec 19, 2019 via iPhone
    @hakono 版本号中的点是分隔符不是数学意义上的小数点。点分隔的每个数字都是独立的,不存在数字不够用的说法。参考 pep-440。https://www.python.org/dev/peps/pep-0440/
    nullcc
        40
    nullcc  
       Dec 19, 2019
    3.9 后面应该是 3.10 而不是 4.0
    lwh0328
        41
    lwh0328  
       Dec 19, 2019 via iPhone
    Python3S, python3SE, python3S Max, python3S Max Lite Pro.
    xnode
        42
    xnode  
       Dec 19, 2019
    p++ p#
    AM2coder
        43
    AM2coder  
       Dec 19, 2019 via Android
    楼歪得厉害😄
    Takamine
        44
    Takamine  
       Dec 19, 2019 via Android
    @xnode PHP:想跟我争做世界上最好的语言?:doge:
    kneep
        45
    kneep  
       Dec 19, 2019 via iPhone
    这个数字可以两位数甚至三位数
    hakono
        46
    hakono  
       Dec 19, 2019 via Android
    @Pastsong
    @wwqgtxx
    @superrichman
    请勿理解歪我想说的观点,我说的是对程序员来说,对版本号的理解直觉性的会觉得 3.11 是 3.1 的子版本,而不是十一。
    这和任何版本规范无关,而是直觉性的,下意识的行为

    这种思维方式的原因是,在编程时,通过获取版本号的 api 得到的版本号是个字符串 string,而不是 int。在用代码对版本号进行处理时自然会使用字符串的逻辑来处理版本号而不是数字。而处理版本号时很多人会选择使用字符串截断来获取主、子版本号,而这就是我说的这种思维的根源。

    这也是我举例 Windows10 例子的原因
    请问在 xp 或 win7 时代写一个判断系统版本的逻辑,你们能否避免我上个回帖中提到的那个 bug ?
    qping
        47
    qping  
       Dec 19, 2019   ❤️ 4
    @hakono #46 你这是错觉,3.1.1 才是 3.1 的子版本。
    siganushka
        48
    siganushka  
       Dec 19, 2019
    有必要 Google 一下“版本语义化”
    weixiangzhe
        49
    weixiangzhe  
       Dec 19, 2019
    @hakono 那你需要自行适应了,现在开源的软件我看都是这样的
    qping
        50
    qping  
       Dec 19, 2019
    @hakono #46 在特定的年代,人的思维会有局限性,就像过去的人不会想到 windows 版本还能变成 2 位数,导致只取第一位作为版本,不够健壮。
    时代在发展,要以发展的眼光看待问题,出现新的问题就想新的解决方法,而不应该紧抱固有的思维,你说对不对
    qping
        51
    qping  
       Dec 19, 2019
    @hakono #46 很多规范是因为过去太不规范了,大家对于版本号都有一套自己的理解,导致出现的各种问题。规范的出现,是对版本认知的统一。以字符点 "." 分割来获取主版本、子版本、补丁版本号。这样一目了然,自然不会再出现过去这种只取第一位作为主版本的现象。
    jeffersonpig
        52
    jeffersonpig  
       Dec 19, 2019   ❤️ 1
    @hakono 可能只有你有这样的直觉……
    zpf124
        53
    zpf124  
       Dec 19, 2019
    @hakono 你的理解是你个人的理解,不是程序员的理解,不是程序员都会觉得 3.11 和 3.1 有关联的。

    3 段式版本号算是最常见最普遍的一种命名方式了,多接触几种语言或者几个项目都不会有你这总想法。

    linux 4.1.x 和 4.19.x
    nginx 1.1.x 和 1.16.x
    docker 1.1.x 和 docker 1.17.x
    wwqgtxx
        54
    wwqgtxx  
       Dec 19, 2019   ❤️ 3
    @hakono 对于 python 来说,最简单的办法就是
    >>> sys.version_info
    sys.version_info(major=3, minor=7, micro=2, releaselevel='final', serial=0)
    这样来解析版本号才是官方推荐的方法,而不是解析字符串
    如果真的要解析字符串,请用“.”来分割字符串,而不是简单的靠第几位去匹配
    1239305697
        55
    1239305697  
       Dec 19, 2019   ❤️ 3
    @hakono 不要随便代表别的程序员。。
    Vegetable
        56
    Vegetable  
       Dec 19, 2019
    实际上 python4 已经出现在官方一些讨论中了,为什么都在聊 semver?
    dafsic
        57
    dafsic  
       Dec 19, 2019
    就说下你们对 3.11 怎么读就知道了,读成三点一一的?还是读成三点十一的就好了?
    zhoulifu
        58
    zhoulifu  
       Dec 19, 2019
    @hakono 换行吧,还来得及
    HyHyemmm
        59
    HyHyemmm  
       Dec 19, 2019
    新语言我只认 swift 1234
    Illusionary
        60
    Illusionary  
       Dec 19, 2019
    Python Pro Max
    OceanSea
        61
    OceanSea  
       Dec 19, 2019
    Python 3s or Python 3 Pro
    robinlovemaggie
        62
    robinlovemaggie  
       Dec 19, 2019
    最终 all python == one python, 因为 CPU 的发展最后归于量子计算,单核秒一切~
    shawnLuo
        63
    shawnLuo  
       Dec 19, 2019 via Android
    Python3 max
    Python3 max pro
    Python3 max pro plus
    ipwx
        64
    ipwx  
       Dec 19, 2019 via Android
    @hakono 那我需要强调,我的直觉已经和 python linux 等开元软件相吻合了。。。
    killerv
        65
    killerv  
       Dec 19, 2019
    @raysonx 每次我都有一种 3.9 比 3.12 版本高的错觉。
    ungrown
        66
    ungrown  
       Dec 19, 2019
    @miniyao #14
    不,一点也不像,谢谢
    3.6 和 3.6.0 很像不假
    60 和 6.0 完全两个含义
    ungrown
        67
    ungrown  
       Dec 19, 2019
    @hakono #23 不会
    你这个想法到底从哪看来的
    不,根本没有什么资料宣传过你所谓的格式
    我看就是你自己想出来的
    janxin
        68
    janxin  
       Dec 19, 2019
    python 3 plus plus
    ungrown
        69
    ungrown  
       Dec 19, 2019
    @hakono #46
    你所描述的压根不是什么思维
    仅仅只是特定场合下的方法
    请不要因为你只会这一种方法就觉得这是正常思维
    什么你说你不光只会这一种方法会的方法多了去了?
    那就更奇怪了为什么你非要认定这一种方法能代表思维
    ungrown
        70
    ungrown  
       Dec 19, 2019
    @killerv #65 知道是错觉就没事不至于跟这楼下某些人一样病入膏肓无药可救
    ungrown
        71
    ungrown  
       Dec 19, 2019
    @charlie21 #37
    您烙呢?
    qakito
        72
    qakito  
       Dec 19, 2019
    偷偷告诉楼主,perl 已经 5.30 了哟
    djFFFFF
        73
    djFFFFF  
       Dec 19, 2019
    @hakono 难道不是对非程序员来说,3.10 看起来像 3.1 的子版本,对程序员来说,3.10 看起来就是 3 的第 10 个版本?你有这种直觉只能说还是业余程序员吧
    hakono
        74
    hakono  
       Dec 19, 2019 via Android
    @qping 在有三段式或遵守特定版本命名规范的情况下,的确这个问题不是很大。比如 Python 比如 win10 各个版本的。

    可能我上面的回复加的限定还不够多,导致很多人误解,这种直觉性的东西针对的是没有遵照特定版本命名规范或者随性命名的情况。可能我顺手用了 3.11 和 3.1 导致很多人觉得我在说 Python,但我想表达的是这种情况:某个软件,没有遵照版本命名规范的版本或系统,随手定了个版本号比如 1.1,这种情况下直觉性地会觉得 1.11 是 1.1 的子版本,这和命名规则无关


    当然,上面我说了所有程序员,代表了所有人的确有失偏颇。可能是因为我最早从 Win32 编程还是主流的那个时代起步的,版本命名不够规范的影响还留着点,时代在发展当年根本没人相信也没考虑到 Windows 能迭代到 10.0,导致程序设计不健壮
    但其实也并不是想说要否定版本命名规范这东西,直觉这东西形成了就不好改,每次看版本号我的思维都是 1.11 哦 1.1 的子版本,然后马上又提醒自己 11 是十一不是 1
    wwqgtxx
        75
    wwqgtxx  
       Dec 19, 2019
    @hakono 其实你说的这个问题和千年虫问题很像,当初也是用两位数来标记年份,又有谁想到了会进入 2000 年。
    不过在现在这个年头应该不会再有程序还在抱着两位年份来做了吧,所以观念是会变的,只要大部分人都遵循这个命名规范,其实就不会产生什么歧义了
    marcong95
        76
    marcong95  
       Dec 19, 2019
    @hakono #23 windows 版本号的问题其实根本不是对版本号的理解的问题,你抛开程序员的思路,把那个版本号当普通数字来比较也是完全可行的,10.0 > 6.x > 5.x。而且也没出现 3.10 > 3.9 的这种情况。先 atof 然后比较,在已经发布了的 windows 内核版本号上一点问题都没有。

    只不过是当年的人过分武断认为版本号在软件的生命周期内没可能上到两位数,这无论如何都是错误的编码方式
    GPLer
        77
    GPLer  
       Dec 19, 2019 via Android
    @hakono 1.1.1 才是 1.1 的子版本
    ungrown
        78
    ungrown  
       Dec 19, 2019   ❤️ 1
    @djFFFFF #73
    不,就算非软件从业者,看到 3.10 ,也不会马上联想到 3.1,因为中间那个小数点实在太扎眼,如果 0 算是修订版编号的话,为什么前面要有一个小数点?说不过去的!
    dota 的地图版本就是一个例子,多少年了版本号一直遵循 x.xx 的格式,但是新图出来很多 bug 要修复怎么标注修订版呢?数字后面加小写字母,比如 7.23e 这样。
    诚然玩 dota 的有不少软件从业者,但更多的是无软件开发背景的人,他们能轻松理解两位数子版本的含义,也能理解为什么要额外加一个字母来代表修正版。
    所以说,根本不存在什么“程序员思维”,搞软件开发过程中产生的各种习俗规则,本质上是为了实用性,而实用性是放之四海而皆能被理解的,版本号这个东西不存在说什么只有程序员能看懂。随便一个人看到 3.1 和 3.10 ,也不会不假思索认定这俩号之间除了前面的 3 之外有其他关联。
    xxm459259
        79
    xxm459259  
       Dec 19, 2019
    一看 LZ 就没做过 Leetcode 165... https://leetcode.com/problems/compare-version-numbers/
    jellyspot
        80
    jellyspot  
       Dec 19, 2019
    你以为 9 完了就归零了?还是两位数三位数啊
    crella
        81
    crella  
       Dec 19, 2019 via Android
    @qakito 编译 perl6 还真需要 2G 以上内存……还好提前看了一下说明书
    GG668v26Fd55CP5W
        82
    GG668v26Fd55CP5W  
       Dec 19, 2019 via iPhone   ❤️ 1
    你对版本号的认识有点业余……
    yzlnew
        83
    yzlnew  
       Dec 19, 2019
    你对版本号的认识相当业余……
    U7Q5tLAex2FI0o0g
        84
    U7Q5tLAex2FI0o0g  
       Dec 19, 2019
    谁告诉你 3.9 以后版本号就用完了???????

    此处可以 @ 迷惑行为大赏
    lolizeppelin
        85
    lolizeppelin  
       Dec 19, 2019
    哼! php 能 7 得, 我 python 就不能 8 ?
    U7Q5tLAex2FI0o0g
        86
    U7Q5tLAex2FI0o0g  
       Dec 19, 2019
    你对版本号的认识相当业余……
    zgq3337
        87
    zgq3337  
       Dec 19, 2019 via Android
    都有量子了,可以是“3.量”
    gunavy
        88
    gunavy  
       Dec 19, 2019 via iPhone
    @linvaux Python3P
    heiheidewo
        89
    heiheidewo  
       Dec 19, 2019
    下个版本 python5 妥妥的
    xingheng
        90
    xingheng  
       Dec 19, 2019 via iPhone
    @miniyao 所以 Python 2 和 Python 20 也很像?
    xingheng
        91
    xingheng  
       Dec 19, 2019 via iPhone
    @hakono 比较版本号直接用 string comparion 还好意思说,不是说很多人那样用了就变成规范了。

    iOS 9 升到 10 的时候不也是很多菜鸟犯了这个错误,老老实实修 bug 就对了。
    blindpirate
        92
    blindpirate  
       Dec 19, 2019
    @ungrown 你确实是一个人。。。不要代表其他程序员。
    blindpirate
        93
    blindpirate  
       Dec 19, 2019
    @ungrown 抱歉我好像回复错人了。。。。

    此处回复楼主:你对版本号的认识相当业余……
    tt67wq
        94
    tt67wq  
       Dec 19, 2019
    我赌五毛不会拥抱多核心
    xypty
        95
    xypty  
       Dec 19, 2019
    python 365
    fhsan
        96
    fhsan  
       Dec 19, 2019
    你号没了
    foxyier
        97
    foxyier  
       Dec 19, 2019
    python3.8 文档里明确写了会有 python3.10
    wangxiaoaer
        98
    wangxiaoaer  
       Dec 19, 2019
    所以如果用 3-6-1 3-60-1 这种表示方法就不会疑惑了。
    msg7086
        99
    msg7086  
       Dec 19, 2019
    你们还真别说,Windows 3.11 就是 Windows 3.1 的增强版,后来又出了个 Windows 3.2。

    不过现在版本号都有更多的意义了,不像当时那样拍脑瓜写数字,所以应该不太容易误解就是了。
    nomemo
        100
    nomemo  
       Dec 19, 2019
    只是版本号有什么困难的。
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1301 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 185ms · UTC 17:31 · PVG 01:31 · LAX 10:31 · JFK 13:31
    ♥ Do have faith in what you're doing.