Пишу, по большей части, про историю, свою жизнь и немного про программирование.

99 бутылок: Small C, dbPager

15. Язык dbPager. Предназначен для динамической генерации страничек под MS IIS. Инструкцию по настройке прекомпилятора под IIS5 я не нашел, так что тестировал под версией для командной строки. Язык несколько, на мой взгляд, необычен своей концепцией блочников и некоторыми конструкциями, но, в целом, очень хорошо читается и воспринимается.

Скрипт, выводящий песню о пиве (beer.dbp).

// Beer song. Written by Stepanischev E.V. (dbPager)
var "beer=99"
    var "LoopLimit=99" :: while 1
        var ""
            @beer:printbeer
        %Space%on the wall,
        var ""
            @beer:printbeer
        .%CrLf%
        Take one and pass it around,%CrLf%
        set "beer=[%beer%-1]"
        var ""
            @beer:printbeer
        %Space%on the wall.%CrLf%%CrLf%

No more bottles of beer...%CrLf%
Go to the store and buy some more...%CrLf%
99 bottles of beer.

:printbeer
    switch %beer%
        #0 :: No
        #else :: %beer%
    %Space%bottle
    switch %beer%
        #1 :: 
        #else :: s
    %Space%of beer


14. Small C. Написав в предыдущей серии программу, выводящую песню о пиве, на Си—, я заинтересовался классом малоизвестных си-подобных языков. Благо Интернет и поисковые машины под рукой.

Первое, что мне попалось — это Small C. Впервые сведения о этом языке появились в октябре 1999 года в Dr. Dobb’s Journal. Язык простой и удобный, настолько отличен от Си, что перечислять эти отличия тут я не буду. Подробности можно найти в документации, доступной там же, на сайте.

Интересно, что исполнение программ происходит, как и в Java, в два этапа. На первом программа прекомпилируется в байт-коды, на втором — байт-коды интерпретируются или, если используется JIT, компилируются в машинный код и исполняются.

Несколько матерных слов в адрес компилятора. Отвратительная диагностика, странная реакция на символы табуляции, лишние переводы строки и символы «^», неработоспособность конструкции «a?b:c» и так далее. Компиляция моего небольшого примера заняла на Pentium-II 333 примерно 10 секунд. А теперь сам листинг.

Программа, выводящая песню о пиве (Small C).

/* 99 beer song. Written by Stepanischev E.V. Small C */
#include <console>

printbeer (b)
{
     if (b) printf ("%d",b); else printf ("No")
     printf (" bottle")
     if (b!=1) printf ("s")
     printf (" of beer")
}

main ()
{
     for (new i = 99; i > 0;)
     {
           printbeer (i)
           printf (" on the wall, ")
           printbeer (i)
           printf (".^nTake one and pass it around,^n")
           i--
           printbeer (i)
           printf (" on the wall.^n^n")
     }

     printf ("No more bottles of beer...^n");
     printf ("Go to the store and buy some more...^n");
     printf ("99 bottles of beer.");
}