[2309] X

Title Text:The worst is when you run out of monospaced fonts and have to use variable-width variables.

Origin:https://xkcd.com/2309/

https://www.explainxkcd.com/wiki/index.php/2309:_X

X

最糟的是,等宽的字体¹用完了的话,就要用变宽的变量了。

脚注:
[1]等宽字体:指字符宽度相同的电脑字体,易于排版,如汉字等东亚语言是等宽字体,代码也经常用等宽字体。西文字母是变宽字体。

http://xkcd.in/comic?lg=cn&id=2309

Cueball开发了一种具有新颖语法的新编程语言。此类语言通常被归类为深奥的语言 -出于新颖性或学术兴趣(尽管不会阻止人们尝试使用它们)的目的而将其开发为没有实际用途的编程语言。其中一些经典的例子是INTERCALbrainfuck

通常,没有法律禁止开发不良的编程语言或不良的代码(尽管有些人认为应该存在)。法律常常必须追赶技术。但是,当EPA对Cueball的笔记本电脑问题以及Cueball的其他技术支持问题产生兴趣时,似乎法官先前已下令Cueball停止开发新的编程语言,这可能是因为结果如此严重以至于造成真正的伤害。但是,该裁决因上诉而被推翻,并且Cueball可以自由地再次将自己的作品施加于世界,除非并且直到有另一项上诉为止。母球使用“ 更高 法院”表示他没有得到美国最高法院的裁决,也没有得到对他有管辖权的任何州的裁决,否则他会这样说,显然,场外的声音希望对他们提出上诉,并恢复Cueball的禁令。

变量是一个数据片(如整数或文本的字符串),它的值可以在程序的运行改变。变量由名称标识,通常可以命名为任何字母数字字符串。为了使代码易于人们遵循,通常给变量起一个名称,该名称指示变量的用途;例如,一个计数自程序启动以来经过多少秒的变量可能称为elapsedTime

一些程序员,特别是如果他们在时间压力下工作,可能会给变量赋予非描述性名称,例如x。这被认为是不好的编码习惯,因为除非熟悉代码,否则任何阅读代码的人都不会立即理解变量的作用。甚至原始的程序员也可能会重新找回它,并发现他们忘记了该变量的用途。

在这里,Cueball正在开发一种将所有变量都命名为X的语言-区分不同X的唯一方法是用不同的字体来书写。不用说,这是一个糟糕的主意。该语言将是编程的噩梦,因为除非仔细注意所有变量,否则所有变量看起来都非常相似,而且几乎无法确定每个字符的用途,因为字体名称通常不是很容易描述。此外,某些字体看起来很相似(例如Arial和Helvetica)这一事实将要求程序员对不同字体以及如何将它们与一个字母区分开来有全面的了解。

为了存储字体信息,这种语言还需要源代码文件采用某种富文本格式(例如Word文档)。另外,为了编辑代码,还需要使用文字处理器或类似工具。如果系统未安装所需的字体,或者未获得许可使用这些字体,则程序也将陷入困境。

相比之下,普通代码始终以纯文本编写(通常使用ASCII或UTF-8编码),该文本没有指定字体,甚至可以由最基本的文本编辑器进行编辑。

该漫画也可能是数学家的戳记,按照惯例,他们使用的变量名短而没有描述性(例如“ x”),也可以是“字体敏感”的-例如,ℕ表示自然数集,并且通常将极限定义定义为“对于每一个ℇ> 0,在exists中存在N,从而如果n> N,则对于f中的每个n,| f(n)-l | <ℇ”。例如,ℜ可以表示复数的实部,而ℝ表示实数集,R可以表示复数平面中某个圆的半径。

标题文本引用了这样一个事实,即大多数代码编辑器都使用等宽字体(即每个字符宽度相同的字体),而不是可变宽度字体,在可变宽度字体中,某些字符(例如“ I”)要比其他字符窄。部分原因是,在处理某些文本字符串时,固定水平对齐有时会很有用。

“可变宽度变量”是对“可变”一词的两种含义的双关语,是指字母X与所有字母一样,在不同的字体中具有不同的宽度。这将使这种固定的对齐方式几乎变得不可能,从而为Cueball的语言使用起来非常不愉快创造了另一个原因。也可能直接(错误)指的是诸如可变宽度编码之类的系统,在该系统中,链接到变量存储中的数据被打包为不固定数量的位和/或字节。这类系统通常使用霍夫曼(Huffman)类型编码,以与初始元素逐渐区分,需要多少个元素来完全定义值,

You May Also Like

[2981] Slingshots

[2980] Lava Lakes

[2979] Sky Alarm

More From Author

[2981] Slingshots

[2980] Lava Lakes

[2979] Sky Alarm

Leave a Reply

Your email address will not be published. Required fields are marked *