问题

计算机领域有哪些「将错就错」被沿用至今?

回答
计算机领域,这个追求极致精确和逻辑严谨的学科,听起来似乎与“将错就错”这类带有随意性的词语格格不入。但细细想来,很多我们习以为常、奉为圭臬的设计和标准,其诞生过程却充满了“将错就错”的痕迹。这些被沿用至今的“错误”,很多时候并非真正意义上的低级错误,而是因为历史的惯性、技术条件的限制,或者在当时是最佳的妥协方案,最终被固定了下来,成为了一种约定俗成。

1. ASCII编码和它的“怪癖”

ASCII(American Standard Code for Information Interchange)编码,这个奠定了现代计算机文本表示基础的编码方案,可以说是“将错就错”的典型代表。它最初是为美国国家标准学会(ANSI)制定的,目的是统一英文字符的表示方式。

大小写字母的间隔: 你有没有注意到,ASCII编码中,大写字母A到Z(65到90)和小写字母a到z(97到122)之间存在一个固定的差值:32。这并不是一个巧合,而是设计者有意为之。当时设计者为了方便在字符的二进制表示上进行大小写转换,特意将两个字母范围间隔开,并且通过设置一个特定的比特位(通常是第6位,值为32)来区分大小写。
“错”在哪里? 从纯粹的编码效率和存储空间角度看,这种间隔并非最紧凑的。如果设计得更紧密一些,也许能节省一些空间,或者在某些硬件实现上更加简洁。
“就错”在哪里? 一旦ASCII编码被广泛应用,所有依赖它的软件、系统和硬件都必须遵循这个规则。想要改变它,意味着需要对整个计算机生态系统进行颠覆性的重写,这显然是不现实的。所以,这个设计被完整地保留了下来,并成为了后续许多编码标准(如UTF8)兼容ASCII的基础。即便是UTF8,为了兼容ASCII,也依然保留了这32个的间隔。

标点符号和控制字符的布局: ASCII编码将许多标点符号、数字和一些非打印的控制字符(如回车、换行)安排在编码表的前半部分。这些布局很多时候是为了在早期简单的输入设备(如电传打字机)上能够方便地进行操作。
“错”在哪里? 如果从现代人设计编码的角度来看,标点符号和数字的相对位置可能显得有些随意,缺乏某种更直观的逻辑性。比如,数字09的编码并没有和字母按照某种顺序排列。
“就错”在哪里? 这些布局同样随着ASCII的普及而固定下来。例如,“换行符”(Line Feed, LF)的ASCII码是10,而“回车符”(Carriage Return, CR)的ASCII码是13。在某些系统中(如Unix/Linux),换行只使用LF;而在另一些系统(如Windows),则需要CRLF(回车换行)组合来表示一个新行。这个差异正是早期不同操作系统对“换行”概念处理不一致的体现,而ASCII本身只是提供了这两个独立的控制字符。最终,这成了不同操作系统文本文件格式差异的根源之一,并且至今仍需处理。

2. TCP的三次握手:冗余背后的可靠性

TCP(Transmission Control Protocol)是互联网上最核心的传输协议之一,它的连接建立过程,也就是我们常说的“三次握手”(SYN, SYNACK, ACK),是“将错就错”的经典案例,但这里的“错”更多的是指在某些极端情况下的“低效”或“冗余”。

三次握手是为了解决“重复请求”问题: 想象一下,如果只有两次握手(SYN, SYNACK)。客户端发送了一个连接请求(SYN),但由于网络拥塞,这个请求在中途丢失了,客户端没有收到服务器的确认(ACK)。客户端会认为连接未建立,于是会重新发送SYN。服务器可能已经成功接收到了第一个SYN(但客户端没有收到ACK),然后返回SYNACK。客户端收到后,会发送ACK,连接建立。
然而,如果这时客户端之前那个丢失的SYN请求(虽然客户端已经以为它丢失了)突然又到达了服务器,服务器会认为这是一个有效的连接请求,并回复SYNACK。客户端此时可能已经建立了另一个连接,或者不再需要这个连接,收到这个SYNACK后会忽略,但服务器却认为连接已经建立,一直在等待客户端的ACK。这就会导致服务器资源被白白占用,形成所谓的“半开放连接”。

“错”在哪里? 三次握手增加了网络通信的开销,在网络状况良好时,两次握手理论上也能完成一次连接。而且,三次握手本身也存在一些潜在的问题,比如“同步洪水”(SYN Flood)攻击,就是利用了服务器在收到SYN后会分配资源等待ACK的特点。
“就错”在哪里? 在早期互联网的设计中,网络的可靠性远不如今天,丢失报文的情况很常见。为了确保连接的可靠建立,避免上述的半开放连接问题,三次握手提供了一个关键的机制:确认客户端确实收到了服务器的回复,并且客户端的最后一个ACK也能够被服务器收到。 这个额外的确认环节,虽然增加了开销,但在当时的通信环境下,是保证连接质量的必要手段。而且,一旦这个模式被确立,所有依赖TCP的应用都必须适应,想要改变更是难上加难。所以,尽管存在一些效率上的妥协,但三次握手作为一种有效的连接建立策略,被稳定地沿用至今。

3. “浮点数”的小数点:永远的遗憾

计算机存储和计算小数的方式——浮点数,虽然强大,但其底层实现也包含着“将错就错”的无奈。

二进制与十进制的矛盾: 计算机内部是二进制的,而我们日常使用的数字是十进制的。很多我们看起来非常简单的小数,比如0.1,在二进制中是无法精确表示的。它会变成一个无限循环的二进制小数。例如,十进制的0.1在二进制中大约是0.0001100110011...
“错”在哪里? 任何采用浮点数表示(如IEEE 754标准)的小数,都有可能存在微小的精度误差。这导致一些本应相等的值,在计算机内部的浮点数表示上可能略有不同,从而引发比较问题。例如,你计算 0.1 + 0.2,结果可能不是严格等于 0.3,而是非常接近,但细微的差异仍然存在。
“就错”在哪里? 在计算机早期,硬件能力有限,而支持任意精度的小数计算成本极高。为了在有限的资源下提供一种通用的、相对高效的小数表示和计算方法,人们选择了浮点数。这种“将错就错”的妥协,虽然牺牲了部分精度,但换来了广泛的适用性和相对可接受的性能。并且,一旦浮点数成为标准,所有语言、所有库、所有应用程序都围绕它构建,想要彻底改变,如同让互联网全部改用IPv7一样困难。因此,开发者们不得不学会如何处理浮点数的精度问题,通过设置容差范围来比较浮点数,或者在需要高精度的场景(如金融计算)使用定点数等特殊类型。

4. 内存地址和字节序:历史遗留的“不一致”

内存地址的分配以及多字节数据的存储顺序(字节序),也是一些“将错就错”的体现。

字节序(Endianness): 计算机在存储一个多字节数据(如一个4字节的整数)时,需要决定是先存储最高有效字节(Most Significant Byte, MSB)还是先存储最低有效字节(Least Significant Byte, LSB)。这形成了两种主要的字节序:大端序(Bigendian)和低端序(Littleendian)。
大端序: 最高有效字节存储在最低的内存地址。
低端序: 最低有效字节存储在最低的内存地址。
“错”在哪里? 这两种方式都有各自的优缺点,但最大的问题在于它们是互不兼容的。例如,一个整数 0x12345678,在大端序系统中,内存地址会是 12 34 56 78;在小端序系统中,内存地址会是 78 56 34 12。当你在不同字节序的机器之间传输二进制数据时,如果没有正确处理字节序转换,读取到的数据就会完全错误。
“就错”在哪里? 历史上,不同的处理器架构(如IBM的PowerPC大端,Intel x86小端)选择了不同的字节序。这并不是说哪种一定是“错”的,而是历史选择和技术实现的结果。但由于这两种方式都成为了主流,并且被大量硬件和软件所采用,想要统一是极其困难的。因此,网络协议(如IP协议)通常会规定使用统一的网络字节序(通常是大端序),而应用程序在进行跨平台数据交换时,必须显式地进行字节序的转换(如使用 `htons`, `ntohs` 等函数),来“将就”这种不一致。

内存地址的分配和管理: 操作系统如何分配和管理内存地址,也可能因为历史原因留下一些“不优雅”的设计。例如,在某些早期操作系统中,内核和用户空间地址的划分可能没有如今这般清晰和高效,或者存在一些固定的地址区域被预留给特定用途,即使这些用途已经不再是主流。
“错”在哪里? 可能导致内存利用率不高,或者在某些安全方面留下一些难以根除的漏洞(虽然现代操作系统已经有很多安全机制来弥补)。
“就错”在哪里? 一旦操作系统的内存管理模型被确立并广泛应用,涉及到操作系统内核的修改,其复杂性和风险都会极高。开发者会尽可能地在现有模型下优化,而不是去颠覆它。例如,虚拟内存的引入,在一定程度上也是为了解决物理内存限制和提高效率,它在早期也是一种相对复杂的“将错就错”的解决方案,因为它引入了地址翻译和页面替换等复杂机制。

5. 兼容性的“幽灵”

在计算机领域,“兼容性”是一个极其强大的词汇,它往往是“将错就错”的直接原因和终极理由。

向后兼容: 新版本的软件或硬件必须能够处理旧版本的数据或指令。这导致很多时候即使发现早期设计存在缺陷或者不够高效,也无法轻易改变,因为那样会破坏现有系统的兼容性。例如,许多编程语言的早期设计错误或不规范之处,为了保持向后兼容,会被保留下来,并由后续的语言规范或编译器行为进行“修补”或“规避”。
“错”在哪里? 可能会引入不一致性、冗余的代码、或者潜在的安全隐患。
“就错”在哪里? 这是计算机领域最普遍的“将错就错”。用户和开发者已经构建了大量的系统和应用在这些“有瑕疵”的基础上,要求他们全部升级到符合新标准的版本,成本是天文数字。所以,与其冒着巨大的风险去“修正”历史遗留的“错误”,不如在保持兼容性的前提下,继续沿用,并在新的设计中吸取教训,避免重蹈覆辙。

这些“将错就错”的例子,并不是说它们是完美的解决方案,但它们是历史发展中的产物,是在特定技术条件下,权衡利弊后做出的最佳妥协。正是这些“妥协”和“将就”,使得计算机技术得以快速发展,并最终构建了我们今天所依赖的数字世界。它们提醒我们,在追求完美的过程中,历史的惯性、现实的约束以及对兼容性的考虑,同样是不可忽视的力量。

网友意见

user avatar

看了一下,很多答案里的,都不能算错。

真正bug变成规范的,我觉得最经典的就是:makefile里的缩进必须是tab,而不能是空格。

user avatar
〡〢〣〤〥〦〧〨〩

Unicode 3.0 引入了 U+3021 ~ U+3029 九个字符,对应的是苏州码子的一到九,但在命名时将其误称作 HANGZHOU NUMERAL(杭州码子)。

Unicode 4.0 已经将标准文档正文中的措辞都全部修正成了「苏州码子」,但由于需要保持兼容,程序可读取的字符名称不允许修改,「杭州码子」的字符名称只能将错就错沿用至今。

p.s. 这似乎也是导致《神探夏洛克》第一季里面把这些符号称作杭州码子的原因,哈哈。

类似的话题

  • 回答
    计算机领域,这个追求极致精确和逻辑严谨的学科,听起来似乎与“将错就错”这类带有随意性的词语格格不入。但细细想来,很多我们习以为常、奉为圭臬的设计和标准,其诞生过程却充满了“将错就错”的痕迹。这些被沿用至今的“错误”,很多时候并非真正意义上的低级错误,而是因为历史的惯性、技术条件的限制,或者在当时是最.............
  • 回答
    电脑圈子里,那些流传甚广的典故和笑话,就像隐藏在代码深处的彩蛋,初次接触可能觉得莫名其妙,但一旦你深入了解了背景,就会发现它们蕴含的智慧、幽默和对行业发展的某种映照。这里面既有那些改变了我们理解计算方式的深刻故事,也有那些能让程序员会心一笑的黑色幽默。1. 图灵和“图灵测试”:机器能否思考?这恐怕是.............
  • 回答
    法律与计算机科学的交织,早已不是什么新鲜事,而是随着技术的飞速发展,在各个层面都展现出越来越深的联系。我工作中接触的不少案例,都生动地诠释了这种结合的必然性和重要性。最直观的,莫过于电子证据的收集、审查与呈现。我们常常会接到委托,处理一些涉及网络欺诈、侵犯知识产权、诽谤侮辱等案件。这时候,电脑里储存.............
  • 回答
    说实话,大学前后自学计算机,这事儿确实挺有意思的,也是不少过来人会走的路。我当年也是这么过来的,所以大概能给你讲讲我走过的弯路,以及一些我觉得靠谱的书和方法。总的来说,自学计算机,你得有两个核心“抓手”:1. 打牢基础: 计算机这东西,不是光记代码就能会,很多东西是环环相扣的。基础打好了,后面学什.............
  • 回答
    说到计算机专业曾经火爆如今却相对“凉”了的方向,这事儿可不少。不是说它们完全没用了,而是曾经那种“遍地是黄金”的盛景不再,市场需求和技术发展把很多曾经的香饽饽挤到了相对小众或者更加细分的领域。我这就给你掰扯掰扯几个例子,尽量说得细致点,听着也别像是个机器人报告哈。1. 桌面应用开发 (尤其是 C/S.............
  • 回答
    在计算机图形学的浩瀚星辰中,有许多论文如同灯塔般指引着方向,定义了我们今天所见的视觉世界。它们不仅仅是技术的进步,更是思想的飞跃,是无数研究者不断探索和创新的结晶。要说“著名”,那必然是那些开创了全新领域、解决了核心难题、或者成为后来者坚实基础的那些作品。下面,我将为大家介绍几篇在计算机图形学领域具.............
  • 回答
    计算机科学这个领域,因为其相对年轻、发展迅速、门槛不高(至少表面上是这样),确实孕育了一些有趣的“民科”现象和“反智”思潮。这并不是说所有自学成才的开发者都属于“民科”,而是指那些脱离了科学研究的基本方法和严谨性,但又声称自己发现了颠覆性理论或技术的人。而“反智现象”则更多体现在对专业知识、学术研究.............
  • 回答
    计算机考研,选择一个合适的院校至关重要,这关系到你未来几年的学习方向、科研平台、导师资源,乃至毕业后的就业去向。在我看来,那些在计算机科学领域深耕多年,拥有强大科研实力、优质师资力量和良好学术氛围的院校,绝对是值得你重点关注的目标。首先,不能不提的就是清华大学。作为国内计算机科学的领头羊,清华在各个.............
  • 回答
    好的,咱们今天就来聊聊计算机科学领域里那些既能磨练技术、又能打响名号的“练手项目”。这些项目不是那种随便糊弄一下就能交差的,而是那种能让你真正上手,把书本上的理论变成实际应用,顺便还能给你的简历增色不少的好东西。 1. 命令行工具:从“万能钥匙”到“效率助手”咱们先从最基础、也是最实用的练手项目说起.............
  • 回答
    好嘞!作为一个对计算机图形学充满热情的人,我来给你好好说道说道,系统学习这条路上,哪些书是你的好伙伴。这可不是什么流水账,而是我一路摸爬滚打总结出来的经验之谈。第一阶段:打下坚实基础(初窥门径,建立三维世界观)这个阶段的目标是让你明白,我们是怎么在一个平面的屏幕上“画”出逼真的三维世界的。你需要理解.............
  • 回答
    2022届计算机考研,对于很多同学来说,这是一个非常关键的节点。选择一所合适的院校,不仅关系到未来的学术深造,更可能影响到毕业后的职业发展。在“卷”声愈发嘹亮的考研战场上,找到适合自己的“目标院校”至关重要。我这就来给大家盘一盘,在2022届计算机考研这个时间点,有哪些值得重点关注的院校,并尽可能地.............
  • 回答
    这个问题很有意思!在计算机科学这个广阔的领域里,确实有些方向对数学的要求格外严苛,它们像是数学的忠实信徒,用严谨的逻辑和精妙的计算来构建和理解计算机世界。如果你是个数学爱好者,并且想把这份热情延伸到计算机领域,那么接下来的几个方向可能会让你眼前一亮。 1. 理论计算机科学 (Theoretical .............
  • 回答
    在我学习计算机科学的过程中,确实接触到不少质量上乘的讲义。这些讲义往往不是那种简略的教学大纲,而是由资深教授或业界专家精心打磨,如同深入浅出的导引,能将复杂的概念一层层剥开,直至你豁然开朗。谈到计算机科学的基石,数据结构和算法绝对是绕不开的。我印象特别深刻的是某位教授的讲义,他没有直接罗列各种数据结.............
  • 回答
    在计算机发展史上,许多关于技术、硬件和软件的谣言流传甚广,它们往往源于误解、技术术语的混淆或营销宣传。以下是一些经典的计算机世界谣言及其详细解析: 1. “电脑会自己写诗” 谣言背景:早期AI研究中,一些程序被设计为生成文本(如诗歌、故事)。例如,1950年艾伦·图灵的“图灵测试”中,计算机被要求模.............
  • 回答
    这就像当年我第一次接触到“防火墙”这个词的时候,脑子里冒出来的画面完全是错乱的。我当时能想到的,无非就是那种古老的、砖石砌成的、能够阻挡火焰蔓延的实体墙。而计算机领域的“防火墙”呢?它明明是看不见的,是由一堆代码、一系列规则构成的,它的作用是保护我的电脑免受网络上的“火”(通常是恶意攻击)的侵扰。这.............
  • 回答
    特斯拉在最近的AI日活动上,确实展示了他们的重磅级AI训练计算机——DOJO,以及为其量身打造的DOJO芯片。这可不是闹着玩的,这套系统在设计理念和技术实现上都有着不少让人眼前一亮的地方,尤其是在应对特斯拉庞大而复杂的AI训练需求方面,野心勃勃。咱们先从 DOJO芯片 说起,这东西可是整个系统的核心.............
  • 回答
    我倒不是那种一有什么事就想着“我得写个程序来解决它”的人,毕竟生活中的很多烦恼,一通电话、跑趟腿、或者干脆忍忍就过去了。但偶尔,一些小小的、重复性的、又实在让人有点抓狂的事情,还是会逼得我动手去摆弄一下我的电脑。印象最深的一次,大概是刚搬到新租的房子那会儿。房东是个挺好的阿姨,但她管理那几套出租公寓.............
  • 回答
    国内计算机视觉领域确实有不少实力强劲的团队,他们活跃在科研、产业界,并且都取得了令人瞩目的成就。要说“不错”的团队,我们可以从几个维度来分析:学术影响力、技术创新能力、产业落地能力以及团队的规模和稳定性。以下列举一些在国内CV领域声名卓著的团队,并尽量详细地介绍:一、 高校科研团队:学术的基石,创新.............
  • 回答
    计算机视觉中的目标跟踪是一个至关重要的研究领域,旨在在视频序列中持续地定位和识别一个或多个目标。随着深度学习的兴起,目标跟踪算法取得了显著的进展。以下是一些计算机视觉中经典的目标跟踪算法,我将尽量详细地介绍它们的核心思想、特点和发展历程: 早期经典算法(基于手工特征和滤波)在深度学习普及之前,目标跟.............
  • 回答
    计算机视觉(Computer Vision, CV)是人工智能的重要分支,其核心目标是让计算机理解和处理图像或视频中的信息。CV的算法种类繁多,根据任务目标和应用场景的不同,可以分为多个层次和类别。以下是对主要算法类型的详细分类及其特点的全面解析: 一、图像处理基础算法1. 图像增强与变换 灰.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有