1

我正在尝试开设一个“复古计算”课程,并希望让人们有机会在家完成项目(没有携带 1980 年以来的 3kb 怪物)我听说 repl.it 有所有编程语言,它有 QuickBasic,我如何在线使用它?我在这里先向您的帮助表示感谢!

4

1 回答 1

2

你可以这样做(提示:搜索 QBasic;它与 QuickBASIC 共享语法),但你应该知道它有一些限制,因为它运行在不完整的 JavaScript 实现上。为了完整起见,我将复制原始博客文章中的信息:

什么有效

仅支持文本模式。实现了最常见的命令(足以运行半字节)。这些包括:

  • 子和函数
  • 数组
  • 用户类型
  • 共享变量
  • 循环
  • 从屏幕输入

什么不起作用

  • 不支持图形模式
  • 不允许与 IF/THEN 在同一行中使用任何语句
  • 不支持行号
  • 仅实现了 NIBBLES.BAS 使用的内置函数
  • 所有子例程和函数都必须使用 DECLARE 声明

这远未完成。在评论中,AC0KG 指出这 P=1-1不起作用。

简而言之,它还需要 50 或 100 个小时的工作,而且没有理由这样做。

我无法确定的一个警告是这样的声明INPUTLINE INPUT......它们似乎对我在 repl.it 上不起作用,而且我不知道还有什么地方可以找到托管的 qb.js。


我的推荐:FreeBASIC

如果可能的话,我会推荐FreeBASIC。它本质上是用 C++ 编码的现代重新实现(我最后知道),具有附加功能。

DEF SEG像语句和函数这样的旧 DOS 东西VARSEG不再适用,因为它是在 32 位平面地址空间而不是 16 位分段内存上运行的现代 BASIC 实现。我不确定旧SADD函数和新StrPtr函数之间的区别是什么,如果有的话,但想法是一样的:返回组成字符串的字节的地址。

您还可以禁用一些东西并使用#lang "qb"作为程序的第一行来保持 QB 兼容性,因为使用默认的“fb”方言时会有明显的差异,或者您可以接受新功能并避免使用“qb”方言,主要关注取而代之的是编程概念;这是你的选择。无论您选择哪种方言,基本的东西都应该可以正常工作:

DECLARE SUB collatz ()
DIM SHARED n AS INTEGER

INPUT "Enter a value for n: ", n
PRINT n
DO WHILE n <> 4
    collatz
    PRINT n
LOOP
PRINT 2
PRINT 1

SUB collatz
    IF n MOD 2 = 1 THEN
        n = 3 * n + 1
    ELSE
        n = n \ 2
    END IF
END SUB

关于QB64的一句话

有人可能会争辩说,有一个更兼容的转译器,称为 QB64(除了一些东西,比如DEF FN......),但如果你想要一个供学生使用的工具,我不推荐它。对于 Windows 用户来说,它的下载量很大,而且它的语法检查有时会有点差,以至于您可能会看到 QB 代码编译后只看到一条神秘的消息,例如“C++ 编译失败!请参阅 internals\temp\compile。 txt 了解详情”。简单来说,它是可用且高度兼容的,但它需要一些工作,比如 repl.it 使用的 qb.js 脚本。


另一种选择:DOSBox 和自动运行

您还可以找到一种在 DOSBox 之类的东西中运行 QB 4.5 的实际副本的方法,只需修改默认 DOSBox.conf(或其他任何名称)中的自动运行信息以自动启动 QB。然后只需将修改后的 DOSBox.conf 重新打包到一个不错的安装程序中,以便于分发(NSIS、Inno Setup 等)。这将提供最复古的体验,而不是像 FreeDOS 虚拟机这样的东西,因为您将处理 16-位分段存储器、VGA 等——当然都是模拟的。

于 2019-09-02T01:09:24.860 回答