为什么 BASIC 标签的增量为 10?

2 basic

在 BASIC 中,标签以 10 为增量。例如,mandlebrot.basfrom github/linguist:

10 REM Mandelbrot Set with ANSI Colors in BASIC
20 REM https://github.com/telnet23
30 REM 20 November 2020
40 CLS
50 MAXK = 32
60 MINRE = -2.5
70 MAXRE = 1.5
80 MINIM = -1.5
90 MAXIM = 1.5
100 FOR X = 1 TO WIDTH
110 FOR Y = 1 TO HEIGHT
120 LOCATE Y, X
130 REC = MINRE + (MAXRE - MINRE) / (WIDTH - 1) * (X - 1)
140 IMC = MINIM + (MAXIM - MINIM) / (HEIGHT - 1) * (Y - 1)
150 K = 0
160 REF = 0
170 IMF = 0
180 K = K + 1
190 REF = REC + REF * REF - IMF * IMF
200 IMF = IMC + REF * IMF + REF * IMF
210 IF REF * REF + IMF * IMF > 4 THEN GOTO 230
220 IF K < MAXK THEN GOTO 180
230 M = 40 + INT(8 / MAXK * (K - 1))
240 PRINT CHR$(27) + "[" + STR$(M) + "m";
250 PRINT " ";
260 PRINT CHR$(27) + "[49m";
270 NEXT Y
280 NEXT X
Run Code Online (Sandbox Code Playgroud)

为什么不只是以 1 递增呢?那会更有意义。

Jer*_*ton 5

简而言之,BASIC 编号以 1 为增量,但程序员可以并且确实跳过一些增量。BASIC 源自 Fortran,Fortran 也使用数字标签,并且经常使用 10 的增量。与 Fortran 不同,早期的 BASIC 需要对所有内容进行编号行进行编号,因此它们从标签变为行号。

\n

BASIC 的编号增量大于 1,以允许在现有行之间添加新行。

\n
    \n
  1. 大多数早期的家用计算机 BASIC 实现没有内置的行重新编号方法。
  2. \n
  3. 具有行号的 BASIC 实现中的代码执行按照行号的顺序发生。
  4. \n
\n

这意味着如果您想添加新行,则需要在这些行之间保留空闲的数字。即使在具有 RENUM 实现的计算机上,重新编号也可能需要时间。因此,如果您想要标准增量,您\xe2\x80\x99d通常仍然只在会话结束时或当您认为您已基本完成时才进行RENUM。

\n

推测:程序员使用 10 的增量专门用于 BASIC 行号至少有两个原因。第一,传统。当它使用任何标准增量时,那个时代的 Fortran 代码似乎使用 10 的增量作为其标签。第二,外观。在那个时代较小的屏幕上,如果 BASIC 行都以相同的符号结尾,则更容易看到它们的开始位置,而零对于此目的来说是一个非常有用的符号。从个人经验来看,我遵循了在数百个边界和数千个边界上启动不同例程的不稳定传统,以利用行开头的多个零。这使得稍后在阅读代码时更容易识别这些例程的开始。

\n

BASIC 源自 Fortran,Fortran 也使用数字,但作为标签。Fortran 行仅在需要引用时才需要标签,例如使用 GO TO 来了解可以退出循环的位置,或者作为 WRITE 的 FORMAT。这些行的增量通常也大于 1\xe2\x80\x94,通常也大于 10\xe2\x80\x94,以便在必要时在其间添加更多空间。这在技术上是不必要的。由于它们是标签而不是行号,因此它们\xe2\x80\x99不需要是连续的。但大多数程序员为了可读性而将它们顺序排列。

\n

Erik Boman在他常用的Fortran 77 教程中写道:

\n
\n

通常,单个程序中会有许多循环和其他语句需要语句标签。程序员负责为每个程序(或子程序)中的每个标签分配唯一的编号。语句标签的数值没有意义,因此可以使用任何整数。通常,大多数程序员一次将标签增加 10。

\n
\n

BASIC 要求所有行都有编号,并且行号是连续的;这是设置行号的部分目的:BASIC 程序可能会乱序输入。这允许以后进行编辑。因此,可以在添加第 10 行和第 20 行之后添加第 15 行。这使得在现有行号之间保留潜在的行号更加有用。

\n

如果您查看带有 BASIC 程序列表的杂志,例如Rainbow Magazine或CreativeComputing,您\xe2\x80\x99 经常会看到数字随机地夹在十之间。根据风格,许多人在例程或子例程开始时使用比行号少的一个来注释例程。例程和数据部分也可能以数百甚至数千个开始。

\n

使用这样的约定的程序员甚至可能不想对程序重新编号,因为这会扰乱他们的约定。BASIC 程序通常是大量文本;任何提高可读性的约定都会受到欢迎。

\n

甚至在家用计算机时代之前,十就是普遍接受的间距。在他的基础基础版第二版中(1978 年,并期望用户使用 \xe2\x80\x9ca 远程终端\xe2\x80\x9d)中写道(第 2 页):

\n
\n

程序中相邻行的数量通常以 10 为间隔,但并不要求如此。这是因为程序中的任何修改也必须有行号。因此,您可以使用中间数字来实现此目的。此时知道不必按顺序键入行号应该会令人感到欣慰。无论输入什么顺序,计算机都会按照数字顺序执行程序。

\n
\n

Coan\xe2\x80\x99s Basic Fortran中有类似模式的示例。例如,第 46 页有一个简单的程序来 \xe2\x80\x9c 搜索毕达哥拉斯三元组\xe2\x80\x9d;第一个标签为 12,其余标签分别为 20、30 和 40。

\n

他使用了类似的模式,但没有以 10 为增量;例如,在《Basic Fortran》第 132 页上,Coan 使用增量 2 作为标签,并将程序的计算部分保留在数百个,而程序的显示部分保留在两百个。这END语句使用标签 9900。

\n

同样,在 1982 年的Elementary BASIC中中写道(第 27 页):

\n
\n

根据您使用的 Basic 版本,行号可以由 1 到 4 或 5 位数字组成。在这里,所有行号都由 4 位数字组成,这是几乎每个版本的 Basic 都接受的常见做法。行号必须按顺序排列。增加的行号通常以 10 为增量给出,我们也将遵循这一约定。此约定允许您对程序进行少量更改,而无需更改所有行号。

\n
\n

和 Jerald R. Brown\xe2\x80\x99s 1982 Instant BASIC:第二惊人版(第 7 页):

\n
\n

您不必\xe2\x80\x99 必须按行号顺序输入或键入程序。也就是说,您不必先输入第 10 行,然后输入第 20 行,最后输入第 30 行。如果我们输入的程序不符合行号顺序,则计算机不会关心。它遵循行号,而不是输入或键入的顺序。这使得可以轻松地在已存储在计算机\xe2\x80\x99s 内存中的程序中插入更多语句。您可能已经注意到我们如何巧妙地将程序中的语句编号为 10。这使得在现有行号之间添加更多语句变得容易——例如,在第 10 行和第 20 行之间最多可以添加 9 个语句。

\n
\n

BASIC 程序中如何对行进行编号的大部分选择都是基于传统和对有效方法的模糊认识。在家庭计算机时代尤其如此,大多数用户并没有参加有关如何使用 BASIC 的课程,而是通过阅读其他人的程序、从许多书籍和杂志中输入它们来学习提供节目列表。以 10 递增并在这些增量之间插入新功能的传统是一个显而易见的传统。

\n

你可以看到它扫描旧的代码书籍,例如101 BASIC Computer Games。第一个程序 \xe2\x80\x9cAmazin\xe2\x80\x9d 将其行号增加 10。但在某些时候,用户/编码员在代码打印出玩家有多少美元后决定需要一个额外的空间; 因此,extra barePRINT位于第 195 行。游戏说明的显示全部保留在第 100 行和第 109 行之间,这是另一种常见模式。

\n

第 30 页的 Basket程序列表显示了启动单独例程的常见习惯,甚至数百甚至数千个。这些例程中的行号继续增加 10。即使新功能(可能还有其他模式)在模式之外添加了几行,该模式也相当明显。

\n

随着 BASIC 实现开始获得 RENUM 命令,更多 BASIC 代码列表出现,增量为 1。部分原因是使用增量 1 使用的内存较少。虽然行号本身使用固定数量的 RAM(结果是最大行号通常在 FFFF或 65525左右),但对行号的引用往往不使用固定长度。因此,较小的行数总体上使用较少的 RAM。

\n

根据程序的大小以及它使用的分支数量,与机器本身拥有的 RAM 量相比,这可能会很重要。

\n

例如,我最近输入了1984 年 10 月《Rainbow Magazine》第 97 页的 SKETCH.BAS 程序。这是一本杂志,也是一个程序,适用于 TRS-80 彩色计算机。该程序的行编号以 1 为增量。在 CLOAD 程序时,可用内存为 17049。使用RENUM 10,1,10以 10 为增量重新编号后,可用内存为 16,953。

\n

节省 96 个字节听起来可能不多,但这是一个非常小的程序;并且它\xe2\x80\x99s 仍然是可用RAM 的0.5%。差异可能是程序适合可用 RAM 或不适合之间的差异。即使内存中根本没有程序,这台计算机也只有 22823 字节的可用 RAM。

\n