为什么BASIC有编号线?

时间:2010-03-12 20:02:12

标签: programming-languages basic

  

可能重复:
  Why did we bother with line numbers at all?

我很好奇为什么BASIC编程语言的早期版本具有如下的行编号:

42 PRINT "Hello world!"

当时的文本编辑没有行号?

编辑:是的,我知道它们用于GOTO,但为什么呢?我的意思是标签的计算成本太高了吗?

15 个答案:

答案 0 :(得分:26)

许多微型计算机在ROM中都有一个BASIC解释器,可以在启动时启动。问题是没有文本编辑器或文件系统可以说。您有一个交互式提示来完成所有事情。如果要插入一行代码,只需输入代码,从行号开始。它会将它插入到代码中的正确位置。 e.g:

>10 print "hello"
>30 goto 10
>20 print "world"
>list
10 PRINT "hello"
20 PRINT "world"
30 GOTO 10
>

(在该示例中>是BASIC提示符)

如果要删除一行,则输入类似ERASE 20的内容。 一些非常奇特的系统为您提供了一个行编辑器(即EDIT 10) 如果你没有计划你的行号并且用完了(如何在10到11之间插入一行?)某些系统给你一个RENUM命令,它会重新编号你的代码(并调整GOTOsGOSUBs适当的。)

欢乐时光!

答案 1 :(得分:9)

原始BASIC行编号实际上是该语言不可或缺的一部分,用于控制流程。

GOTO和GOSUB命令将占用该行,并将其用于控制​​流程。这是常见的(即使现在不鼓励)。

答案 2 :(得分:8)

它们被用作GOTO和GOSUB的标签

像这样:

10 PRINT "HELLO WORLD"
20 GOTO 10

某些早期BASIC版本中没有命名标签

如果您想在两个现有代码行之间插入一行,那么它们也是必需的,因为在早期,您没有全文编辑器。所有内容都必须在“交互式”翻译中输入。

所以如果你输入:

15 PRINT "AND THE UNIVERSE"

该计划将成为:

10 PRINT "HELLO WORLD"
15 PRINT "AND THE UNIVERSE"
20 GOTO 10

当你没有行号时,你可以运行一个“重新编号”工具来重新编号程序中的所有行,但是在Commodore 64和其他家用电脑的早期阶段,我们甚至没有,所以你必须手动重新编号。这就是为什么你必须在行号中留下10或更多的间隙,这样你就可以轻松地在它们之间添加行。

如果您想试用Commodore 64解释器,请查看用Flash编写的这个C64仿真器:http://codeazur.com.br/stuff/fc64_final/(无需安装)

答案 3 :(得分:7)

在BASIC中,行号表示序列。

此外,许多较旧的编辑器不是文件,而只是行(“行编辑”,例如ed, the standard editor)。通过这种方式对它们进行编号,您就知道您正在使用哪条线。

答案 4 :(得分:6)

当天所有语言都有序列号,一切都在穿孔卡片上。 每张卡有一行。 卡片组成了你的程序。

当您丢弃卡片时,您将它们放入使用这些序列号的卡片分类器中。

当然,它们被控制流构造引用。

答案 5 :(得分:6)

A simple google reveals what wikipedia has to say about it

  
    

在某些较旧的编程语言(如GW-BASIC)中,行号是语法的必需元素。[2]主要原因是当时大多数操作系统缺少交互式文本编辑器;由于程序员的界面通常仅限于行编辑器,因此行号提供了一种机制,通过该机制可以引用源代码中的特定行进行编辑,并且程序员可以通过该机制在特定点插入新行。行号还提供了一种方便的方法来区分要输入到程序中的代码和用户输入时立即执行的命令(没有行号)。

  

答案 6 :(得分:4)

在C64上,甚至没有真正的编辑器(至少内置)。要编辑程序的一部分,你可以执行类似LIST 100-200的操作,然后你只能编辑当前显示在屏幕上的那些行(不向上滚动!)

答案 7 :(得分:3)

它们是声明的标签,因此您可以GOTO行号。语句的数量不一定必须与文件中的物理行号匹配。

答案 8 :(得分:2)

行号用于控制流程。没有命名的子程序。例如,您必须使用GOSUB 60从第60行开始调用子例程。


在您的更新中,并非所有语言都有标签,但所有语言都有一行的行号。有一次,一切都是打卡。 BASIC是最早的交互式语言之一,您可以在其中实际输入内容并立即得到响应。行号仍然是当前的技术。

标签额外费用。您必须跟踪符号标签与其引用的代码或数据之间的相关性。但是如果每一行都有一个行号(如果所有控制流语句的传输总是引用一行的开头),那么你就不需要一个单独的符号表。

还要记住,原始的BASIC解释器不需要变量的符号表:有26个变量名为A-Z。有些是复杂的,有An-Zn。有些人非常喜欢并通过在变量之后添加“$”或“%”来添加字符串,整数和浮点之间的区别。但是不需要符号表。

答案 9 :(得分:1)

IIRC,行号主要用作GOTO和GOSUB语句的标签,因为在某些(大多数?)版本的BASIC中,没有办法标记一段代码。

答案 10 :(得分:1)

他们也被编辑使用 - 即你说:

edit 100

编辑第100行。

答案 11 :(得分:1)

正如其他人所指出的那样,这些行号被用作子程序的一部分。

当然,有一个原因是不再这样做了。想象一下,如果你在第10行说GOTO 20,然后意识到你需要在第10行之后再编写10行代码。突然之间,你正在粉碎20,所以你要么需要将你的子程序转移得更远(更高的数字)并改变你的GOTO值,或者你需要编写另一个在代码中跳得更远的子程序。

换句话说,它成了真正的意大利面条代码的噩梦,维护起来并不好玩。

答案 12 :(得分:1)

某些编辑器只有“覆盖”模式而没有“插入”模式。这使得编辑现有代码非常痛苦。通过添加该行号功能,您可以从文件中的任何位置修补现有代码:

100 PRINT "Broken Code"
200 PRINT "Foobar"
...
101 patch the broken code
102 patch more broken code

因为不必在文件中订购行号。

答案 13 :(得分:1)

它在许多实例中输入了命令行(或者在我的旧Commodore 64中输入)所以可能并不总是有文本编辑器,或者如果有的话,它是非常基本的。

此外,你需要做GOTO等,以及在其他人之间插入行。

即:

10 PRINT "HELLO"
20 GOTO 10
15 PRINT " WORLD"

它将进入逻辑10 15 20

答案 14 :(得分:1)

行号是该语言的一部分,在一些非常早期的行中,即使操作系统只是这些简单的行。你所拥有的只是一次操纵一条线。尝试使用1-4k程序文件编写会计系统,并按大小对其进行分段以完成工作。要编辑,您使用行号来说明您正在编辑的内容。所以,如果您输入:

10 PRINT "howdy"
20 GOTO 10
10 PRINT "WOOPS"
15 PRINT "MORE WOOPS"
20
RUN

你会得到:

WOOPS
MORE WHOOPS

空白20会有效地删除该行。