关系经济人类预测化学自然
中准网
自然科学
知识物理
化学生物
地理解释
预测理解
本质社会
人类现象
行为研究
经济政治
心理结构
关系指导
人文遗产

Python缩进语法的起源上世纪6070年代的大胆创意

9月21日 托天庙投稿
  上个月,Python之父GuidovanRossum在推特上转发了一篇文章《TheOriginsofPython》,引起了我的强烈兴趣。
  Guido的推文
  众所周知,Guido在1989年圣诞节期间开始创造Python,当时他就职于荷兰数学和计算机科学研究学会(简称CWI),曾参与设计与实现了一门用于教学的ABC语言。这段工作经历以及ABC语言的某些设计思想对Python有着重要的影响。
  文章标题是Python的起源,文章作者LambertMeertens是Guido在CWI时的导师,以同事亲历者的视角,讲述Python从无到有的起源过程。这样的文章我还未曾读过,因此饶有兴趣。
  文章内容跟Python直接相关的部分并不多,作者花了较大篇幅介绍ABC项目的演变,讨论了编程语言的设计(特别强调的是简洁性Simplicity)。
  最引起我兴趣的内容是:缩进语法的设计!Morestrikingistheuseofindentation。AlthoughitwascommoninprogramswritteninALGOL60oritsdescendants,suchasPascal,touseindentationasatypographicallayoutfeatureforclarifyingthegroupingofcommands,thiswasanentirelyoptionalpresentationchoice,madepurelyforthebenefitofthehumanreader。InanarticlebyP。J。PlaugerentitledSignalandNoiseinProgrammingLanguages,16wefoundthe(then)radicalideatohavethecompilerreadthesamesignalaswehumanbeings,andlettheindentingcontrolgrouping,asuggestionwefollowedwithenthusiasm。IndentationtoindicatethatasuiteofcommandsbelongtogethersubsequentlybecamemandatoryinB0programs,adesignchoicethathasbeenmaintainedthroughoutalliterations。17
  节选自《TheOriginsofPython》
  简单概括:当时在设计新的编程语言时,他们受到了一篇文章的强烈影响,决定仅采用缩进语法来控制代码块的分组。核心思想是havethecompilerreadthesamesignalaswehumanbeings,为了代码简洁性及理解一致性,舍弃了其它的代码分组方案。
  我极为推崇Python的强制缩进语法,曾写过一篇《Python为什么使用缩进来划分代码块?》介绍了这种设计的8个原因,但是,该文收到了大量的反对声,因此,我又补写了一篇《Python的缩进是不是反人类的设计?》。
  我知道自己的两篇文章不足以说服那些讨厌Python缩进的人,但是,如果有更多资料介绍这项设计的原因及思想来源的话,或许就能稍微地改观某些人的看法,同时也提供给那些喜欢这项设计的人一些信心
  作为ABC语言的继承者,Python的缩进语法应该主要来源于它。因此,我决定沿着前文的线索,继续挖掘它们设计缩进语法的起源。
  上文提到的文章标题为《编程语言中的信号与噪声》(SignalandNoiseinProgrammingLanguages),发表于1975年的ACM年会论文集,作者P。J。Plauger是全球知名的计算机科学家、CC技术专家以及TheStandardCLibrary、StandardC:AReference和TheStandardTemplateLibrary等图书的作者。
  该篇文章想要区分编程语言的哪些语法是对读者有用的信号、哪些仅是无用的噪声。文中提到了一个编程理论:常说的东西应该言简意赅(thingswhichgetsaidalotshouldbeconcise)。
  常说的东西应该言简意赅
  由于代码经常要分组分块,因此,信号与噪声一文将begin。。。end及do。。。end这两种当时常见的代码分组语法批评为糟糕的设计。它不反对花括号{。。。}的语法设计,但是提出了一种更为激进的设计,也就是仅用缩进来控制代码分组(lettheindentingcontrolgrouping)。
  按我的理解,P。J。Plauger建议我们移除编程语言中的噪声。人们在阅读代码时,可以直观地根据代码的缩进层级将它们分组,因此缩进本身就是一种有意义的信号,如果激进地让机器也做到所见即所得的话,那甚至连{。。。}这种足够言简意赅的设计也不需要了。
  P。J。Plauger是个擅于总结编程风格原则的人,他曾合作编写过一本《TheElementsofProgrammingStyle》(译本:编程格调),全书介绍了70多条最佳实践和编程规则。
  编程格调的豆瓣条目
  只不过,相比于他提出的那些经典的编程规则,使用缩进来分组代码块不仅在40多年前是一条激进而少人接受的风格,它直到今天依然令某些人无法认同。
  CWI的团队当初在设计ABC语言时,激进地采用了缩进作分组的设计。通过溯源那篇古老的文章,我们知道了这种设计不是他们突然蹦出的,而是有着某种设计思想的指导,同时这也意味着,Python的缩进设计除了有终身仁慈独裁者(BDFL)的个人偏好外,还隐含了这一层思想脉络的渊源。
  另外,《TheOriginsofPython》中还提供了两个比《编程语言中的信号与噪声》更早的起源:1965年的ISWIM编程语言(IfyouSeeWhatIMean的首字母缩写)。它可能是有据可考最早使用缩进分组代码块的语言(尽管它没有实现),其设计者在《TheNext700ProgrammingLanguages》中称之为Offsiderule(越位规则)1974年唐纳德克努特(DonaldKnuth,著名计算机科学家、图灵奖获得者,经典巨著《计算机程序设计艺术》的作者)发表在ACM通讯的文章《StructuredProgrammingwithGoToStatements》,他在畅想未来的编程语言时说:Wewillperhapseventuallybewritingonlysmallmoduleswhichareidentifiedbynameastheyareusedtobuildlargerones,sothatdeviceslikeindentation,ratherthandelimiters,mightbecomefeasibleforexpressinglocalstructureinthesourcelanguage。
  唐纳德的文章节选
  值得注意的是,唐纳德提供的参考材料正是1965年ISWIM之父的文章《TheNext700ProgrammingLanguages》,里面收录了多位大佬对于缩进的讨论观点。
  受限于当时的计算机硬件及编辑器工具,以及考虑到印刷对代码排版的现实性影响,纯缩进分组的代码确实可能会带来一些麻烦。因此,这些编程界的先驱们仅仅是在大胆畅想未来的编程语言的语法,当时并没有编程语言作出了实现。
  从1965年的ISWIM,到1974年唐纳德的畅想,再到1975年P。J。Plauger激进的想法,再到1980年代ABC及Python的落地实现。20多年的时间,说长确实是挺长了。
  如今2022年即将过去,Python已经度过了它的而立之年,受这种设计思想影响的编程语言也遍地开花:据维基百科统计,有近30门语言使用Offsiderule。
  采用Offsiderule的编程语言
  尽管某些语言(如Scala、Nemerle、Haskell)只是可选性或部分性支持,但这份列表意味着在花括号占据统治地位的时代,缩进的星星之火依然迸发着顽强的生命力。畅想未来,我相信这份列表会加进更多语言,但愿那时可以打破Python一枝独秀的局面。
  现在作一下总结吧。本文最先关注的是Python之父年轻时的导师的文章Python的起源,但是我发现最吸引人的还是老生常谈的缩进话题,于是文章主题转向了Python的缩进语法的起源。
  不可否认,Python的缩进语法属于是较为大胆的编程风格,但换个角度,你也可以认为它很前卫,因为它本就起源于计算机科学家们在畅想未来的编程语言时的一种创意。
  缩进语法简洁、紧凑、清晰,它是营造出Python之美的最大功臣之一。人生苦短,我用Python!
  最后,如果你对Python其它语法的起源、为什么这样设计、跟其它语言的区别等等话题感兴趣,欢迎关注Python为什么系列(请在Github上给颗小星星吧,喵)
投诉 评论 转载

地平线黎明时分重要的转折点游戏测评这次给您带来的测评是《地平线:黎明时分》。以下简称《黎明时分》《黎明时分》是索尼旗下第一方开发组GuerrillaGames的重要战略转折之作。从之前的以《杀戮地带》来追……埃安AEP3。0纯电平台登场,技术有望反超特斯拉?近年来中国新能源市场发展蓬勃,越来越多的车企开始涌入新能源技术的研究,以埃安为代表的众多车企,无论是在销量上还是技术上,都取得了新的突破。据最新的2022年12月的销售数……这才是真正的全面屏设计!努比亚Z50Ultra美出新高度自从努比亚手机官方微博正式宣布将于3月7日下午14点推出全新的努比亚Z50Ultra后,目前官微已经通过预热海报的方式先后透露出了许多关于新品的亮点,尤其是采用了真全面屏设计的……监狱里面的珍贵友情,其实一切都是谎言监狱这个地方可以说非常的真实,也可以说非常的梦幻。因为在监狱这个环境,每个人每天都做了点什么,狱友同改们都知道得一清二楚,这一点上可以说相当的真实,因为在社会上没有任何一……Python缩进语法的起源上世纪6070年代的大胆创意上个月,Python之父GuidovanRossum在推特上转发了一篇文章《TheOriginsofPython》,引起了我的强烈兴趣。Guido的推文众所周知,G……八种食物是女人的衰老加速器,快看看有你常吃的吗1方便面方便面高油、高热量、也缺少维生素。此外,方便面所含的防腐剂和食用蜡,代谢时间比较长,影响身体的新陈代谢和内分泌平衡。2。环一半的水果水果坏了一部分,很……后达利欧时代桥水CEO祭出40年来最大变革,押注AI和亚洲,自从达利欧离开桥水之后,桥水已经和以往不同。桥水CEOBarDea采取雄心勃勃的策略,以提高回报率、盈利能力、开发新的收入来源。甚至在达利欧五个月前交出桥水控制权之前,改……TPFi7路由器发布最高可选BE13000,第二季度上市IT之家3月25日消息,TPLINK今晚发布6款WiFi7路由器,第二季度开始上市。如上图所示,TPLINK首批WiFi7路由器包括BE6400、BE7200和BE130……杨幂的10张美照,每帧都是珍藏版1。你是我在低谷里,看到的唯一一颗月亮。2。醉里看花,笑颜如花,多情痴情,最怕无情,天痴人痴,只道有痴,你侬我侬,都怪情浓!3。你是我无欲无求的人生里旁生出的那一丝……离开湖人才1年,巅峰就只剩10,得分倒数第一,效率倒数第一后悔离开湖人吗?溜达一圈,把巅峰都弄没了。还记得2020年夺冠时的隆多吗?别看已经34岁了,但在沃格尔开放式的执教风格里,他的才华得到极大释放,每36分钟可以得到12。5……年轻人掌中的最潮手机三星GalaxyZFlip4让表达个性如如今,相信每个年轻人都想要拥有一部外观设计独特、充满时尚气息、同时功能丰富的智能手机,从而彰显自己的与众不同。这个看似简单的要求,其实大有学问,市场真正能做到的产品屈指可数。三……最高增值45倍!又有A股公司卖房求生点蓝字关注,不迷路来源:中国基金报4月3日,ST国安发布公告称,全资子公司将挂牌转让位于上海的7处房产,首次挂牌价格合计不低于2。14亿元。值得注意的是,7处房产中……
详谈激光焊接技术形容甜蜜爱情的句子曾遭前男友虐待!艾米丽在巴黎的主演莉莉柯林斯爆料!如何预防脊髓型颈椎病呢成册造句用成册造句大全婚姻里幸福的本质在老挝,1000块人民币能够享受什么优待?让老挝姑娘来告诉你CBA第三阶段激战正酣,大家最关注的几个焦点也浮出水面产后要如何恢复身材男人秋季如何护肤这些方法很重要肾虚阳痿的男性朋友最好食补完整的成长怎样克服断裂
戳心文案你不爱我很正常,是我爱多了一次实验的启示作文如何预防老年人药物中毒送何水部蒙出牧袁州难忘的第一次微课中现代文学课程应用班主任工作总结宝宝辅食添加该注意些什么呢?金鱼吊兰有毒吗辣辣造句用辣辣造句大全小伙深夜发微博直播自杀,民警展开quot生死营救quot葛荃:说《论语》聊社会(十五)

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找菏泽德阳山西湖州宝鸡上海茂名内江三亚信阳长春北海西安安徽黄石烟台沧州湛江肇庆鹤壁六安韶关成都钦州