当您在BASIC中编写内容时,您需要使用行号。像:
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
但我想知道:谁想出了使用行号的想法?这是一种令人讨厌的事情,并且在发展中(双关语)世界中留下了相当的“回声”!
答案 0 :(得分:72)
当时的想法是,您可以使用适当的行号轻松地在程序中的任何位置添加代码。这就是为什么每个人都使用10号,20号,30号线的原因。所以还有空间:
10 PRINT "HOME"
20 PRINT "SWEET"
30 GOTO 10
25 PRINT "HOME"
在BASIC可用的第一个接口上,没有闪亮的编辑器,甚至没有类似vi或emacs(或DOS编辑,呵呵)的东西。您只能在控制台上打印出您的程序,然后通过首先提供相应的行号来添加新行或替换它们。您无法像现在一样使用光标浏览“文件”(程序保存在内存中,尽管您可以将副本保存在磁盘上)。
因此,行号不仅需要作为臭名昭着的GOTO的标签,而且确实需要告诉口译员您正在编辑的程序流程中的哪个位置。
答案 1 :(得分:44)
它有悠久的历史。
行编号实际上来自达特茅斯BASIC,它是BASIC编程语言的原始版本,是所谓的达特茅斯时间共享系统的组成部分。 DTSS有一个基本的IDE,它只不过是一个交互式命令行。
因此,在“IDE”中键入的所有行都以行号开头,添加到程序中,用相同的数字替换以前存储的所有行;其他任何东西都被认为是DTSS命令并立即执行。
答案 2 :(得分:42)
在出现VDT(视频显示终端)这样的东西之前,我们在打卡机上编程的老人。 Punch卡为序列号保留了第72-80列 - 如果你丢弃了卡片组并且它们都已经无序,你可以将卡片放入卡片分类器中,根据这些序列号对卡片进行排序。在许多方面,BASIC行号与序列号类似。
BASIC世界的另一个优势是,在过去,BASIC被解释为运行。使用标签而不是分支的顺序行号需要第一次传递来获取所有标签及其位置,就像您使用行号一样,解释器知道它是否需要开始向前或向后扫描目的地。
答案 3 :(得分:19)
当天你没有像emacs或vi这样的二维编辑器。你所拥有的只是命令行。
您的程序存储在内存中,您可以输入单行命令来编辑单行。
如果你是Unix神,你可以用ed或者其他东西来做,但对于C-64,VIC-20或TRS-80上的BASIC,你只需要覆盖该行。
所以会话可能如下:
$10 PRINT "Hellow World"
$20 GOTO 10
$10 PRINT "Hello World"
现在该程序可以正常工作。
一些较旧的大型机甚至没有屏幕的线路终端。您的整个会话都打印在墨水
纸张上答案 4 :(得分:8)
“谁?”将是发明家,Kemeney和Kurtz。
阅读回复后,我检查了Wikipedia entry的“Dartmouth BASIC”,并且很惊讶地学习
第一个编译器是在分时系统准备好之前生成的。它被称为CardBASIC,适用于基于标准读卡器的批处理系统。
所以,看起来Paul Tomblin“得到了广场”。
答案 5 :(得分:6)
它们起源于FORTRAN,BASIC源自FORTRAN。但是,在FORTRAN中,只有其他行(如GOTO目标)引用的行才需要数字。在BASIC中,他们有二次使用,这是为了允许编辑特定的行。
答案 6 :(得分:6)
Paul Tomblin的答案是最全面的,但我很惊讶没有人提到BASIC项目的最初目标很大一部分是使用分时提供初学者友好的交互式环境。 (Kurtz和Kemeny关于“为所有学生提供普遍接入”的愿景远远超过了它在这方面的时间。)
为实现这一目标而开发的BASIC系统采用了Teletype ASR-33(以及后来的其他)打印终端。当连接到具有分时功能的操作系统时,这些允许以交互模式编辑和运行BASIC程序(与使用穿孔卡不同),但它们不是光标可寻址的。行号是一种初学者友好的方式,既可以指定程序语句的顺序,也可以在没有屏幕编辑器的情况下进行明确的编辑。 “线编辑器”的维基百科条目进一步解释,任何曾尝试使用行编辑器(例如Un * x'ed')的人都能理解为什么Kurtz和Kemeny应该感谢让初学者不得不学习神秘以这种方式编辑文本所需的命令序列。
答案 7 :(得分:2)
我猜它来自汇编程序,其中每条指令都有一个地址可以被另一条指令跳转。
此外,第一台计算机没有太多内存,存储行号只需要两个字节(如果正确完成)。编写标签会占用更多内存,首先是在定义该标签的位置,然后是任何跳转命令。
最后在过去的好日子里,没有任何花哨的编辑。唯一的“编辑器”是一个简单的命令行界面,它处理从作为程序一部分的数字开始的所有内容以及其他所有作为要立即执行的命令。最突出的例子应该是Commodore 64。
Basic的新方言不再需要行号。
答案 8 :(得分:2)
每张穿孔卡都有自己的号码。有几个原因;从纯粹保持秩序,到确定执行的顺序。每张卡都是一行代码(按照今天的说法)。因为在那个时候,没有像if..then..else那样的结构,或者类似的任何变体,所以必须以某种方式确定执行的顺序。因此引入了GOTO声明。它们是循环的基础。术语“意大利面条代码”也来自那个时期,因为写得很差的代码相对难以理解,比如盘子里的意大利面条:)
答案 9 :(得分:1)
在Basic中,如果你没有行号,你怎么能预先形成
GOTO 10
这是跳线的一种方式,这是20多年前发现的好方法!
今天,这些行帮助我们捕获错误/异常,因为调试引擎发送给我们的消息是我们在xxx行上得到了一个异常,我们立即跳转到它!
想象一个没有行号的世界......如何在没有线路的情况下获得报酬?
记得这个吗?即使在学校,我们也会了解行号!“现在你知道了这部小说,你必须写一篇不超过50行的摘要”
如果它没有被发明,有人会再次发明,所以我们可以很好地使用它:)
答案 10 :(得分:1)
并非所有版本的BASIC都需要行号。例如,QBasic支持标签。然后你可以跳到那些有GOTO的人(暂时忽略Dijkstra的“Go To Statement Considered Harmful”)。
答案 11 :(得分:1)
答案已在上面。保罗·汤姆林(Paul Tomblin)写了这篇文章(对扎布宗(Zabzonk)有一个警告)。
实际上,我认为任何没有提到“打卡”的答案都是不完整的,如果它既没有提到打卡,也没有提到FORTRAN,这是错误的。我可以说这肯定是正确的,因为我的父母经常使用穿孔卡(他们从FORTRAN 66和77开始),然后在80年代迁移到Basic和COBOL。
答案 12 :(得分:1)
在早期,大多数节目都是用穿孔卡输入的。穿孔卡通常按顺序输入,通常每张卡一个指令,标签(JMP / JSR目标)是单独的指令卡。
要编辑您的程序,请更换该卡。
后来的实现在行的右端添加了一个可选的序列号,这样当它们失序时,它们可以被自动读取器重新排序。
Fortran在左侧使用了两个数字目标标签(第1-5栏),并在右侧(73-80)留下了一个保留区块用于序列或注释。
当最初编写BASIC时,决定将序列号向左移动到FORTRAN的标签字段中,并允许覆盖先前卡的内存占用...作为编辑模式。这适用于交互式开发环境,但也适用于卡片。由于各种原因,卡片在一些早期实施中被使用。
请记住:直到20世纪70年代末,许多计算机都是读卡器和打印机接口。即使是“互动模式基础”,也经常使用打卡基本程序。由于许多人只是在加入IDE,他们的工作方式完全相同。包括最后需要“运行”卡。在这种情况下,人们可以简单地修正一张校正卡和另一张Run卡,重新运行一些变量;同样,在复杂的程序中,只需在运行之前添加校正的卡片行就足以编辑问题,而无需花费宝贵的时间找到错误的卡片。
答案 13 :(得分:0)
我喜欢Futurama上的机器人教堂,墙上写着像
这样的东西10 SIN
20 GOTO HELL
在Speccy上,您无法编辑没有行号的行。
答案 14 :(得分:0)
配对时我发现它们非常有用。当我的配对有键盘时,我不必指向一条线,我可以说,“在第74行,不应该真的是getMoreBeer()?”
答案 15 :(得分:-1)
DOS的原始编辑器是一个名为edlin的精彩实用程序。您只能编辑一行。为了让生活在BASIC的许多版本中更加有趣,您可以按顺序输入行,第10行,第20行,第30行,第25行,第5行,执行将按行号而不是按照出现的顺序执行。