为什么我们打扰线号呢?

在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可用的第一个界面上,没有shiny的编辑器,甚至不像vi或emacs(或DOS编辑,赫)。 您只能在控制台上打印出您的程序,然后添加新行或replace它们,方法是首先input相应的行号。 您不能像现在习惯的那样通过“文件”(程序保存在内存中,尽pipe可以将副本保存在磁盘上)导航。

因此,行号不仅需要作为臭名昭着的GOTO的标签,而且确实需要告诉解释器你正在编辑的程序stream中的哪个位置。

在有VDT(video显示terminal)之类的东西之前,我们使用穿孔卡编程的老人。 打卡预留72-80列序号 – 如果你丢掉了你的卡片组,并且他们全都出了故障,你可以把卡组放在一个卡片分类器中,根据这些序列号码来排列卡片。 在许多方面,BASIC行号与这些序号相似。

BASIC世界的另一个优势是在过去BASIC被解释为运行。 对分支机构使用标签而不是顺序线路号码需要第一次拿到所有的标签及其位置,就像使用行号一样,解释者知道是否需要开始向前或向后扫描目的地。

它有一个隆隆的历史。

行编号实际上来自达特茅斯BASIC,这是BASIC编程语言的原始版本,并且是所谓的达特茅斯时间共享系统的组成部分。 DTSS有一个基本的IDE,这只不过是一个交互式的命令行。

所以在这个“IDE”中键入的每一行,并以行号开始,被添加到程序中,用相同的数字replace之前存储的行; 其他任何东西都被认为是DTSS命令并立即执行。

当天你还没有像emacs或vi这样的二维编辑器。 你所有的只是命令行。

您的程序存储在内存中,您可以input单行命令来编辑单行。

如果你是一个Unix上帝,你可以用ed或者其他东西来做,但是对于C-64,VIC-20或TRS-80上的BASIC,你只需要覆盖这条线。

所以会议可能看起来像:

 $10 PRINT "Hellow World" $20 GOTO 10 $10 PRINT "Hello World" 

现在程序会正常工作。

一些老的大型机甚至有没有屏幕的线路terminal。 你的整个会议是用墨水纸上 打印的!

“谁?” 将是发明者,Kemeney和Kurtz。

阅读答复后,我查阅了“达特茅斯BASIC”的维基百科条目 ,并感到惊讶

第一个编译器是在分时系统准备好之前生成的。 被称为CardBASIC,它是为基于标准读卡器的批处理系统而devise的。

所以,看起来保罗·汤姆林“得到广场”。

它们起源于FORTRAN,BASIC源于此。 但是,在FORTRAN中,只有其他行引用的行(如GOTO目标)需要数字。 在BASIC中,他们有第二次使用,这是允许编辑特定的行。

Paul Tomblin的答案是最全面的,但我很惊讶,没有人提到BASIC项目最初目标的很大一部分是使用分时提供一个初学者友好的交互式环境。 (Kurtz和Kemeny关于“全民普及”的愿景在这方面远远领先于其时代。)

为实现这一目标而开发的BASIC系统采用了Teletype ASR-33(以及其他)打印terminal。 连接到具有分时function的操作系统时,这些操作系统允许在交互模式下编辑和运行BASIC程序(与使用打孔卡不同),但不能使用光标寻址。 行号是初学者友好的方式,既指定程序语句的顺序,又允许在没有屏幕编辑器的情况下进行明确的编辑。 维基百科的“行编辑器”条目进一步解释说,任何曾经尝试使用行编辑器(如Un * x'ed)的人都可以理解为什么应该感谢Kurtz和Kemeny让初学者不得不去学习那些神秘的东西以这种方式编辑文本所需的命令序列。

早在五十年代,高级编程语言刚刚起步时,就没有terminal,没有编辑器,没有监视器(是的,没有监视器),只有卡片机和读卡器(用于将卡片的内容写入和读取电脑)和打印机(自然是打印结果)。 后来,磁带被引入,但这是另一回事。

每张打卡都有自己的号码。 这有几个原因。 从单纯地保持秩序,到确定执行的顺序。 每张卡片都是一行代码(按照今天的条款)。 因为在那个时候,没有像if..then..else这样的结构,或者类似的任何变体,必须以某种方式确定执行的顺序。 所以介绍了GOTO语句。 他们是循环的基础。 “意大利面代码”一词也来自这个时间段,因为写得不好的代码相对难以遵循,就像一个盘子里的意大利面:)

我想这是来自汇编程序,每个指令的地址可能会跳转到另一条指令。

此外,第一台计算机没有太多的内存,并且存储一个行号只需要两个字节(如果正确的话)。 写标签需要更多的内存,首先在定义标签的位置,然后是任何跳转命令。

最后在美好的日子里,没有任何奇特的编辑。 唯一的“编辑器”是一个简单的命令行界面,它将所有以数字作为程序组成部分的开始以及其他一切作为立即执行的命令进行处理。 最突出的例子应该是Commodore 64。

Basic的较新的方言不再需要行号。

在Basic中,如果你没有行号,你怎样才能执行一个

 GOTO 10 

这是跳线的一种方式,这是20多年前发现的一个好方法!

今天,线条帮助我们捕捉错误/exception,因为debugging引擎会向我们发送xxx行的exception消息,并立即跳转到该消息!

想像一个没有行号的世界……一个记者如何能够不用线路付款?

“现在你知道这本小说了,你必须写一个不超过50行的摘要”

记住这一点? 即使在学校,我们也了解行号!

如果没有发明,有人已经发明了,所以我们可以很好地使用它:)

并非所有版本的BASIC都需要行号。 例如,QBasic支持标签。 然后你可以用GOTO跳转到那些(暂时忽略Dijkstra的“Go To Statement Considered Harmful”)。

答案已经在上面了。 保罗·汤姆林(Pau​​l Tomblin)写到了(对zabzonk有个警告)。

实际上,我认为任何没有提及“打卡”的答案都是不完整的,如果没有提到打卡或FORTRAN,那就错了。 我可以说这是完全正确的,因为我的父母都定期使用打卡(他们从FORTRAN 66和77开始),然后在80年代迁移到Basic和COBOL。

在早期,大部分节目都是用打卡卡input的。 打卡通常按顺序进行,通常每卡一条指令,标签(JMP / JSR目标)是单独的指令卡。

编辑你的程序,你更换了卡。

稍后的实现在该行的右端添加了一个可选的序列号,以便当/如果他们不按顺序,他们可以被自动阅读器重新sorting。

Fortran在左侧(col 1-5)使用了两个数字目标标签,并在右侧(73-80)留下了一个保留块以用于序列或注释。

当最初编写BASIC时,决定将序号移到左边,进入FORTRAN的标签字段,并且允许覆盖前面的卡的内存占用…作为编辑模式。 这是为交互式开发环境而devise的,但是也适用于卡片。 由于各种原因,在一些早期的实现中使用卡。

请记住:在七十年代后期,许多计算机都是读卡器和打印机接口。 即使是交互模式的基础知识也是可用的,卡片式的基本程序经常被使用。 由于许多人只是进入IDE,他们的工作方式完全相同。 包括最后需要一个“运行”卡。 在这种情况下,可以简单地使用修正卡和另一张润滑卡重新运行一些variables的variables; 同样,在复杂的程序中,只需在运行之前添加一张正确的卡片就足以编辑问题,而不必花费宝贵的时间find错误的卡片本身。

我喜欢Futurama上的机器人教堂,墙上写着类似的东西

 10 SIN 20 GOTO HELL 

在Speccy上,你不能编辑没有行号的行。

配对时,我发现他们非常有帮助。 当我的键盘有键盘时,我不必指出一行,我只能说,“在74行,不应该真的是getMoreBeer()?”

DOS的原始编辑器是一个叫edlin的美妙工具。 你只能编辑一行。 为了使许多版本的BASIC中的生活更加有趣,您可以按顺序input行,第10行,第20行,第30行,第25行,第5行,执行将按行号排列,而不是按出现顺序排列。

Interesting Posts