当你使用BASIC语言编写代码时,需要使用行号,例如:
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
但我想知道:到底是谁想出来使用行号的呢?这真是一件麻烦事,在开发(故意双关)世界中留下了相当大的“回声”!
当你使用BASIC语言编写代码时,需要使用行号,例如:
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
但我想知道:到底是谁想出来使用行号的呢?这真是一件麻烦事,在开发(故意双关)世界中留下了相当大的“回声”!
当时的想法是通过使用适当的行号,可以在程序的任何地方轻松地添加代码。这就是为什么每个人都使用行号10、20、30.. 以便留有余地的原因:
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
25 PRINT "HOME"
在最初支持BASIC编程语言的界面上,没有像vi或emacs那样的高级编辑器,甚至没有像DOS edit这样的简单编辑器。你只能在控制台上打印出程序,然后通过输入对应的行号来添加或替换代码。与现代编辑器不同的是,你不能像现在一样使用光标浏览整个“文件”(程序保存在内存中,但你可以将其复制到磁盘上保存)。
因此,行号不仅仅是臭名昭著的GOTO语句的标记,而且需要告诉解释器你正在编辑程序流程中的哪个位置。
它有着悠久的历史。
行号实际上来自Dartmouth BASIC,它是BASIC编程语言的原始版本,并且是所谓的Dartmouth Time Sharing System的重要组成部分。该DTSS具有一个基本的集成开发环境(IDE),仅仅是一个交互式命令行。
因此,在这个“IDE”中键入的每一行,如果以行号开头,则会被添加到程序中,替换任何先前存储的相同编号的行;其他任何内容都被认为是DTSS命令并立即执行。
在VDT(视频显示终端)出现之前,我们这些老程序员使用的是穿孔卡编程。穿孔卡将72-80列保留为序号 - 如果你的卡片堆掉了,它们都乱了,你可以把卡片放入一台排序器中,该排序器会根据这些序号对卡片进行排序。在许多方面,BASIC行号类似于那些序号。
BASIC世界中的另一个优势是,在旧日,BASIC是按解释执行的。使用标签而不是顺序行号进行分支需要第一遍扫描以捕获所有标签及其位置,而如果使用行号,则解释器就知道是否需要向前或向后扫描目标位置。
那些年,你没有像emacs或vi一样的二维编辑器。你只有命令行。
你的程序存储在内存中,你需要输入单行命令来编辑单个行。
如果你是Unix大神,你可以用ed或其他什么东西来做到这一点,但对于C-64、VIC-20或TRS-80上的BASIC,你只需覆盖该行。
因此,会话可能看起来像:
$10 PRINT "Hellow World"
$20 GOTO 10
$10 PRINT "Hello World"
现在程序将能够正确运行。
甚至还有一些老的大型机没有屏幕的线路终端。你整个会话都会被打印到纸张上!
LIST
命令,但在大多数像ed
这样的编辑器中,每次插入/删除都会改变行号,所以如果你看到插入了2行的17i
,然后是24d
,你的大脑必须追踪到那个时刻的第24行=上次列出的第22行。BASIC的非连续编号保持稳定,使得跟踪代码演变变得更加容易。 - Beni Cherniavsky-Paskin它们起源于FORTRAN,BASIC是从FORTRAN派生而来的。但是,在FORTRAN中,只有其他行引用的行(如GOTO目标)需要编号。在BASIC中,它们有第二个用途,就是允许对特定行进行编辑。
我猜它起源于汇编语言,每个指令都有一个地址,可以被其他指令跳转到。
此外,最初的计算机内存很少,只需两个字节(如果正确地执行),就可以存储行号。编写标签需要更多的内存,首先是在定义该标签的位置,然后是在任何跳转命令中。
最后,在旧时代没有任何花哨的编辑器。唯一的“编辑器”是简单的命令行界面,它将以数字开头的所有内容视为程序的一部分,将其他所有内容视为立即执行的命令。最著名的例子应该是Commodore 64。
新的Basic方言不再需要行号。
在五十年代,高级编程语言刚刚开始出现时,没有终端、编辑器或显示器(是的,没有显示器),只有卡片打孔机和读卡器(用于将卡片内容写入计算机内存中并读取)以及打印机(用于自然地打印结果)。
后来引入了磁带,但那是另一个故事。
每个打孔卡都有自己的编号。这样做有几个原因:从纯粹的保持它们的顺序到确定执行顺序。每个卡片都是一行代码(按今天的术语)。由于当时没有像 if..then..else 或其他类似的结构,必须以某种方式确定执行顺序。所以引入了 GOTO 语句。它们是循环的基础。术语“意大利面条式代码”也来自那个时期,因为糟糕的编写代码相对难以理解,就像盘子里的意大利面条一样 :)
GOTO 10
那是一种跳行的方式,一个好的方式,早在20多年前就被发现了!
今天,行号帮助我们捕捉错误/异常,因为调试引擎会向我们发送消息,告诉我们在第xxx行出现了异常,我们可以立即跳转到该行!
想象一下没有行号的世界……没有行号,记者怎么能拿到报酬呢?
“现在你已经知道这部小说了,你必须写一份不超过50行的摘要”
还记得吗?即使在学校里,我们也要学习行号!
如果它没有被发明,某个人肯定已经重新发明了它,以便我们可以很好地使用它 :)