айрхеология

99 бутылок: Старсет

Семьдесят четвёртый выпуск считалочки «песни о пиве», которую я пишу на разных языках программирования, для разнообразия сделаю на языке родом из СССР. Как-то я мало такому уделяю внимания, а ведь это тоже история!

74. Старсет — язык программирования высокого уровня, разработанный в Институте программных систем РАН в 1991 году. К сожалению, мне не удалось обнаружить компиляторов или интерпретаторов этого языка, и даже упоминания, что они вообще когда-либо были реализованы.

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

Оранжевая книга «Язык программирования СТАРГЕТ» М.М. Гилгула и А.П. Столбоушкина (Академия наук СССР, Наука) на фоне советской газеты с заголовками о границе и ТАРСС.
Книга «Язык программирования Старсет», М. М. Гилула, А. П. Столбоушкин, М., «Наука», 1991

Язык, кстати говоря, небезынтересный — в наличие имеется развитая работа со множествами и свой язык регулярных выражений («образцов»), который может применяться не только на скалярах, но и на множествах! Кроме того имеются операторы, позволяющие распараллеливать вычисления!

Помимо скаляров и множеств, язык поддерживает «классы» — насколько я понял, своеобразные вычисляемые «срезы» множеств по какому-либо условию (вроде того как это делается в numpy), но могу и ошибаться, книга написана очень сухим, академическим языком и иногда вообще не удаётся понять, что имеется ввиду.

Например, попробуйте разобраться в этом отрывке («каноническая запись», как утверждается выше процитированного — это когда отброшены все незначащие нули):

Каноническим числовым представлением нуля будем считать слово 0. В частности, каноническим числовым значением слова 1 является оно само, каноническим представлением слова 2 является слово −6, каноническим представлением слова 3 — слово 67000000000000000.

Я, сколько ни пытался, не смог уловить закономерность.

Программы по внешнему виду сильно напоминают «Паскаль» — совпадают некоторые конструкции и принципы, но, конечно же, есть и вещи, которые сильно отличаются.

Выполнение программы выполняется с первой процедуры и завершается с выходом из неё. Возврат значения из функции (тут она называется «процедура-функция») осуществляется через переменную, совпадающую с именем функции. Все переменные, включая переменную для возврата, должны быть задекларированы в специальном блоке. Скалярные переменные декларируются в секции word, множества — в set, классы — в секции class.

/* Считалочка про пиво на языке «Старсет». Написал Евгений Степанищев */
/* https://bolknote.ru */

Func Бутылки(колво)
    Word: Бутылки, колво;

    Choice
        Case колво = 1 Do Бутылки := '1 bottle' End
        Case колво = 0 Do Бутылки := 'no bottles' End
        Otherwise Do Бутылки := колво^' bottles' End
Endfunc

Proc Песня()
    Word: колво, бутылок;

    колво := 99;
    бутылок := Бутылки(колво);

    While колво > 0 Do
        Write бутылок^' of beer on the wall, '^бутылок^' of beer.';
        колво := колво - 1;
        бутылок := Бутылки(колво);
        Write 'Take one down and pass it around, '^бутылок^' of beer on the wall.';
        Write ''
    End

    Write 'No more bottles of beer on the wall, no more bottles of beer.';
    Write 'Go to the store and buy some more, 99 bottles of beer on the wall.'
Endproc

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

Ещё необычно выглядит операция конкатенации — ^ и повторения строки — ^^. Из-за того, что в языке есть неявные преобразования, можно делать вот такое:

Write 'МА' ^^ '2 раза' /* Будет выведено «МАМА», так  как «2 раза» преобразуется к двойке */

С удовольствием познакомился с языком, благо он не выглядит, как что-то, сделанное «в стол», для «галочки» или исключительно для обучения школьников или студентов.

Оставить комментарий

ФИДО ★

Не знаю как кратко объяснить что такое Фидонет (Фидо) тем, кто никогда о нём не слышал. Наверное можно сказать, что это одна из первых социальных сетей, некогда связавшая очень специфичных людей — в те времена, когда интернет ещё не был распространён. Сложность подключения была своеобразным тестом на интеллект, а строгие правила требовали владения социальными навыками, из-за чего многие фидошники до сих пор остаются очень интересными личностями.

В моём случае так получилось, что высокоскоростной доступ к интернету я получил раньше, чем Фидо смогло заинтересовать меня своими преимуществами, поэтому я как-то особо не фанател от этой сети, хотя иногда её читал через ньюс-конференции (погуглите «fido7», это оно).

Самое моё значимое участие в жизни Фидо — как-то я умудрился намертво повесить компьютер с OS/2 своего знакомого, где работал тоссер — программа, обслуживающая один из сегментов казанской сети.

Скриншот письма о появлении 13-го месяца 2018 года в московском метро: на табло станции «Кузнецкий Мост» отображается дата 01.13.2018 и время 03:44.
Гипертекстовый векторный фидонет на экране обычного смартфона; используется клиент HotdogEd под Андроид

Для айтишника старой школы, к которой я себя отношу, отсутствие интереса к легендарному Фидонету как-то нетипично. Наверное подсознательно меня это тяготило и неожиданно для себя, под Новый год я под влиянием момента подал заявку на вступление. Опоздал лет на 20, но лучше поздно, чем никогда — подожди я ещё 20 лет и подключаться было бы некуда.

Сегодня заявку одобрили и дали мне поинта (адрес) 2:5020/723.67. Скачал клиента HotdogEd под Андроид, установил ему плагин HotdogEd Fidonet Provider, заполнил настройки из присланного в ответ на заявку письма, и вот я в Фидо.

Для меня названия настроек были настолько не самоочевидны, что я было приуныл, но оказалось, что обязательных всего четыре. Если вдруг тоже захотите подключиться, то указывать надо следующее:

  • «Boss 3D FTN address» — адрес ноды (в моём случае — 2:5020/723)
  • «Your name» — «имя» из ответного на заявку письма
  • «Your 4D FTN address» — ваш поинт-адрес (в моём случае — 2:5020/723.67)
  • «Password» — пароль из письма

Потом останется подписаться на интересующие вас «эхи» (каналы) и можете начинать общаться. Я пока подписался на две локальные и на su.talks — всероссийскую болталку.

Пока причастности к легенде не почувствовал, но гештальт, надеюсь, закрыл.

13 комментариев

«Chomp!»

Скриншот игры Chomp! в Netscape: акула плывёт к птице, текст описывает управление и фразу «Mmmm, a rare Yellow Footed Boobie. Soft on the outside, crunchy on the inside!
Игрушка «Chomp!», входящая в состав плеера Cosmo VRML Player — вы играете за акулу, поедающую разное

Где-то в конце девяностых, копаясь в папках популярного тогда браузера компании «Нетскейп», я натолкнулся на игрушку, написанную с использованием VRML — языка для демонстрации трёхмерной интерактивной графики. Сейчас он практически забыт, а в те годы активно пытался завоевать популярность.

С тех пор, в те редкие моменты, когда кто-то из собеседников вспоминал VRML, я рассказывал про ту игру. Всё, что я о ней помнил — играть надо за акулу, которая плавает и что-то там поедает. За все эти годы мне не встретился ни один человек, который бы понимал о чём я говорю.

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

Вчера решил предпринял очередную попытку, гуглил до изнеможения, пока не нашёл где-то упоминание, что компания «Нетскейп» когда-то распространяла свой браузер с вместе с «Cosmo VRML Player».

Подумал — не могла ли та игрушка быть частью этого плеера? Скачал его инсталлятор примерно тех времён, распаковал и вздохнул с облегчением — внутри нашлись файлы чего-то, напоминающего искомую игру. Но для чистоты эксперимента решил посмотреть на неё вживую.

У меня на ноутбуке уже есть виртуализация — «Parallels Desktop» какой-то бородатой версии, так что я просто скачал в интернете первую попавшуюся загрузочную дискету ДОС с поддержкой сидирома, образ «Виндоуз 95» и всё установил.

Потом поставил внутрь «Нетскейп Навигатор 4.04», «Космо Плеер 2.1», «DCOM95», «DirectX 8.0a» и универсальный видеодрайвер. Именно с таким набором ПО всё завелось и довольно шустро заработало.

Файлы передавал через образы, монтируя их в виртуальной среде как сидиром. Оказалось «Дисковая утилита» «Мака» умеет такие образы создавать (только надо выбирать гибридный формат без сжатия).

Всё как я помнил — плавает акула, что-то там ест (рыб и уток). Не захватывающе, но вполне играбельно даже по нынешним временам, портировать на смартфон и можно продавать за небольшую цену.

4 комментария

Интернет-археология: браузер ViolaWWW ★

Скриншот окна приложения с заголовком «vw» и стандартными кнопками управления окном macOS, пустое рабочее пространство
Моя попытка запустить браузер под Линукс пока завершилась провалом

Пока читал про «Си-минус-минус», наткнулся на браузер ViolaWWW. Браузер разрабатывался с 1991 года в университете Беркли одним-единственным человеком — Вэй Пей-Юанем.

Эта вещь достойна внимания из-за примечательного факта — там реализованы таблицы стилей, за несколько лет до появления CSS, а так же первый скриптовый язык — задолго до «ДжаваСкрипта» и «Си-минус-минуса»! Причём с событиями и подобием аякса!

Автор написал несколько программ на своём языке, например — шахматы. Я пока не нашёл документацию, зато обнаружил несколько примеров. Например, скрипт выводящий синусоиду:

\class {field}
\name {wave}
\parent {}
\children {wave.sb}
\script {
    switch (arg[0]) {
    case "graph":
        f = float(arg[1]);
        xx = width();
        r  = height() / 2.0;
        theta = 0;
        for (x = 20; x < xx; x += 2) {
            theta = theta + 0.1;
            y = sin(theta * f) * r + r;
            drawLine(x, y, x, y + 1);
        }
        return;
    break;
    }
    usual();
}
\width {300}
\height {200}
\
\class {slider}
\name {wave.sb}
\parent {wave}
\script {
    switch (arg[0]) {
    case "_shownPositionV":
        usual();
        send(parent(), "graph", arg[1]);
        return;
    break;
    }
    usual();
}
\x {2}
\y {2}
\width {15}
\height {200}
\shownSizeV {10}

К сожалению, позапускать программы пока нечем. Исходный код я нашёл, но под Линуксом он компилироваться не захотел, собственно, судя по коду, он никогда под ним и не собирался. Я сделал минимально необходимые правки, код собрался, но попытка запуска завершилась крахом. Подумаю стоит ли тратить силы дальше.

Даже интересно какой бы веб мы увидели сейчас, если бы этот браузер тогда получил дальнейшее распространение! Получается в 90-х он умел больше, чем некоторые браузеры в двухтысячных. Например в скриптовом языке я заметил селекторы nthChild и даже nthWord!

Насколько я могу видеть, поддерживалось более десятка форматов графики, в том числе всем знакомый GIF, правда без анимации и в формате 1987 года, а так же сейчас уже экзотический XBM (до относительно недавнего времени поддерживался «Эксплорером», «Сафари» и «Оперой»).

4 комментария

99 бутылок: Cmm, интернет-археология

61. Cmm. Язык «Cmm» был разработан в 1992 году компанией «Nombas». Основной идеей языка было упрощение языка «Си», отсюда и название — C minus minus. Официальное руководство говорит, что это «Си, минус объявление типов, минус указатели». Позже язык был переименован в ScriptEase, так как упоминание «Си» отпугивало людей. Язык существовал для ДОСа, Виндоуз, ОС/2 и операционной системы компании «Новелл».

В конце 1995 года компания создала версию скриптового языка для веб-страниц, внедрённую в браузер Нетскейп. Таким образом «Си-минус-минус» был одним из первых языков фронтенда!

Язык действительно простой — типы выводятся из использования, массивы без указания размера, нет явного выделения и освобождения памяти, указателей не видно.

Массивы и строки, хоть и являются указателями (есть даже арифметика с ними), но этого не замечаешь — выглядят, как обычные переменные. Все lvalue передаются по указателю, для передачи по значению есть специальный синтаксис. Забавно, кстати, что точка с запятой не обязательна, прямо как в ДжаваСкрипте.

Остальные отличия от «Си» не столь заметны. Языки почти что близнецы, есть даже ограниченный предпроцессор, да и встроенные функции, в основном, сишные. Язык, видимо, претендовал сразу на несколько ниш, на нишу коммандных оболочек в том числе — в составе предпроцессора есть команда, позволяющая импортировать куски программ, указывая с какой по какую строку производить импорт. Насколько я смог заметить, это широко используется, чтобы внедрять «СиЭмЭм» внутрь шелл-скриптов различных ОС.

// Written by Evgeny Stepanischev, 2017

BottlesPlural(Beer)
{
    switch ( Beer )
    {
        case 0:
            return `no bottles`
        case 1:
            return `1 bottle`
        default:
            sprintf(Bottles, `%d bottles`, Beer)
            return Bottles
    }
}

i = 99
Bottles = BottlesPlural(i)

while ( i > 0 ) {
    printf("%s of beer on the wall, %s of beer.\n", Bottles, Bottles)
    Bottles = BottlesPlural(--i)
    printf("Take one down and pass it around, %s of beer on the wall.\n\n", Bottles)
}

printf("No more bottles of beer on the wall, no more bottles of beer.\n")
printf("Go to the store and buy some more, 99 bottles of beer on the wall.\n")

Если кому-то интересно, в интернете легко гуглятся интерпретаторы языка с описанием. Я брал 32-битный интерпретатор версии 2.11 под Виндоуз. Кстати, под ОС/2 находится и более ранняя — 1.008, выпущенная в 1993 году.

2 комментария

Тег HYPE (Netscape HYPE tag sound)

Скриншот интерфейса SheepShaver с запущенной Netscape Navigator 2.01, окном Unix с папками и файлами, панелью Launcher с приложениями и рабочим столом Mac OS.
Скриншот MacOS 9 с открытым окном браузера

Пятнадцать лет назад, ковыряя исходники браузера «Нетскейп», я наткнулся, в частности, на тег HYPE — в интернете того времени писали, что он воспроизводит какой-то звук, но только в старых версиях браузера и не под «Виндоуз». «Мака» у меня тогда не было, как и доступа к «Линуксу» с графическим интерфейсом, поэтому безуспешно поискав по интернету подробности, я исследование забросил.

Сегодня за завтраком, по другому случаю наткнувшись на свою же статью об этом теге, я подумав, что теперь-то в интернете найдётся всё, попробовал разыскать тот самый звук. По-прежнему безуспешно. Есть только несколько чудом сохранившихся страничек, где этот тег упоминается в контексте перечня «пасхальных яиц» «Нетскейпа» и это всё.

Но времена же изменились! Теперь у нас есть виртуализация, образы виртуальных машин и быстрый интернет! Где-то полчаса ушло на поиск и скачивание второй версии «Нетскейпа», готовой виртуалки с девятой «МакОСью», установку всего найденного, разбирательство как всё запускается. Но при вводе заветного тега меня ждало препятствие, к счастью, устранимое — виртуалка заявила, что у меня нехватает какой-то Sound Machine и, вместо проигрывания звука, предложила скачать звуковой файл.

Файл оказался в формате .snd, который нормально открылся и проигрался уже в современном «Маке». Его содержимое — фраза «What is global hypermedia?» (из документа NCSA Mosaic Demo 1993 года, как объясняется на одной из страниц в интернете).

Я сконвертировал его в обычный МП3 и, если ваш браузер достаточно современный, можете послушать как звучит тот самый секретный тег:

Кстати, жаль, что я не догадался проиграть его на оригинальном «Макинтоше» в музее Эпл, в Москве. Если представиться случай, обязательно попробую!

2 комментария

← 1 2 →