首页 > 资讯列表 > 科技资讯 >> 业界动态

编程语言的七宗罪

业界动态 2014-03-26 04:40:20 转载来源: 网络整理/侵权必删

AS网站目录(www.adminso.com):编程语言的七宗罪 许多年前在编程语言设计和操作系统设计上的选择可能当时看起来无关紧要。但是,这些远古的决定至今仍然继续困扰着软件开发者

AS网站目录(www.adminso.com):编程语言七宗

许多年前在编程语言设计和操作系统设计上的选择可能当时看起来无关紧要。但是,这些远古的决定至今仍然继续困扰着软件开发者。程序员使用的是别人开发出来的编程语言和操作系统以及各种开发工具。

除此之外,对于每天都要写代码的软件开发者来说,前辈们当时做出的令后人觉得蛋疼的决定还远不止这些。

接下来就介绍一下在编程语言和操作系统里的那些让开发者头疼的过时的选择。

1. Unix隐藏点文件

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

从那时起,点文件经常性的会被忽视掉,同时也成为恶意文件藏身的一种简单方法。

引用

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

2. JavaScript使用“+”来连接字符串

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

fdvd13e43854-4da6-3712-8d00-f8834ad686b6

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

引用

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

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

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

efwef03162489-467b-303c-8cb8-88a3d0e537c4

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

引用

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

4. Python使用缩进表示块

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

eb0bcfaf-cfca-3114-b16d-ec3d160b85e8

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

引用

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

5. Tony Hoare发明了空引用

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

fwe20491171-e9d6-3ffb-81ca-b4b19777787d

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

引用

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

6. JavaScript自动插入分号

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

yt30b52e28-3361-3252-b1ae-d816144f486c

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

引用

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

7.如何表示日期

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

rfew151985bf-1231-35c8-8f47-8852fc04c08d

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

引用

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

标签: 编程语言 七宗


声明:本文内容来源自网络,文字、图片等素材版权属于原作者,平台转载素材出于传递更多信息,文章内容仅供参考与学习,切勿作为商业目的使用。如果侵害了您的合法权益,请您及时与我们联系,我们会在第一时间进行处理!我们尊重版权,也致力于保护版权,站搜网感谢您的分享!

站长搜索

http://www.adminso.com

Copyright @ 2007~2024 All Rights Reserved.

Powered By 站长搜索

打开手机扫描上面的二维码打开手机版


使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

站长搜索目录系统技术支持