发布于 2026-01-06 1 阅读
0

你应该了解的 5 种旧编程语言,DEV 的全球展示与讲述挑战赛由 Mux 呈现:展示你的项目!

你应该了解的 5 种古老编程语言

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

这篇文章最初发布在领英上


有些人认为旧编程语言丑陋、过时、老旧且毫无用处。但对我来说,它们恰恰相反……是等待被重新发现的瑰宝。

一门古老的编程语言能教会你很多东西,也肯定能让你成为更优秀的开发者。如今人们习惯于语言提供的一切,但这其实并不好,因为它会迫使你停止思考。古老的编程语言缺少许多现代语言所具备的功能,但这并不意味着它们不够强大,因为它们仍然提供了所有必要的工具,让你能够自己实现各种功能。

为了说明这些编程是如何工作的,我们将使用一个名为“斐波那契列表”的非常基本的应用程序,它将简单地输出所请求的斐波那契数的列表,例如,如果我们请求 5,它应该返回 0、1、1、2、3、5。

让我们从我所知的最古老的编程语言开始……

FORTRAN(公式转换器 - 1957)

FORTRAN LOGO

一种通用的命令式编程语言,主要适用于数值计算和科学计算。

program fibonacci

  implicit none
  integer :: a=0, b=1, num
  write(*,'(a)',advance="no") "Enter a number: "
  read(*,*) num
  write(*,*) trim(fib(num, a, b))

contains

recursive function fib(num, a, b) result(fibo)

  integer, intent(in) :: num, a, b
  integer :: ab
  character(1000) :: a_s, b_s, ab_s
  character(1000) :: fibo

  if(a > 0 .and. num > 1) then
    ab = a + b
    write(ab_s, '(I0)') ab
    fibo = trim(ab_s) // " " // fib(num - 1, ab, a)
  else if (a == 0) then
    ab = a + b
    write(a_s, '(I0)') a
    write(b_s, '(I0)') b
    write(ab_s, '(I0)') ab
    fibo = trim(a_s) // " " // trim(b_s) // " " // 
           trim(ab_s) // " " // trim(fib(num - 1, ab, b))
  else
    fibo = ""
  end if

  return
end function fib

end program fibonacci
Enter fullscreen mode Exit fullscreen mode

我们来看看……程序必须用 `<program>` 和 `<end program>` 标签括起来。变量在声明时需要指定类型。递归函数必须标记为 `<recursive>`。字符串变量的长度是固定的。`//` 用于连接字符串。整数和字符可以直接连接,无需任何转换。由于字符串长度固定,我们需要进行大量的修剪以避免占用额外的空间。函数可以返回零个、一个或多个值。

为了编译这个程序……我使用了 Linux 自带的 GFORTRAN,但也可以通过执行“sudo apt-get install gfortran”命令轻松安装。由于它是一个 GNU 应用程序……它并不是真正的 Fortran 编译器……它是用 C 语言编写的。

GFORTRAN -WALL -C "NAME_OF_FILE.F95"
GFORTRAN -WALL -O "NAME_OF_EXEC" "NAME_OF_FILE.F95"
Enter fullscreen mode Exit fullscreen mode

FORTRAN 执行程序

您可以在这里阅读我的 FORTRAN 入门介绍

COBOL(通用对象商业语言 - 1959 年)

Cobol 标志

一种编译型的、类似英语的计算机编程语言,专为商业用途而设计。

它是命令式的、程序化的,并且自 2002 年以来,它是面向对象的。

IDENTIFICATION DIVISION.
PROGRAM-ID. fibonacci.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    01 USER-NUMBER      PIC 9(3).
    01 A                PIC 9(3).
    01 B                PIC 9(3).
    01 AB               PIC 9(3).
    01 COUNTER          PIC 9(3).   
    01 COUNTER-SPACES   PIC 9(3).

PROCEDURE DIVISION.
PROGRAM-BEGIN.
    MOVE 0 TO A.
    MOVE 1 TO B.
    DISPLAY "Enter a number: ".
    ACCEPT USER-NUMBER.
    PERFORM GET-FIBO WITH TEST AFTER UNTIL USER-NUMBER = 1.
    DISPLAY " ".

PROGRAM-DONE.
STOP RUN.

GET-FIBO.
    IF A = 0
        COMPUTE AB = A + B
        INSPECT AB TALLYING COUNTER FOR CHARACTERS
        INSPECT AB TALLYING COUNTER-SPACES FOR LEADING ZEROS
        COMPUTE COUNTER-SPACES = COUNTER-SPACES - COUNTER
        DISPLAY 0 " " 1 " " AB(COUNTER:COUNTER-SPACES) WITH NO ADVANCING
        COMPUTE USER-NUMBER = USER-NUMBER - 1
        MOVE AB TO A
    ELSE
        MOVE 0 TO COUNTER
        MOVE 0 TO COUNTER-SPACES        
        COMPUTE AB = A + B
        INSPECT AB TALLYING COUNTER FOR CHARACTERS
        INSPECT AB TALLYING COUNTER-SPACES FOR LEADING ZEROS
        IF COUNTER-SPACES = 0
            DISPLAY " " AB WITH NO ADVANCING
        END-IF
        IF COUNTER-SPACES = 1
            COMPUTE COUNTER = COUNTER - COUNTER-SPACES
            DISPLAY " " AB(COUNTER:COUNTER) WITH NO ADVANCING
        END-IF
        IF COUNTER-SPACES = 2
            COMPUTE COUNTER-SPACES = COUNTER-SPACES - COUNTER
            DISPLAY " " AB(COUNTER:COUNTER-SPACES) WITH NO ADVANCING
        END-IF
        COMPUTE USER-NUMBER = USER-NUMBER - 1
        MOVE A TO B
        MOVE AB TO A
    END-IF.
Enter fullscreen mode Exit fullscreen mode

正如我们所见……COBOL 的规则非常严格……它有“部门”和“节”。变量必须首先声明,并且不能在它所属的节之外的任何地方声明。将值移动到变量中与将值赋给变量是不同的。COBOL 中没有 IF-ELSE 语句。您可以检查变量以获取其长度或零的数量。

我知道你一定很想知道“PIC 9”到底是什么意思……嗯……“9”代表数值,“X”代表字母数字,“S”代表符号,“V”代表小数。

为了编译这个程序……我使用了 Open-Cobol,可以通过执行“sudo apt-get install open-cobol”轻松安装。作为一个 GNU 应用程序……它并不是真正的 Cobol 编译器……它是用 C 语言编写的。

COBC -X -FREE -O "NAME_OF_FILE" "NAME_OF_FILE.COB"
Enter fullscreen mode Exit fullscreen mode

Cobol Exec

您可以在这里阅读我的 Cobol 入门介绍

Simula(仿真编程语言 - 1962 年)

Simula 标志

Algol 60 的超集。被认为是第一个面向对象的编程语言。

begin
    integer num;
    text result;

    procedure fib(num, a, b);
    integer num, a, b;
    begin
        if a > 0 and num > 1 then
            begin
                OutInt(a+b,3);
                fib(num - 1, a + b, a);         
            end;
        if a = 0 then
            begin
                OutInt(a,3);
                OutInt(b,3);
                OutInt(a+b,3);
                fib(num - 1, a + b, b);
            end;    
    end;

    OutText("Enter a number: ");
    OutImage;
    num := InInt;
    fib(num,0,1)
    OutImage;
end
Enter fullscreen mode Exit fullscreen mode

每个程序都以“Begin - End”开头。变量需要类型。我们可以有全局变量和局部变量。“OutInt”用于在屏幕上打印整数,“OutText”用于打印字符串。“OutImage”用于打印空行。整数变量使用“="”赋值,字符串变量使用“:="”。

编译时,我使用了 GNU CIM,它是一个将 Simula 代码转译为 C 代码的转译器。您可以从这里安装它。

cim "NAME_OF_FILE.cim"
Enter fullscreen mode Exit fullscreen mode

Simula Exec

您可以在这里阅读我的Simula入门介绍

Snobol(面向字符串的符号语言 - 1967)

Snobol 标志

命令式和非结构化编程语言。此外,它还是目标导向的。

* Fibonacci Sequence

        define('fibo(num,a,b)temp','fib')       :(fibo_end)
fib     fibo = eq(a,0)  a ' ' b ' ' ( a + b )   
        num = num - 1   
        a = a + b                               :s(fib0)
fib0    gt(num,1)                               :s(fib1)f(return)
fib1    fibo = gt(a,0) fibo ' ' ( a + b )       
        num = num - 1   
        temp = a                        
        a = a + b                               
        b = temp                                :s(fib0)f(return)
fibo_end

        output = 'Enter a number: '
        num = input
        output = fibo(num,0,1)
end 
Enter fullscreen mode Exit fullscreen mode

变量不需要数据类型,它的类型取决于赋值。定义方法时,我们需要指定方法结束或失败时要调用什么函数。对于每个部分,我们需要判断它是否有效,并根据结果跳转到下一个部分。“if”条件语句需要单独存在,并根据结果跳转到其他部分。在本例中,“gt(num,1)”就是一个“if”语句。

要进行编译,我们首先需要构建编译器……顺便说一下,它是一个 C 应用程序。

WGET FTP://FTP.ULTIMATE.COM/SNOBOL/SNOBOL4-1.5.TAR.GZ
TAR –ZXVF SNOBOL4-1.5.TAR.GZ && CD SNOBOL4-1.5
SUDO APT-GET INSTALL M4
SUDO MAKE INSTALL
Enter fullscreen mode Exit fullscreen mode

要跑步,我们需要做……

snobol "NAME_OF_FILE.sno"
Enter fullscreen mode Exit fullscreen mode

Snobol 高管

您可以在这里阅读我的Snobol入门介绍

Algol68(算法语言 - 1968)

Algol是Algol系列命令式编程语言(Algol58、Algol60和Algol68)的一部分。它是史上最具影响力的语言之一,衍生出了Simula、B、Pascal和C等众多语言。

BEGIN
    print("Enter a number: ");
    INT num = read int;

    PROC fib = (INT num, a, b)VOID:
        IF a > 0 THEN
            IF num > 1 THEN
                printf(($g(0)x$, a + b));
                fib(num-1, a+b, a)
            FI
        ELIF a = 0 THEN
            printf(($g(0)x$, a + b));
            fib(num-1, a+b, b)
        FI;

    printf(($g(0)x$, 0, 1));    
    fib(num,0,1);
    print(newline)
END
Enter fullscreen mode Exit fullscreen mode

所有应用程序都以 BEGIN-END 开头。变量需要类型。过程可以有零个或多个参数。返回最后一个值,并且必须始终返回一个值。打印数字时会显示符号,因此我们需要格式化其输出。这很可能是第一个使用“ELIF”语句的编程语言,并且使用“FI”语句来结束“IF”语句。“;”用于结束一行。

要进行编译,我们首先需要安装 Algol68Genie。

SUDO APT-GET INSTALL -Y ALGOL68G
Enter fullscreen mode Exit fullscreen mode

然后我们就可以简单地……

a68g "NAME_OF_FILE.a68g"
Enter fullscreen mode Exit fullscreen mode

Algol Exec

你可以在这里阅读我的 Algol68 入门介绍

奖励部分

我知道……五种语言不够……所以为什么不加入一种额外的语言呢……一种我一直很感兴趣的语言,因为它的名字对于一种编程语言来说似乎有点奇怪 -;)

闲聊 (1972)

SmallTalk 标志

一种面向对象、动态类型、反射式编程语言。

Smalltalk 对 Objective-C、Java、Python、Ruby 等许多语言都产生了影响……

| number fib result |

result := ''.

fib := [:num :a :b |

    a > 0 & (num asNumber > 1) ifTrue: [
        result := result , (a + b) asString , ' ' , 
                  (fib value: (num asNumber - 1) value: (a + b) value: a).
    ] ifFalse: [
        a = 0 ifTrue: [
            result := a asString , ' ' , b asString , ' ' , (a + b) asString , ' ' , 
            (fib value: (num asNumber - 1) value: (a + b) value: b).
        ]. 
    ].
].

Transcript show: 'Enter a number: '.
num := stdin nextLine.

Transcript show: (fib value: num value: 0 value: 1); cr.
Enter fullscreen mode Exit fullscreen mode

变量声明在“|”之间。赋值使用“:="”。“IF”语句比较特殊,它被定义为“ifTrue”和“ifFalse”,而“[]”用于分隔代码块。我们使用“Transcript show”,否则文本会被像这样“This is a text”括起来,而不是“This is a text”。如果您对“value:”感到疑惑,它是用来调用参数的。

编译时,我们将使用 GNU Smalltalk,它可以像这样安装:

sudo apt-get install gnu-smalltalk
Enter fullscreen mode Exit fullscreen mode

而他们只是……

gst "NAME_OF_FILE.st"
Enter fullscreen mode Exit fullscreen mode

SmallTalk Exec

你可以在这里阅读我的 Smalltalk 入门介绍

就这样啦 :) 希望你玩得开心 ;) 我学习它们的时候也很有意思……它们确实让我成为了一个更好的开发者……没错……我的确也遇到过很多挫折……但这正是编程的乐趣所在 ;)

吹嘘。

文章来源:https://dev.to/blag/5-old-programming-languages-you-should-know-about-3ofe