最近有人在 ZHUJIMAO.COM 上提到了asmbb ,这是一个用汇编语言编写的论坛软件。
句号。
用汇编语言编写。论坛软件。
去看看吧——其实挺不错的。
我开玩笑说,我受到启发想用COBOL 编写论坛软件。我是认真的吗?嗯……也不完全是,但那会很有趣。
COBOL 的名声不太好——而且确实名不虚传!它冗长繁琐,简直到了自嘲的地步,而且编程理念非常僵化。它的设计采用自顶向下的方式(也就是所谓的“重力驱动设计”),虽然理论上你可以用它编写任何程序,但它真正的优势在于高速处理唱片。如果你有很多唱片在磁带 1 上,想要转换它们并放到磁带 2 上,COBOL 就是你的最佳选择。
我说它速度快,是因为多年来,IBM 在设计大型机时就考虑到了 COBOL 语言,大型机和 COBOL 之间存在着紧密的共生关系。COBOL 中,平均每个句子(尽管它冗长繁琐)只生成 4 条汇编指令,而且由于变量是预定义的,因此很容易对代码进行大幅优化。COBOL 的设计时代,内存是以千字节为单位的,其“记录批量处理”的理念使其精简高效。
我说它面向记录,是因为这是 COBOL 的专长。正如去年新 gcobol 项目(与 GnuCOBOL 类似)的公告中所述:
Cobol 拥有其他语言所不具备的独特优势:它是一种用于面向记录的 I/O 的编译型语言。
这听起来或许有些特殊,但并非如此。我认为,面向记录的 I/O 几乎适用于所有应用程序。然而,自从 C 语言出现以来,几乎所有应用程序都将 I/O 操作委托给了外部库,并采用了 Unix 字节流对“文件”的定义。
如果你写过 CGI Web 应用程序,你就知道我在说什么了。Cobol 通过将自由格式的运行时变量简化为编译时常量,消除了大量晦涩难懂的代码。
我不会建议任何人在 2023 年学习 COBOL。虽然目前仍有数亿行 COBOL 代码在使用,但如今已经没有人用 COBOL 编写新系统了。
但如果是老式系统……
为此,我搜索了关于如何在 Debian 11 上安装 GNU Cobol 的教程,但没有找到。它曾经在 sid 分支上,但后来被移除了。虽然市面上有一些第三方 .deb 包,但从头开始构建也相当简单。
首先,安装一些基础软件和依赖项:
apt-get -y install build-essential libgmp-dev libdb-dev libncurses-dev \ libcjson-dev libxml2-dev
接下来,下载 GNU COBOL 软件包并解压。该项目的页面位于SourceForge 上,但FTP 站点更直接。我这里使用的是 3.1.2 版本,但请检查是否有最新版本:
cd /usr/local/src wget https://ftp.gnu.org/gnu/gnucobol/gnucobol-3.1.2.tar.gz cd gnucobol-3.1 ./配置 制作 执行安装
这能满足你通常需要的一切:
配置:动态加载:系统 配置:使用 gettext 处理国际消息:是 配置:使用 fcntl 进行文件锁定:是 配置:使用多精度数学库:gmp 配置:使用 curses 库进行屏幕 I/O:ncursesw 配置:使用 Berkeley 数据库进行索引 I/O:是 配置:用于 XML I/O:libxml2 配置:用于 JSON I/O:cjson
如果您需要一些更特殊的选项或有特殊需求,请阅读 DEPENDENCIES 文件。
这里有一些代码可以尝试……是的,前面的空格很重要。这个程序可以缩短,但缩短代码并不是 COBOL 的思维方式!
鉴定部门。
程序 ID。低端样品。
作者:raindog308。
环境部门。
配置部分。
源计算机。
对象-计算机。
输入输出部分。
数据部门。
文件部分。
工作存储区。
程序部门。
0001-你好。
显示“LowEnd4Life!”。
停止奔跑。
结束低端样本程序。
请确保将 /usr/local/lib 添加到 LD_LIBRARY_PATH 中,因为默认情况下 COBOL 库(.so 文件)安装在此处。您可以将此路径添加到 .bash_profile 文件中:
export LD_LIBRARY_PATH=${LOAD_LIBRARY_PATH}:/usr/local/lib
然后编译并运行:
$ cobc -x lowend.cbl $ ./lowend LowEnd4Life! $