Алгол и Баш

Удивительно, я и не догадывался, что иногда употребляю ключевые слова родом из «Алгола-68»!

Оказывается автор командной оболочки bsh Стивен Борн притащил ключевые слова IF/FI и CASE/ESAC прямиком из «Алгола». Позже оттуда они попали в более известный сейчас bash, на котором я нередко пишу.

Более того, Стивен Борн по всей видимости насколько крепко фанател по этому языку, что специальными макросами превратил Си, на котором написал bsh, в некое подобие «Алгола» (исходники есть в интернете).

Если скачать себе пару заголовочных файлов (и выкинуть из них всё то, что мешает компиляции), то можно и сейчас попробовать этот макроязык в деле (это я пузырьковую сортировку написал):

#pragma GCC diagnostic ignored "-Wimplicit-int"
#pragma GCC diagnostic ignored "-Wreturn-type"

#include "mac.h"
#include "mode.h"
#include <stdio.h>

bubbleSort(arr, n)
    INT arr[], n;
BEGIN
    INT i, j;

    FOR i = 0; i < n - 1; i++
    DO  FOR j = 0; j < n - i - 1; j++
        DO  IF arr[j] > arr[j + 1]
            THEN    arr[j] = arr[j] - arr[j+1];
                    arr[j+1] = arr[j] + arr[j+1];
                    arr[j] = arr[j+1] - arr[j];
            FI
        OD
    OD
END
 
printArray(arr, n)
    INT arr[], n;
BEGIN
    INT i;
    FOR i = 0; i < n; i++
    DO
        printf("%d ", arr[i]);
    OD

    printf("\n");
END

main()
BEGIN
    INT arr[] = { 0xFE, 0xED, 0xBE, 0xEF };
    INT n = 1[&arr] - arr;

    printArray(arr, n);
    bubbleSort(arr, n);
    printArray(arr, n);
END

Примерно так выглядят исходники bsh. Единственное моё добавление — BEGIN и END, которые Борн для описания тела функций не использует, но зато в «Алголе» принято делать именно так.

Кстати (век живи — век учись), такое неординарное объявление функций, как у меня в листинге (а я подсмотрел его в исходниках bsh), — как оказалось, устаревший синтаксис Си, причём он до сих пор поддерживается компиляторами.

Читайте также

Счётчик цикла и Фортран
Что-то захотелось на Фортран поближе взглянуть, не знаю уж чем он меня заинтересовал, возможно тем, что во времена учёбы в Университете постоянно про него слышал (всё-таки язык для научных вычислений, а я на математика учился), но использовать не довелось. Пока только-только начинаю знакомиться, для практики переписал с Бейсика на Фортран одну из версий игры 1970 года «Highnoon», наверное выложу её попозже на «Гитхаб».
2020
PHP, UTF-8, всё ещё строки: упрощаем задачу, часть I
Итак, я достаточно долго думал над задачей как мне заменить все операции получения символа из строки по индексу, чтобы понять насколько она сложна. Решить её можно, но скучно и не нужно.
2010

Комментарии 6

hshhhhh.name № 3
The opposite of «it's like riding a bike» is «it's like programming in bash». A phrase which means that no matter how many times you do something, you will have to re-learn it every single time.
Евгений Степанищев автор № 5
В этом есть часть правды, какие-то редкие случаи использования действительно легко утрачиваются из памяти, но у меня, например, основное держится вполне прочно.
hshhhhh.name № 6
но у меня, например, основное держится вполне прочно.

я пишу 1 баш скрипт в год поэтому у меня есть файл с тем что мне чаще всего нужно. я даже if не могу написать без заглядывания в него/в гугол.