我是认真的吗?如何在 Debian 11 上安装 GnuCOBOL? 我是认真的吗?如何在 Debian 11 上安装 GnuCOBOL?

我是认真的吗?如何在 Debian 11 上安装 GnuCOBOL?

COBOL 代码最近有人在 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!
$