明确的行号和执行顺序
Explicit line numbers and execution order
GW-BASIC 和许多其他旧的 BASIC 方言,如 C64 BASIC 允许你做这样的事情:
20 PRINT "World"
10 PRINT "Hello"
这将在执行 RUN
command/statement 时产生以下输出:
Hello
World
LIST
command/statement 将列出程序:
10 PRINT "Hello"
20 PRINT "World"
换句话说,那些 BASIC 方言会自动重新排序执行以适应您使用的行号指定的顺序,而不管您最初 typed/saved 它们在另一个编辑器中的顺序(例如EDLIN.EXE)。然而,QuickBASIC 和 BASCOM2 未能做到这一点。
我能在网上找到的最旧的 QuickBASIC 版本是 QuickBASIC 2.0,它在那里不起作用,只是忽略行号以按照我编写的顺序打印内容(即 "World Hello")。
BASCOM2——我能找到的最古老的 MS/IBM BASIC 编译器——显然也不支持该功能,而是失败并出现错误(SQ = 乱序序列?):
0046 0006 10 PRINT "Hello"
^ SQ
50434 Bytes Available
50325 Bytes Free
0 Warning Error(s)
1 Severe Error(s)
虽然我当然明白行号有多频繁是多余的,但支持以显式行号顺序(20、10、30 => 10、20、30)而不是隐式行号顺序执行似乎是一个有用的功能(20, 10, 30 => 20, 10, 30).
有没有人知道为什么这个传统的 BASIC 行为被忽略了?
我很惊讶你找到的第一个 bascom 报告了一个错误。我曾经为 BASIC 使用过的所有编译器,而且我相信自 1982 年以来我已经使用了很多,它们使行号成为可选的并支持标签。我记得在我作为一名专业程序员的第一份工作中,我们设计了一个编译器预处理器,它通过用行号和 (gasp) GOTO 语句替换内容来仅插入正确 IF、ELSE IF 和 END IF 语句所需的行。
由于 MZ-Tools 插件,我今天仍然在我仍然支持的 VB6 会计应用程序中使用行号,它允许我通过单击按钮添加和删除我的方法和函数的行号。这让我可以在我所有的错误例程中使用 Erl(错误行号),也可以快速一键添加到我的所有方法和函数中,这让我可以精确定位任何错误发生的确切行。
我敢肯定编译器设计者认为行号只对解释器有用,也许第一个版本的 bascom 认为你会用解释器开发和测试,然后编译和分发可执行文件,然后也许后来的版本认为开发人员正在使用文本编辑器,尤其是带有他们自己的 IDE 的后来的版本,谁需要那里的行号?好吧,如果我们想要精确的错误报告,我们就会这样做!这是我喜欢 Java 和 Eclipse 的一件事。行号在那里,所以我可以确切地知道错误在哪里,但它们不会像在 BASIC 中那样妨碍(删除行号,add/remove 代码,替换行号)。
GW-BASIC 和许多其他旧的 BASIC 方言,如 C64 BASIC 允许你做这样的事情:
20 PRINT "World"
10 PRINT "Hello"
这将在执行 RUN
command/statement 时产生以下输出:
Hello
World
LIST
command/statement 将列出程序:
10 PRINT "Hello"
20 PRINT "World"
换句话说,那些 BASIC 方言会自动重新排序执行以适应您使用的行号指定的顺序,而不管您最初 typed/saved 它们在另一个编辑器中的顺序(例如EDLIN.EXE)。然而,QuickBASIC 和 BASCOM2 未能做到这一点。
我能在网上找到的最旧的 QuickBASIC 版本是 QuickBASIC 2.0,它在那里不起作用,只是忽略行号以按照我编写的顺序打印内容(即 "World Hello")。
BASCOM2——我能找到的最古老的 MS/IBM BASIC 编译器——显然也不支持该功能,而是失败并出现错误(SQ = 乱序序列?):
0046 0006 10 PRINT "Hello"
^ SQ
50434 Bytes Available
50325 Bytes Free
0 Warning Error(s)
1 Severe Error(s)
虽然我当然明白行号有多频繁是多余的,但支持以显式行号顺序(20、10、30 => 10、20、30)而不是隐式行号顺序执行似乎是一个有用的功能(20, 10, 30 => 20, 10, 30).
有没有人知道为什么这个传统的 BASIC 行为被忽略了?
我很惊讶你找到的第一个 bascom 报告了一个错误。我曾经为 BASIC 使用过的所有编译器,而且我相信自 1982 年以来我已经使用了很多,它们使行号成为可选的并支持标签。我记得在我作为一名专业程序员的第一份工作中,我们设计了一个编译器预处理器,它通过用行号和 (gasp) GOTO 语句替换内容来仅插入正确 IF、ELSE IF 和 END IF 语句所需的行。
由于 MZ-Tools 插件,我今天仍然在我仍然支持的 VB6 会计应用程序中使用行号,它允许我通过单击按钮添加和删除我的方法和函数的行号。这让我可以在我所有的错误例程中使用 Erl(错误行号),也可以快速一键添加到我的所有方法和函数中,这让我可以精确定位任何错误发生的确切行。
我敢肯定编译器设计者认为行号只对解释器有用,也许第一个版本的 bascom 认为你会用解释器开发和测试,然后编译和分发可执行文件,然后也许后来的版本认为开发人员正在使用文本编辑器,尤其是带有他们自己的 IDE 的后来的版本,谁需要那里的行号?好吧,如果我们想要精确的错误报告,我们就会这样做!这是我喜欢 Java 和 Eclipse 的一件事。行号在那里,所以我可以确切地知道错误在哪里,但它们不会像在 BASIC 中那样妨碍(删除行号,add/remove 代码,替换行号)。