vak: (Улыбка)
Serge Vakulenko ([personal profile] vak) wrote2013-01-05 12:00 am

Язык Эль-76

В дебрях сети обнаружились симулятор и примеры языка Эль-76:
http://web.archive.org/web/20030710092032/www.mstu.ru/studies/Others/War/IlbrusLanguage-emul.rar
http://web.archive.org/web/20030710091904/www.mstu.ru/studies/Others/War/IlbrusLanguage-docs.rar

Спасибо [livejournal.com profile] oboguev за наводку.  Язык в целом очень похож на Алгол-68, но семантически отражает особенности архитектуры Эльбруса: полиморфные операции, аппаратная защита массивов и т.п.  Переложил примеры в свою копилку.  Так выглядит обработка списков:
программа
  процедура печатьэл = проц(ф32 эл) начало
    ф32 к;
    для к от 1 до эл[0] цикл печать(эл[к]) повторить
  конец;
  процедура печатьсп = проц(ф32 список) начало
    если не естьпусто список то
      печатьэл(список[0]);
      печатькс();
      печатьсп(список[1])
    все
  конец;
  процедура добавсп = проц(ф32 список, знач) начало
    если не естьпусто список[1] то
      добавсп(список[1], знач)
    иначе
      ф32 с;
      список[1] := лок вект [2] ф32;
      с := список[1];
      с[0] := знач
    все
  конец;
  процедура вариант1 = проц(ф32 список) начало
    если не естьпусто список то
      ф32 слово := список[0];
      если слово[0] > 1 то
        ф32 слово2 := лок вект [слово[0] + 1] ф32, к;
        слово2[0] := 1;
        слово2[1] := слово[1];
        для к от 2 до слово[0] цикл
          если слово[к] <> слово[1] то
            слово2[0] := слово2[0] + 1;
            слово2[слово2[0]] := слово[к]
          все
        повторить;
        список[0] := слово2;
        вариант1(список[1])
      все
    все
  конец;
  процедура вариант2 = проц(ф32 список) начало
    если не естьпусто список то
      ф32 слово := список[0],
          слово2 := лок вект [слово[0]*2 + 1] ф32,
          к;
      слово2[0] := слово[0]*2;
      для к от 1 до слово[0] цикл
        слово2[к*2 - 1] := слово[к];
        слово2[к*2] := 0
      повторить;
      список[0] := слово2;
      вариант2(список[1])    все
  конец;
  ф32 список := лок вект [2] ф32;
  ф32 слово;
  слово := лок вект [4] ф32;
  слово[0] := 3;
  слово[1] := 3;
  слово[2] := 2;
  слово[3] := 3;
  добавсп(список, слово);
  слово := лок вект [7] ф32;
  слово[0] := 6;
  слово[1] := 7;
  слово[2] := 4;
  слово[3] := 7;
  слово[4] := 2;
  слово[5] := 3;
  слово[6] := 7;
  добавсп(список, слово);
  слово := лок вект [5] ф32;
  слово[0] := 4;
  слово[1] := 2;
  слово[2] := 2;
  слово[3] := 1;
  слово[4] := 2;
  добавсп(список, слово);
  печатьсп(список[1]);
  печатькс();
  вариант1(список[1]);
  печатьсп(список[1])
конец

[identity profile] spamsink.livejournal.com 2013-01-05 08:12 am (UTC)(link)
Я из Эль-76 помню, что там были циклы "спискомдо" и "цепьюдо", но что такое "цепьюдо" - не помню.

[identity profile] spamsink.livejournal.com 2013-01-05 08:40 am (UTC)(link)
Стоп-бит - это признак конца списка? Что же тогда "спискомдо" делает по концу списка?

[identity profile] spamsink.livejournal.com 2013-01-06 01:27 am (UTC)(link)
Вообще, книжка далеко не образец ясного и понятного текста.

Что есть, то есть. :)

[identity profile] winpooh.livejournal.com 2013-01-05 12:37 pm (UTC)(link)
Звучит как какие-то восточные единоборства.

[identity profile] cema.livejournal.com 2013-01-05 01:59 pm (UTC)(link)
+1

[identity profile] oboguev.livejournal.com 2013-01-05 05:00 pm (UTC)(link)
"Цепьюдо" -- это когда подразделение разворачивается в цепь и с автоматами Калашникова наперевес выдвигается до указанного рубежа.
Edited 2013-01-05 17:02 (UTC)

[identity profile] spamsink.livejournal.com 2013-01-06 01:29 am (UTC)(link)
В уставной системе команд была такая команда?

[identity profile] spamsink.livejournal.com 2013-01-06 03:38 am (UTC)(link)
Досадно, но что уж поделать - не писать же новый, если запускать на нем нечего.

[identity profile] raydac.livejournal.com 2013-01-05 08:51 am (UTC)(link)
wayback клевая штука, но и иногда опасная ))) как то там нашел доку которую одна японская контора опубликовала по неосторожности, а потом решила убрать из публичного доступа, а было поздно, снимок в wayback оказался

[identity profile] oboguev.livejournal.com 2013-01-05 05:48 pm (UTC)(link)
> если не естьпусто

Свято место пусто не бывает!

Никогда не мог понять использования русских слов в качестве языковых значков. Казалось бы, русским дано огромное богатство, которого нет даже у американцев и англичан -- English as a foreign language -- огромный набор легко распознаваемых иероглифов с абстрактным, обесполченым и неконтаминированным значением. Бери и пользуйся. Нет, обязательно млечный путь нужно назвать молочным.
Edited 2013-01-05 17:51 (UTC)

[identity profile] b0p0h0k.livejournal.com 2013-01-06 12:11 am (UTC)(link)
Лет несколько назад был на лекции Дона, нашего, Кнута "Прекурсоры Фортрана".
Впечатлило, как он, обсуждая некий язык, созданный в ИПМе под командованием Баяковского, писал на доске фрагменты программы с русскими служебными словами, не заглядывая в шпаргалку.
Кстати, русское издание Первого Тома он мне тоже подписал по-русски.

[identity profile] panchul.livejournal.com 2013-01-07 06:23 am (UTC)(link)
Черт возми, действительно алголоподобный язык.
Мда, я ожидал чего-нибудь более экзотического.

[identity profile] panchul.livejournal.com 2013-01-14 01:49 am (UTC)(link)
Языков с динамическими типами есть до фига - например Dylan, которым я интересовался в 1995 году.

Они все реализуются достаточно эффективно если делать глобальный анализ всей программы компилятором (а не только анализ per compilation unit).

[identity profile] panchul.livejournal.com 2013-01-14 03:35 am (UTC)(link)
Отнюдь. На функции, входящие в OC API можно ставить специальные #pragma, чтобы они рассматривались оптимизатором как black box который требует специального протаскивания параметров с тагами типов. Это будет медленно но hopefully редко.

[personal profile] ygam 2017-01-27 01:18 am (UTC)(link)
Я использовал кусок этого кода в юнит-тесте для динамической компиляции: что делать, если нам задали язык, который мы не умеем компилировать?