65.9K
CodeProject 正在变化。 阅读更多。
Home

BASIC 尚未过时。是时候消除关于 Basic 的迷思了。

starIconstarIconstarIconstarIconstarIcon

5.00/5 (25投票s)

2022 年 11 月 16 日

CPOL

19分钟阅读

viewsIcon

37642

更多关于 BASIC 以及用该语言可以完成的事情

我从 1975 年就开始用 BASIC 语言编程,我认为是时候解释一下 Basic 究竟是什么,以及它又不是什么。几十年来,Basic 一直因关于它的迷思而受到诽谤。还有谁比一个几十年来一直在专业领域使用 Basic 的程序员更能解释 Basic 究竟是什么呢?请跟随我,听我讲述我如何了解 Basic,我尝试过的各种 Basic 语言,以及我多年来用 Basic 取得的成就。

我第一次接触 Basic

早在 1970 年代中期,我在高中上了一门高等数学课。那时我们的课堂上没有电脑,但我数学老师安排了一个与附近大学的协议,使用一个终端(仅键盘/打印机,没有屏幕),通过调制解调器连接到附近的大学主机。他教了我们 BASIC,学起来很容易,但允许我们通过编程来运用在微积分课上学到的知识。这在当时是一次了不起的体验。那时没有手机。没有平板电脑。没有便宜的电脑。那是大型机时代,而 BASIC 就存在于其中。

在大学里,我上了一门 Fortran 编程课。将程序打在打孔卡(上面有小孔)上,然后将一叠卡片带到计算机部门运行,并希望很快就能运行你的应用程序并得到打印输出,这至少可以用“原始”来形容。但一些事情发生在一门不起眼的名为 BASIC 的语言上。分时系统被用来允许数百个计算机终端(带有绿屏)同时与一台大型机通信,你可以输入你的程序并立即得到结果。这太棒了!BASIC 使所有其他语言相形见绌,因为它使用了解释器和分时系统。编写代码时立即获得结果,让人真正享受编程。BASIC 不是儿童编程语言。它是一种强大的工具,被交到了大学生手中。它做到了少数甚至没有其他语言能做到的事情。它使编程富有成效、快速且身临其境。

家用电脑时代

在 20 世纪 80 年代,所谓的家用电脑出现了。例如 Commodore 64、Atari 400/800/XL、Texas Instruments TI/994A、Sinclair、Timex 等,它们并不便宜。这些电脑不是儿童玩具。它们是给老派黑客用的。是给创造者用的。是那些对技术充满热情的人用的,当时技术还处于萌芽阶段。

对我来说,它们太贵了买不起,但随着时间的推移,新电脑涌现,这些家用电脑的价格也随之下降。一旦我在一家当地百货商店的清仓区找到一台,我就买下了我的第一台家用电脑,一台 TI99/4A。我又开始为了好玩而编程。后来,我终于买了一台 Atari 400 和一台 Commodore 64。我对编程的兴奋感被重新点燃了。

Basic 并不仅仅是解释器

今天的一个迷思是,Basic 一直是面向儿童使用的缓慢的解释器。在 20 世纪 80 年代,Commodore 64 将计算带入了家庭,但许多企业和创作者使用 C64 完成了各种各样的事情。C64 上完成了真正的工作。BASIC 只是 C64 的一个开始。许多 BASIC 用户认识到需要更高的性能,所以他们经常学习 6502 机器语言。Commodore Basic 鼓励学习底层硬件,可能比今天的大多数编程语言都要好。C64 上关于计算机硬件低层的书籍为许多人打开了一个新世界。BASIC 有 PEEKPOKE 命令,允许直接访问硬件。通过破解系统并添加新命令,可以扩展 ROM 中的 BASIC 解释器。我学到的第一件事之一就是 6502 机器语言,这样我就可以扩展 Basic 语言。C64 BASIC 有命令(SYS、USR)可以从 BASIC 程序调用机器语言例程。Basic 没有回避硬件,而是拥抱了它。

然后我发现了Abacus BASIC 语言编译器。现在我可以用 BASIC 编写代码,然后将其直接编译成机器语言,速度提升了 10 倍以上。是的,当时的 BASIC 程序员就有编译器。Abacus BASIC 也对 BASIC 语言进行了改进。

然后我使用 Abacus 编译器编写了我自己的编译器,用于编写更快的程序。我的编译器是 basic 的一个子集。一个非常有限的命令集,但它教会了我如何编写编译器,如何生成机器码,以及如何在 1MHz(CPU)的计算机上获得最大的性能。我写了我的第一个家庭友好型视频游戏,并卖给了计算机杂志(Compute Gazette),该游戏刊登在 1987 年 10 月号上。这款小游戏,是用我使用 Abacus Basic 编译器编写的、用 Basic 语言子集编写的,当时为我赚了高达 1500 美元。

Basic 与商业世界(CPM 和 IBM Dos 时代)

在 20 世纪 80 年代末,中小型企业开始看到使用计算机的好处。那时与现在不同。那时很少有现成的软件。要获得一个非常有用的软件包,你必须雇佣一名程序员。很少有中小型企业能负担得起雇佣程序员为他们编写定制软件。那时没有像现在这样的互联网,你可以下载开源或免费软件。在 IBM 将 PC 推向主流之前,有 CPM 的世界。雇佣程序员为你编写软件已经够糟糕了,但想象一下用 C 或 Fortran 编写这类软件,成本将是天文数字。但是,一门正在发展的语言,名为 BASIC,挺身而出!在许多 CPM 系统上都能找到 BASIC 解释器。它允许新的菜鸟程序员快速编写和测试软件。这就是我职业生涯的开始。作为一名自学成才的程序员,我找到了本地的定制编程工作。我使用 BASIC 编写了许多应用程序。此外,当 PCDOS 出现并推出自己的 BASIC 版本时,我继续编写商业应用程序。在那些日子里,在 CPM 和 IBM 兼容机之间,我为企业编写了许多现实世界的应用程序,例如视频租赁店(账目)、家具店(账目),甚至为当地一家工厂的质量控制部门编写,所有这些都使用 BASIC。仅作为一个有趣的信息,你知道 IBM 的 BASIC 版本叫做 Basica,代表 IBM Advanced Basic 吗?“BASIC 是一种高级语言”的想法对大多数人来说可能很可笑,但是的,BASIC 确实有持续发展的历史。它随着时间推移而成长和改变。是的,Basic 确实会随着时间从其他语言中借鉴强大的结构,并加入自己的特色(意思是使其尽可能易于使用)。

BASIC 程序员渴望编译器

随着 PC 兼容机的风靡,Microsoft 的 MSDOS 成为时尚的操作系统。它也有自己的 BASIC。最终,微软创建了 QuickBasic 编译器。QuickBasic 的独特之处在于,你不需要编译程序就可以运行和测试它。它使用一种解释器来立即运行你的应用程序,但你也可以稍后编译它,这样它就可以受益于原生编译代码的完整性能。它是两全其美。由于其独特的设计,QuickBasic 成为了需要快速开发应用程序但仍能生产高性能现代应用程序的菜鸟专业程序员最喜欢的编程语言。QuickBasic 之所以如此重要的主要原因是该语言易于使用,但又能生成高质量的软件,性能良好,并且可能比其他语言开发时间缩短一半。当时微软的巅峰产品是其 Professional Basic。是的,你没看错,是面向专业人士的 Basic。那是 PDS 7.1,即微软的专业开发系统。我曾使用 QuickBasic,然后是 PDS 7.1,为本地各种业务的客户开发软件,例如制造业的质量控制、机加工车间作业跟踪、木材厂应收账款、治安部门、变速器维修店和 PBX 跟踪系统。所有这些都是真实世界的应用程序。BASIC 作为编译器,使我能够像当时使用任何其他编程语言一样编写软件。你可能注意到,到目前为止,我一直将 BASIC 用大写字母拼写。那是因为这个名字是“Beginners’ All-purpose Symbolic Instruction Code”的缩写。从现在开始,正确的拼写方式是 Basic(不是全大写)。为什么?因为从那时起,Basic 就成了一种专业的编程语言。微软的 PDS 7.1 甚至允许你链接用其他语言编写的模块。我曾经用汇编语言编写一些低级例程模块,然后将它们链接到我的 Basic 应用程序中。Basic 现在是一种拥有许多现代结构的专业编程语言,例如 Type、Subroutine、Function 等。

Basic 与 Windows

如果不是 Windows,Basic 作为一种专业的编程语言可能会继续繁荣和发展。Windows 1.0 给 Basic 及其未来带来了麻烦。许多 DOS Basic 程序员会逐渐感受到将他们的应用程序从 DOS 迁移到 Windows 的压力,而这种转变实际上让一些人付出了太多。就连生产编程语言的公司也会感受到压力,有些在为 Windows 创建 Basic 时会失败,有些则会成功。从 DOS 迁移到 Windows 对 Basic 程序员来说充满挑战,主要有两个原因。第一个是 DOS 通常是基于文本的用户界面(虽然存在一些图形,但每个软件程序都必须定义自己的图形引擎,所以并不容易)。Windows 带来了图形用户界面(GUI)环境的变化,引入了事件驱动编程。当时的 Windows 还不是面向对象的,仍然是过程式的,但由于 Windows 的事件(在 API 术语中实际上是消息驱动)编码风格,它的代码流程发生了显著变化。简单来说,Windows 对于习惯于严格线性过程式编码风格的程序员来说是令人困惑的。许多公司都试图为 Windows 创建 Basic,但许多都未能成功,因为 Windows 的内部工作方式令人费解。DOS Basic 程序员常常因为这些工具而感到过于困惑,放弃了它们,而不是花很长时间学习一种全新的编码风格。简而言之,你无法在短时间内将你的 DOS Basic 应用程序移植到 Windows Basic。这意味着需要从头开始完全重写。最初,Windows 的大多数应用程序都是用 C(而不是 C++)编写的。编写 Windows 应用程序非常具有挑战性。随着时间的推移,Basic 走进了 Windows,但许多 DOS Basic 程序员未能成功转型。Windows 最初给 Basic 编程语言社区带来了沉重打击。那么我怎么样呢?

磕磕绊绊地选择 Basic

让我们先从我尝试过但就是无法高效使用的 Windows Basic 开始。我确实延长了我用 PDS 7.1 编写的 DOS Basic 应用程序的生命周期。实际上,我 1990 年代编写的一个 DOS 应用程序直到去年还在一家公司使用。是的,我的某些 DOS Basic 应用程序使用了几十年。但我确实接触过任何我能找到的 Windows 上的 BASIC 编程语言。其中一个是Computer Associates 的 CA_Realizer。另一个是GFA_Basic。它们都是对 Windows Basic 的优秀尝试。但都没有成功,所以显然它们缺少了什么。我从未精通过它们中的任何一个。让引起我注意的是Microsoft 的 Visual Basic 1.0。我花了一些时间才适应,但最终我能够高效地使用它。Visual Basic 1.0 的唯一问题是它是一个 pcode 编译器。虽然我一直认为微软是从头开始构建 Visual Basic 的,但直到后来我才得知,他们只是购买了别人的软件的版权并将其变成了 Visual Basic。有关创建后来成为 Visual Basic 的 Allen Cooper 的更多信息,请阅读此文。Visual Basic 迅速流行起来,不仅仅因为它是一种 Basic,更是因为它独特的拖放环境。可以说,Basic 只是锦上添花。Basic 语言使其比 C 等语言更容易编码,但拖放环境在当时确实令人惊叹。结合起来,它成为 Windows 上最受欢迎的编程语言之一。但 Visual Basic 1.0 在某些方面让 20 世纪 80 年代和 90 年代初的专业 Basic 程序员感到失望。因为它是一个 pcode 编译器,性能顶多算差。与用 C 编写的所谓“真实程序”相比,它们很少能与之匹敌。微软在 DOS 时代是认真地想让 Basic 成为一种专业语言的,但在 Windows 早期,Visual Basic 成了一种“业余爱好”的编程语言。我们失去了直接编译成原生代码的能力,我们注意到了这一点。Visual Basic 1.0 既是一个巨大的飞跃,也是几个倒退。我真的不认为微软预料到 Visual Basic 会成为它最终成为的大热门。一个明智的决定是支持 ActiveX 控件(以及后来的 OCX 控件),这使得各种第三方公司能够为 Visual Basic 构建各种附加组件(很可能大多数是用 C 编写的,而不是 Visual Basic)我真心相信这种第三方支持才是真正将 Visual Basic 从业余世界推向专业世界的关键。人们使用 Visual Basic 编写了真实的商业软件。由于许多软件开发人员使用 Visual Basic 编写商业质量的软件,微软别无选择,只能继续改进它,使其更加“专业”。最终,它成为了一个真正的原生代码编译器,但根据我所了解的,它需要使用 C 编译器后端来实现。从我的角度和事后看来,我感觉微软并没有真正认真对待 Visual Basic 作为一个专业的编程语言。是的,它很受欢迎。是的,微软让它变得更好。但真正的问题是,为什么 Basic 从来没有被视为从根本上为专业人士构建的语言呢?是的,尽管取得了成功,Visual Basic 对程序员如何看待 Basic 语言造成了巨大打击。随着时间的推移,无论 Visual Basic 变得多么好,它从来没有被视为一种专业的编程语言。在 DOS 时代,Basic 是一种专业的编程语言,那么为什么在 Windows 年代不行呢?

其他一些 Basic 如何发展?

需要指出的是,无论编程界如何努力将 Basic 淘汰为过时,它仍然以某种形式蓬勃发展。如今有许多值得注意且值得关注的当前“独立”版本的 Basic。举几个例子

  • Purebasic(付费软件,跨平台)非常流行
  • Freebasic(免费)
  • ThinBasic(免费)
  • Oxygen(免费,32 位和 64 位)
  • Liberty Basic(付费)
  • AutoIt
  • Basic-256
  • Basic for QT
  • BBC Basic
  • Creative Basic
  • GLBasic
  • True Basic(由 Basic 的原始创建者创建)
  • XBasic

这并不是全部,只是我熟悉的。我强烈推荐查看 PureBasic、Freebasic、ThinBasic、Oxygen、Creative Basic 和 GLBasic,但这只是因为我对它们及其优点比较熟悉。我现在想讨论另外两种更专业的当前 Basic 语言。第一种是 XOJO。XOJO 最初叫做 RealBasic,后来改了产品名称。可惜,XOJO 觉得有必要弱化 Basic 部分。XOJO 仍然是一种 Basic 语言。我不知道他们这样做的真正原因,但人们可能会想,在编程界对“Basic”这个词的所有负面看法是否促成了这种改变。XOJO 是一种非常强大、专业的 Basic 编程语言,与经典的 Visual Basic 类似。它有一个强大的拖放环境,而且是跨平台的。甚至还有一个版本可以为 Raspberry PI 生成应用程序。最后我想讨论的 Basic 语言是我过去 20 年来实际使用的 Basic 编程语言。

一种差点两次夭折的专业 BASIC

这种 Basic 语言叫做 PowerBasic。必须了解这种语言的历史才能更好地欣赏它。在 DOS 时代的 Microsoft QuickBasic 和 Borland International TurboBasic 出现之前,有一位名叫 Bob Zale 的程序员。他创建了一个名为 Basic/Z 的编译器。微软拥有 DOS 时代最受欢迎的专业人士 Basic 编译器,而 Borland International 则在编程语言市场与微软竞争。Borland 有非常受欢迎的 Turbo Pascal,微软注意到了这一点。Borland 想在 Turbo Pascal 和 Turbo C 的 Turbo 系列中加入一种 Basic。他们选择收购 Bob Zale 的编译器并将其更名为 Turbo Basic。Turbo Basic 当时确实给了微软“相当大的压力”。它是一款专业级的编译器,就像微软的产品一样。不幸的是,Borland 放弃了编程语言。他们将他们的大部分语言卖给了 Embarcadero,这些语言至今仍然存在并被专业使用。但 Turbo Basic 被卖回给了它的创建者 Bob Zale。他将其更名为 Powerbasic。因此,TurboBasic 几乎消失了,但得益于其创建者,它得以延续。Powerbasic 的问题不在于产品本身,而是它从一家资金雄厚的大公司易手给了一个资源少得多的小型公司。后来,从 DOS 到 Windows 的跳跃阻碍了这次转型。Powerbasic 是一款了不起的专业级 Basic 编译器。PowerBasic 的性能可以与当时的任何 C 编译器媲美。Windows 造成了一个问题,可能再次导致这种编程语言消失,但 Bob Zale 找到了方法进行了一次小小的向 Windows 的跳转,但并非完全跳转。为 Windows 创建编程语言的问题不在于编程语言本身,而在于如何支持 Windows 中的所有 GUI 功能。Powerbasic(公司)最初不像微软那样拥有资源来创建拖放式可视化设计器,如 Visual Basic。相信我,编写拖放式可视化设计环境(我做过)是非常困难的。因此,Powerbasic 利用其优势来确定 Windows 版本编译器的市场。Powerbasic 本身(编译器部分)是用汇编语言编写的。它生成的原生代码与任何 C 编译器一样好。他们将一些 Windows API 头文件转换成 Powerbasic 语法,以便可以访问 Windows API。PowerBasic 可以编译成 EXE 或 DLL,所以PowerBasic 将自己定位为 Visual Basic 的附加组件(在 VB 成为原生代码编译器之前的早期版本)。现在你可以用 Basic 为你的 Visual Basic 应用程序(或其他任何语言)编写 DLL。性能与 C 相当。这时我才第一次接触到 PowerBasic 编程语言。该产品名为 PowerBasic DLL 编译器。我当时正在使用 Visual Basic 1.0 和 2.0,并发现 PowerBasic 非常令人兴奋。我可以用 Basic 编写像任何 C 程序员一样的代码,而且运行速度很快。起初,我用它来编写供 Visual Basic 使用的 DLL。后来,我用它为名为 MediaForge 的多媒体工具编写了一个 DLL 附加组件。但我想要用它做更多的事情。这意味着我必须学会如何处理 Windows API。这花了我一些时间,因为使用 Windows API 进行编码更像是 C 程序员的领域。但原生代码编译器和 Windows API 的原始强大功能简直太棒了!然而,随着时间的推移,有些事情几乎再次终结了 Powerbasic 的实用性。微软放弃了经典的 Visual Basic,转而支持 VB dot.net。经典 VB 逐渐失去了程序员的青睐,那么一款定位为 VB DLL 编译器的产品会怎样?它必须被重新发明。幸运的是,对于 Powerbasic 来说,这来自于其庞大的用户社区。他们中有程序员开发了可视化设计器、GUI 框架、自定义控件等。现在 PowerBasic 可以独立开发完整的应用程序。从所有这些兴奋中,甚至 Powerbasic 公司也承担了重新发明自己的任务。他们创建了自己的可视化设计器(PB Forms),并将产品更名为 PowerBasic for Windows。尽管是一家资源很少的小公司,它仍然在 Windows 世界中蓬勃发展。可悲的是,2012 年 Turbo Basic 和 Powerbasic 的创建者 Bob Zale 去世了。这一次,这种专业的编程语言几乎随他一同逝去。用户社区一直将 PowerBasic 维持下去,直到最终被卖给其当前所有者 Drake Software。是的,专业级的 Basic 仍然活着。XOJO 的 Basic 版本在不断发展。他们似乎是一家拥有良好用户群的强大公司。Powerbasic 尽管面临一个又一个挑战,仍然活着,而且它可能是今天少数用汇编语言编写的专业级编译器之一。Basic 在 20 世纪 80 年代成为一种专业级工具。尽管面临挑战,它至今仍然是一种专业级工具。新的 Basic 语言不断涌现。在微控制器嵌入式领域,Basic 仍然很受欢迎。Basic 的长久生命力表明它是一种真正的专业编程语言,而不仅仅是业余程序员的工具。如果我希望从本文中实现一件事,那就是 Basic 不仅仍然活着,而且它应该成为未来任何下一代编程语言中一个值得认真考虑的语法。

注意 我在这里没有详细讨论我用 Powerbasic 创建了什么软件,但可以说我已经学会了如何用它来突破 WIN32 API 的限制。我用它设计了一个功能齐全的 GUI 框架以及一个可视化设计器。这里只是我用 Powerbasic 在我编写的一些小型简单测试应用程序中能做什么的一个样本。它看起来可能不多,但可能会让你感到惊讶。

使用我的 GUI 框架的 WIN32 测试应用程序

我提交的 CodeProject Intel 大赛应用程序

© . All rights reserved.