Алгол и Баш

Удивительно, я и не догадывался, что иногда употребляю ключевые слова родом из «Алгола-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), — как оказалось, устаревший синтаксис Си, причём он до сих пор поддерживается компиляторами.

 532   1 мес   bash   программирование   си
4 комментария
Корноух 29 дн

Bash, конечно, довольно всратенький язык!

Евгений Степанищев 29 дн

Сложно не согласиться!

hshhhhh.name 23 дн

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.

Евгений Степанищев 23 дн

В этом есть часть правды, какие-то редкие случаи использования действительно легко утрачиваются из памяти, но у меня, например, основное держится вполне прочно.

hshhhhh.name 23 дн

Bash, конечно, довольно всратенький язык!

вы очень вежливый и сдержанный человек!

hshhhhh.name 23 дн

но у меня, например, основное держится вполне прочно.

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