说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

编程语言中一些令人抓狂的规则

HTML文档下载 WORD文档下载 PDF文档下载
许多年前在编程语言设计和操作系统上的选择可能当时看起来无关紧要。但是,这些远古的决定至今仍然继续困扰着软件开发者。下面所介绍的就是一些在编程语言和操作系统里的那些让开发者头疼的过时的选择。

众所周知,软件开发者每天都要做各种各样的决定:如何最好的实现功能、如何修复bug、如何提升应用程序的性能等等。但是他们同样是在别人的劳动成果下面继续做自己的决定的,比如说:他们使用的是别人开发出来的编程语言和操作系统以及各种开发工具。一些语言开发和系统设计行业里的前辈以前所作出的决定在那个时候可能是很有意义的,不过在现在看来可能是多此一举。

举例而言,在2009年的时候,互联网创始人蒂姆·伯纳斯-李就承认,互联网网址中http:后面的两条斜线//其实并无必要,他为这带来的不便致歉。蒂姆以幽默的环保角度道歉说:真不知道这两条斜线浪费了多少时间、打印墨水和纸张。


除此之外,对于每天都要写代码的软件开发者来说,前辈们当时做出的令后人觉得蛋疼的决定还远不止这些。接下来就介绍一下在编程语言和操作系统里的那些让开发者头疼的过时的选择。

1. Unix隐藏dot文件(“.” 文件)

早期的Unix操作系统就这样设计过:当通过ls命令把目录内容列出来的时候,任何以 . 开始的文件或目录会在默认情况下被隐藏起来。


从目录列表里隐藏当前(.)或者是隐藏根目录(. .)的方法将所有带 . 的文件有效地隐藏起来了。从那时起,点文件经常性的会被忽视掉,同时也成为一种提供恶意文件的简单方法。

“在之前的40年里,因为这一个小小的走捷径而导致多少bug的出现?浪费了多少CPU循环?出现了多少人为失误?所以我们应该记住:下次如果你还想在代码里抄近路的话,一定要想想之前的教训。”——Rob Pike

2. JavaScript使用+字符串连接

大约在20年前,当Netscape首先开发JavaScript的时候,他决定大量使用+操作符来连接字符串,主要是用在数字加法运算和字符串连接这两方面上。


可是最后结合JavaScript的弱类型发现,使用+操作符通常会导致数值变量的连接,而不是数值的加减。其他的编程语言同样选择了不同的连接操作符,或者是安排专门的程序员严格输入变量,以防混淆。

“当我第一次学习JavaScript的时候,真的把我害惨了,因为前后不一致的的输入行为使得很难在最后的检查过程中发现bug。”——Chris Dutrow

3. Microsoft选择反斜杠作为路径分隔符

在1983年的时候,微软发布了MS-DOS 2.0,它包括了一个目录层次结构,就像Unix。但是和Unix有所不同,Unix使用正斜杠(/)来分割目录路径,微软使用了反斜杠(\),原因是,正斜杠已经被用于表示命令行选项,所以微软选择了反斜杠。


反斜杠在Unix和其他的例如Perl 和 C语言中主要是用来区分后后面紧跟着的字符,所以这给程序员带来的痛苦就是要经常在正斜杠和反斜杠之间来来回回的兜圈子,以免出错。

“回想起来,我觉得这是一个可怕的决定,但是换成是我的话,当时可能会做出同样的举动。”——Dave Lindbergh

4. Python使用缩进表示块

绝大多数编程语言使用明确的分隔符,例如用大括号来表示语句的分组,而 Python却不是这样的,它使用前导空白(空格和制表符)来表示哪一个块属于哪一行代码。


事实上,只有那些经验丰富的Python程序员比较倾向于使用这个功能,而对于那些新手或者是不常使用它的程序员来说,别提有多恼怒了,尤其是剪切代码、粘贴代码、改变平台,或者是重构代码的时候。

“在两个平台之间转换的过程中,你会发现这真是编程语言里的极品功能啊!”——Joe Zitzelberger

5. Tony Hoare发明了空引用

在1965的时候,英国著名计算机科学家Tony Hoare将空引用概念引入到ALGOL W语言里,以确保所有使用的引用内容都是安全的。一直到现在,这一发明都存在于大部分编程语言里。


编译器是不会抱怨空指针的,但是想要废弃一个可能会导致运行时错误或系统崩溃的引用的话,那么程序员必须设法做一些防御措施或者是调试工作。

“我认为它是一个导致数十亿美元损失的错误。”——Tony Hoare

6. JavaScript使用分号插入

JavaScript中分号表示语句结束,但JavaScript会自动的在它认为合适的地方插入分号。例如在程序结尾,或者在紧接1个新行的return语句后面。


在某些情况下,return后面可能会有大括号和新的代码块,这种情况下,如果自动插入分号,就有可能导致语法错误。

“这一功能着实让开发者的工作出现了一点混乱,尤其是当你为一个生产环境压缩代码的时候。”——Mike Nelson

7. 如何表示日期

在如何表示日期这一问题上已经产生过很多比较有效地选择方案了,例如只使用两个数字或者是更少的数字来表示年份,可以被四整除的年份是闰年,或者是像Unix系统那样提供的基本时间服务是国际标准时间公元1970年1月1日00:00:00以来经过的分秒,这种秒数是以数据类型time_t表示的。我们称它们为日历时间,日历时间包括时间和日期。


只使用两个数字或者是更少的数字来表示年份就会导致众所周知的Y2K问题,计算闰年的过程中也是会出现很多bug,有些系统照样会出现Y2K38 问题。

“在20世纪60年代的时候,内存的价值大约为1美元/字节。所以,在60年代或者是在80年代的时候使用2个数字来表达年份是很合理的。可问题就在于是稳定而精确的软件所运行的时间完全超出了其预期的设计时间。”——Fred Krampe

原文:InfoWorld

在可编辑控件中创建一个新的上下文菜单 -VB资料 在软件中设定热键-VB资料 在注册表中添加自己的文件类型-VB资料 在桌面上建立 Internet 快捷键 -VB资料 在桌面上添加程序的快捷方式 -VB资料 VB怎样得到当前的屏幕分辨率? VB怎样关闭Windows VB怎样关闭一个程序 VB怎样使我的程序总处于屏幕最前方?(Always on top) VB怎样延迟一个VB程序? VB怎样在VB中控制WORD VB怎样找到鼠标指针的XY坐标? 增加快捷方式到启动组-VB资料 直接呼叫RUNDLL来关机-VB资料 VB制作VB安装程序问答(二) VB制作VB安装程序问答(一) VB制作帮助文件速成 重新验证 Win 95 用户口令 -VB资料 桌面的大小 -VB资料 字体改变事件 -VB资料 自定义组合热键 -VB资料 自动更换墙纸的小软件-VB资料 自动记录应用软件工作时间 -VB资料 自动卷动TextBox -VB资料 自动开始上次关机时关闭的应用 -VB资料 自动装入注册设置 -VB资料 自己编程模拟 MouseEnter,MouseExit 事件 -VB资料 走进VB6啃一块骨头 做成一个时间限制的测试版 -VB资料 PHP中利用jQuery实现SWF图像上传和裁剪 VB.NET或C#将DataSet快速导出到Excel中 pb,delphi,vb三种快速成型的语言都分别适合开发那些软件?欢迎大家来讨论 请问各位同仁如何设置sybase anywhere服务器参数? 串口通讯能否用pb做成动态连接库的形式?(急) 怎样使Response.redirect打开一个新窗口 为什么环境变量替换不正确? 怎么打开foxpro中,通过剪切板考过去的图片,dbimage和image控件都不能打开,显示“bitmap is not valid” vaj中如何使用自己的JAR? 怎样改变当前窗口的大小,是当前窗口最大化? 高手争峰 如何把一个log文件读到数据结构中去 请教一个很菜的问题:) 这个程序有什么问题? 怎样做???? 简单问题,可就是搞不定!! 请问jsp中servelet在win2000中的设置方法,需要下载什么类库文件么? 一个新问题,那就是点击工具栏的退出按钮以后只退出当前打开的窗口,而不是整个应用! 如何在 index.htm 中引用 count.asp ? 远程数据库访问的问题--亟待高手们解答 王国荣的电子信箱是哪里? 我的程序生活 先给50分,稍后在加:我正在做一个系统,需要做到每次开机时提醒用户有哪些事情要做! [Tips]获取Memo&Richedit中光标坐标的最简单方法! 急急,如何才能把图片的底色与窗口的底色自然地融为一体? 如何改变按钮的颜色? 在mtml help workshop 中如何制作带上下文关联ID的帮助 调试程序时,控制台程序与直接建立的C++程序有区别吗? 给菜鸟推荐本书 VB调用外部DLL问题 【洗心革面,重新做人,割发断指,庄严声明】 从今以后 kook 不近女色,不灌疯水,以 panda_w 为榜样,苦练VC,研习汇编,做一个 CSDN 的正面典型! 谁有ULTRAEDIT 的注册码 能否推荐几本关于VB提高和关于VB数据库的书 紧急问题,关于SSL通过MS PROXY String类的问题 连接数据库的东东真是奇怪! 如何打开pdm格式文件 ===========灌水传说=========== 奇怪的问题,怎么办? 呵呵,初学者,请多多指教 剖 尸 小问题:自定义组件的显示 怎样打印picturebox中的内容??? 关于Datawindow的Group的问题 谁能告诉我 Delphi6的序列号 紧急问题,关于SSL通过MS PROXY! 请问,如果用ASP作邮件发送,接收的功能,win2k怎么设置????????? 各位大侠,谁用visual age for java3.5 开发过 ejb呀,发个例子及过程给我好吗?没例子,有过程也可以!以分做谢! 哪位大哥能将解一下notify()和wait()的用法 我用delphi做的工程是一个exe+n个DLL的,请问datamodule放哪里合适;请高手们详细讲讲. 如何除去这可恶的标题? 请问如何取得动态数组的维数,换言之如何取得动态数组的值? 1000M,一会儿就满了,怎么回事? 为了迎接2012年的元旦,实验小学准备制作一些小红花,平均分给一些同学制作,如果7个人做,则多做3朵,如果4个人做,则少做2朵,如果9个人做,则多做5朵.你知道他们最少想做多少朵.(用最大公因 小红在班级小银行储蓄的钱数是小刚的2分之3,后来小红又存进4元钱,而小刚取出6元钱此时小红的钱数是小刚的钱数的4分之3,现在小刚,小红各储蓄多少元? 买同一个书包,小明花去了他所带钱的5/8,小红花去了她所带钱的3/5求两个人所带钱的比,如果是方程就要把解的过程详细的打出来好么 怎么剪小红花 小红体重与小亮的比2比3.小亮与小刚体重的体重3比4.那么小红和小刚的体重比是多少 小明和小红一共有250元,当小明花掉他自己的5分之2,小红花掉40元后两人剩下的钱相等求小明原来的钱是多少? 老师把一些小红花分给同学,如果减少一个同学,每人正好分5朵,如果增加一个同学,每人正好分4朵一共有多少朵小红花? 小红的存钱是小刚的三分之二,小红存进4元,而小刚取出6元,这时小红是小刚的四分之三,小红和小刚各?元 小红和小明带同样多的钱去买练习本.小红花光了自己的钱,并向小明借1元钱,刚好买了8本练习本 我今天语文课得了朵小红花,求英语 小红在班级小银行存储的钱是小刚的三分之二,后来小红有存进4元,而小刚取出6元钱小红在班级小银行储蓄的钱数是小刚的三分之二,后来小红又存进4元钱,而小刚取出6元钱此时小红的钱数是 小莉买文具和图书共用去54元,其中买图书的钱数比买文具的2倍还多3元,买文具和图书各用多少元? 修改病句:国庆节那天,天安门前挂满了五颜六色的红旗 小林在少儿银行存款50元,小刚存款88元,以后小林每月存5元,小刚每月存12元,几个月后小刚存款数是小林存款数的2倍?求算式,急!谢谢 假期里,小莉用一天学习时间的45%看课外书,她每天看课外书时间是90分,小莉每天用于学习的时间有多长?小莉每天用于学习的时间占一天的百分之几? 广场上到处是五颜六色的红旗(修改病句) 小红在班级小银行储存的钱数是小刚的3分之2,后来小红又存进4元钱,而小刚取出6元钱此时小红的钱数是小刚4分之3,现在小刚小红储存多少元钱? 一.1.小星和小莉看课外书,小星看了40页,是小莉所看页数的5分之4.小莉看了多少页?2.小星和小莉看课外书,小星看了40页,比小莉所看的页数多4分之1.小莉看了多少页?3.小星和小莉看课外书,小星 节日的校园里,插满了五颜六色的红旗.(修改病句) 小红在班级小银行储蓄的钱数是小刚的2分之3,后来小红又存进4元钱,而小刚取出6元钱此时小红的钱数是小刚的钱数的4分之3,现在小刚,小红各储蓄多少元?小红在班级小银行储蓄的钱数是小刚 假期里,小莉用一天学习时间的45%看课外书,她每天看课外书的时间是90分.小莉 修改病句:校园里生满了白的、红的、黄的等五颜六色的花. 小红在班级小银行里储蓄的钱数是小刚的三分之二,后来小红又存进4元,而小刚取出6元,此时小红的钱数是小刚钱数的四分之三,现在小刚.小红各储蓄多少元? 小莉看一本书,5天看了全书的20%,照这样计算,把剩下的书全部看完还需多少天? 春风吹得满山的桃树绽开了五颜六色的花,一片火红,非常精彩.修改病句按题修改 小红在班级小银行储蓄的钱数是小刚的三分之二,后来小红又存进4元钱,而小刚取出6元钱此时小红此时小红的钱数是小刚的钱数的4分之3,现在小刚,小红各储蓄多少元?要方程和算式不要方程 要 小明和小莉出生于1999年10月份,他们的出生日期不是同一天,但都是星期三,且小明比小莉出生早,两人出生日期之和是22,那么小莉的出生日期是( )A:15日 B:16日 C:17日 <修改病句> 1.公园里生长着各种树和五颜六色的鲜花请修改以上病句 小红的零花钱比小刚多4分之1,小晓的零花钱比小刚的少3分之1.小红和小晓的零花钱相差14元.三人各有零花钱多少元? 小明和小莉出生于1999年12月份他们的出生日他们的出生日不是同一天,但都是星期一 病句:春天公园里五颜六色的花,竞相开放.请问怎么修改?急 这次考试小红考了98分.小红比小刚的分数的七分之八还多2分.你知道小刚考了多少分吗? 小明和小莉出生于1998年12月份,他们的出生日不是同一天,但都是星期五,且小明比小早,两人出生日期之和是29,那么小莉的出生日期是()A、15号 B、16号 C、17号 D、18号 孩子穿着红衣服和白帽子(修改病句) 小红捐360小刚是小红的9分之10小刚捐的是小红的8分之7小刚捐了多少元? 《黄冈小状元》的问题:小明买了2kg梨,共22个;小莉买了3kg梨,共24个,两个人买的梨平均每个各是多少千克?谁买的梨大些? 改病句:他穿着一身崭新的衣服和帽子. 在一次跳绳比赛中小明跳了92个 小红跳了85个 小刚跳了87个 小敏跳了几个 注.我跳的个数是我们5个的平均数上面的写错了 在一次跳绳比赛中小明跳了92个 小红跳了85个 小刚跳了87个 小敏 【急】小明和小丽出生于1999年12月份,他们的出生日不是同一天,但都是星期五,且小明比小莉出生早,两人出生日期之和是22,那么小莉的出生日期是?(一元一次方程解) “他今天穿着一件新衣服和一顶新帽子”怎么改病句? 学校举行一分钟跳绳比赛,小红跳了120下,小玲跳的下数是小红的八分之九,小刚跳的下数比小玲少十五分之二小刚跳的下数比小玲少多少下?不用方程 刚买了一盆花,不知道是什么花,请问谁知道这是什么花? 改病句:刘艳同学今天真漂亮,穿着新衣服和帽子 一个数是2和3的倍数这个数是 这两盆花是什么花 今天,小芳穿着新衣服和新帽子高高兴兴去上学.(修改病句) 一个数同时是2 3的倍数,这个是数有什么的特征? 我有一盆花,但是不知道什么名字,请问下这是什么花, “尽管明天下雨,我们还要去爬山.”修改病句卷子上的题目急 2和3的倍数的共同特征是什么 中间叶子是红色的周围是绿色的一年四季都是这样是什么花?中间叶子是红色的周围是绿色的一年四季都是这样!买时老板说是叫富贵什么?不记得了,不知道哪位朋友知道是什么花,知道他的养 看,空中有一道五颜六色的彩虹.(修改病句) 三位同学购物,小明花去钱数的1/2等于小琳花去钱数的1/3,小琳花去钱数的3/4等于军军花去钱数的4/7,结果军军比小明多花93元,他们三人共花了多少钱?急 花像叶子一样是红色的,叶子是绿色的是什么植物,适合什么样的环境生存, 植物花期随海拔高度是怎样变化的需要具体的 比如说同一种植物随海拔的升高花期向后推迟的天数变化规律 修改病句:明天上午去爬山 小明和小红共带了200元去购物,购完后2人剩下的钱正好相等,已知小明花去的和原来的钱比是3比7,小红花去小红花去的和原来的比是9比13,小明花去多少元 一条红绳长120分米,可以做4朵小红花,做25朵小红花需要红绳多少分米? 脱下了五颜六色的衣裳 小红花和小明去超市购物,小红买了6个果冻,每个2.1元.小明买了2块巧克力,比你多花3元,每块巧克力多少元
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn