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

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

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

VB6.0中的几个新增数据库工具 VB处理数据库时求数据表记录总数的最佳方法 VB访问数据库的方案比较 VB数据库编程经验两则 VB数据库编空字段的处理 VB数据库多字段记录的录入 VB数据库记录查询四法 vb应用程序访问sql server方法探讨 VB中超长OLE数据库字段的操纵方法 VB中将数据转换为数据库文件 VB中远程数据库的访问 Visual Basic 的数据库编程 Visual Basic数据库数据的选项录入及选项增减与编辑 把资料输往Excel来列印-VB资料 报表中的滚动问题-VB资料 编写Connect Strings-VB资料 表或查询是否存在-VB资料 不创建DSN直接在程序中使用ODBC数据源-VB资料 不用 DATA 控件操作数据库文件 -VB资料 不用 EOF 以加快记录循环-VB资料 处理Select语句中的单引号 -VB资料 断开所有的数据连接 -VB资料 访问VB外来数据库 非access数据库在vb中的编程及应用 关闭程序中所有创建的数据库连接。 -VB资料 关闭所有的数据连接 -VB资料 关于数据报表的打印设置-VB资料 VB建立、改变及重构Access数据库-VB资料 结构化查询语言(SQL)详解之一-VB资料 利用VB使ACCESS数据库在网络使用中保持同步 返回 连接Data到多个表单-VB资料 VC6.0没有声音怎么办 循环20000000次所需要时间(急) 如何使按钮象工具栏上的按钮一样当鼠标移到按钮上时出现文字说明? 关于使用GDI+转换文件格式的问题. 各位能不能介绍点比较经典的算法的书籍,大家分享一下 如何恢复或新建临时表空间????在线等候!!!马上给分! Gis 请教一个数据库的问题,欢迎发言提出解决方案 ??怎样用asp程序把一段html代码转换成纯文本格式? 下拉数据窗口不能下拉是什么原因啊? 有关用VB做数据库的简单问题、ComboBox控件问题! 大家帮我看看这段程序为什么值为0 oracle8.1.7的数据库备份文件怎样恢复到oracle8i上 ? 怎样屏蔽flash的右键菜单,弹出自己的菜单? 我想问一下有没有不写入数据库用ASP代码可以查看当天的浏览访问量 灌水区的水越来越没质量了,你觉得呢? 按钮消息响应的问题,详细请看进去再看 异常详细信息: System.Data.OleDb.OleDbException: 无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开。 求助,网页制作0=={=========>(在线等,送分) 谁能告诉我《C++Builder 5编程实例与技巧》这本书在哪儿可以下载到完整的电子版!高分感谢! 请教如何将一张图片旋转? 关于流媒体和vc++的结合,高人请进!! 关于DataOutputStream和DataInputStream求教 会DirectX的一起来讨论! 4444 菜鸟求助~~~ help me 刚才发现www2.google.com www3.google.com也不能访问了,见鬼:( 我想停止window2000[域控制器]的389端口,但我不知服务是不是LDAP,因为我想占用端口389 各位!帮个忙! 帮忙啊!因为很着急,只有在技术论坛发了,大家原谅 电子地图 上海的程序员都在哪里"混"? 如何最小化所有窗口? 你们有谁读大学一学年要交近1000元书籍费? 帮忙啊!因为很着急,只有在技术论坛发了,大家原谅 asp中如何使用ADO实现对sql数据库操作 求助,网页制作0=={=========>(在线等,送分) 我在用mcisendcommond()函数时,总提示设备类型出错,是什摸原因? 紧急求教高分相送100分。 怎么判断女孩喜欢你? CSDN的首页能登录吗? C 与 C++ 到底有什么不同?? 偶然发现的mysql排序问题 是否有专业PL/SQL编辑器(能够提供类似VC的类成员或方法提示、格式自动排版等功能)可以下载 ?? 关于条码编程 非常急,请各位帮忙想想办法 怎样实现同一窗口的不同字体大小的显示 请问谁有HTTP代理服务器内容检查与病毒检查的代码 在程序流程中要等待几秒,应该调用什么函数啊 请问各位高手,哪有C++ Builder 教程可供下载? 橡胶止水带破损后如何处理呢 如何测红酒花青素 葡萄属于酸性还是碱性 有谁知道投影仪的成像原理 玻璃镜子如何擦干净呢?如何能擦干净,而又不会划花玻璃? GB/T2882-1991是指什么标准 超声波在空气中的传播速度 有没有什么好的办法把玻璃和镜子擦的又光又亮啊 眼镜刮花怎么能除去我的是树脂的眼镜加膜了怎么处理?那痕迹很长延长到中间怎么办?是刮花的痕洗得去的吗? 谁知道硅铁冶炼焦炭加入量与哪些因素有关 关于哺乳动物运动系统的叙述正确的是 a 运动系统由骨,关节,骨骼肌组成 b 关节由关节头与关节窝与关节腔组成 c关节软骨与关节腔中的滑液,增强了关节的灵活性 葡萄皮是碱性还是酸性? 限制四川盆地地区农业发展的最主要因素是什么? 焦炭能融化铁吗? 请问,怎样才能把玻璃或镜子擦干净 高中地理 制约新疆地区农业发展的限制性因素为什么是水源不是水分啊1.制约新疆地区农业发展的为什么是水源不是水分啊?2.什么是水源什么水分?3.新疆不是气候干旱吗?那降水不就少吗?这 超声波在空气中的传播速度约为多少?其指向性是什么? 哺乳动物运动系统由骨,关节,骨骼肌组成这句话说得对不对,错的话理由 茶镜磨砂以后玻璃是什么颜色的?是茶色还是白色? 植物怎么产生花青素 请问花青素吃的什么 牌子. VR中玻璃是什么材质.各种玻璃的参数是多少 花青素的植物来源? 现在有什么眼镜可以防紫外线吗? 影响新疆绿洲农业的主要因素是: 照相机和投影仪是运用了凸透镜能( )原理制成的? 花青素保健品什么牌子好是花青素,不是原花青素 我们只是要做回自己,英文 哪些植物有花青素 意大利花青素哪牌子好 现在你必须要做回自己用英语怎么翻译 请问:含有“花青素”的植物有哪些?比如说“旱菜” 实验需要400毫升0.1摩尔每升的硫酸铜溶液,配制溶液时需要称取五水和硫酸铜的质量应是? 英语翻译"做回自己"帮我翻译下能不能是第一人称的前面再加个Just有什么区别呢 投影仪是根据凸透镜成放大实像原理制成,当物理离凸透镜__时成放大实像.当物理离凸透镜__时成放大虚像,当物体离凸透镜____时成缩小的实像 比如说硫酸铜溶液,它的摩尔质量为什只有CUSO4的,这这个溶液中含有水,为什么没水的摩尔质量为什么没水的摩尔质量改为为什不加上水的摩尔质量 做回自己用英文怎么说 什么植物花青素最高请问什么植物花青素含量最高.请问什么植物提取的花青素最有价值.请问什么植物的花青素最好提取. 现代天文望远镜力求把物镜的口径做得很大,这样做的目的是让物镜尽可能____. 对新疆维吾尔自治区农业生产产生不利影响的自然条件主要有________. 变形虫对食物的摄取与体内线粒体有关对么 哪里错了 天文望远镜 口径、焦距大小与成像关系1.口径不变 焦距大小与成像关系2.焦距不变 口径大小与成像关系3.口径焦距最好的比例?不懂怎样问~呵呵口径是指物镜口径在网上看到70/900 80/500 80/800 90 下列关于内环境稳态调节的描述中正确的是A 所有的调节都有反射弧参与B 所有的稳态都是相对的C 所有的稳态的形成都有许多系统参与D 所有稳态的调节中枢都在大脑C为什么不对? 三轴飞行器和四轴飞行器各有什么优势和难点 葡萄是酸性还是碱性的为什么化学书上测PH是酸性的呢? 不能正确描述人体调节内环境稳态的有A.ph的调节与血液中存在缓冲物质有关B.水和无机盐平衡的调节是有一定联系的C.胰岛素是血糖调节中唯一降血糖的激素D.维持体温恒定主要是通过体液调 在MgSO4和Al(NO3)3、Mg(NO3)2溶液中镁离子、铝离子、硫酸根,为什么?原因是什么? 葡萄是酸性还是碱性 中国古代木结构建筑的抗震智慧是如何以柔克刚的 葡萄是强碱性的,那为什么葡萄干是酸性的? 镜子背后刮花了怎么办 分析一下初中物理直流电动机和交流电动机构造及原理最好用途来说明,从构造和原理详细说一下, 含有花青素的植物叶子呈红色,它是用花青素进行光合作用的吗? 葡萄是碱性还是酸性 防盗门上的“猫眼”的构造是何原理, 葡萄干是酸性还是碱性经查资料得知:有的说是碱性 而有的说是酸性。众说纷纭,有没有确却点的答案? 葡萄属于碱性还是酸性 新疆知名农业企业有那些? 葡萄干到底是碱性还是酸性的? GB 3275-91什么意思
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘