spamsink: (Default)
Несколько цитат из документа полувековой древности - Акта приемки опытного образца БЭСМ-6 (для служебного пользования, разумеется):

В процессе наладки обытного образца БЭСМ-6, а также первых образцов опытной серии, установлена низкая надежность полупроводниковых приборов без военной приемки (например, за время наладки опытного образца вышло из строя около 30% диодов Д18 и 20). С другой стороны, полупроводниковые приборы с военной приемкой (например, П416-Б-ВП, Д18-ВП) показали высокую надежность, сравнимую с показателями лучших зарубежных образцов.

Внешние устройства, выпускаемые нашей промышленностью, обладают пока низкими показателями надежности. Хотя за период прогона задач внешние устройства показали более высокую надежность, чем это предусмотрено их ТУ, комиссия считает, что их параметры надежности совершенно не удовлетворяют требованиям, которые предъявляются к внешним устройствам, входящим в состав современных вычислительных систем.

...комиссия считает, что система команд, определенная техническим заданием, имеет ряд недостатков, наиболее существенным из которых является 15-ти разрядный исполнительный адрес, который затрудняет расширение емкости оперативной памяти свыше того объема, на который в настоящее время рассчитана машина БЭСМ-6 (32768 слов).

До организации серийного выпуска отдельных типов внешних устройств отечественной промышленностью комиссия считает целесообразным закупить это оборудование за границей для укомплектования им машины БЭСМ-6.


К сожалению, приложение, в котором перечислялись устройства, рекомендуемые к закупке за границей, в файле отсутствует.
spamsink: (Default)
Пишут, что continuations (продолжения) придумал Черчилль в 18-м году ван Вийнгаарден в 1964 году.

Но оказывается, что еще в Алголе-60 штука, которая называлась формальным параметром-меткой, на самом деле была почти продолжением.

пример под катом, для тех, кто понимает )
spamsink: (Default)
Несколько цитат из книги «СИСТЕМА „БЭСМ-АЛГОЛ“ Методическое руководство по программированию», изд. Министерство обороны Союза ССР, 1970; 100 c.

§5. Оператор присваивания. Оператор этот очень простой, но имеет ряд особенностей.

§12. Процедуры. Оператор процедуры является самым сложным и многообразным оператором входного языка. ...

1. Операторы процедур.
... Категорически запрещается описывать формальный параметр в теле процедуры, т. е. описывать в теле процедуры идентификатор, похожий на идентификатор одного из формальных параметров. Это приведет к неправильной работе процедуры.

2. Процедуры-функции. ... В теле процедуры идентификатор процедуры должен встречаться только в левой части оператора и категорически запрещается использовать его в правой части, т. е. нельзя писать
integer procedure курс(x, y);
begin real a;
a := x/2; курс := 0; курс := курс + a↑4 + y/3;
end;

...

3. Использование символа value. ... Список значений применяется для того, чтобы значения фактических параметров не изменялись после выхода из процедуры, т. е. с каким значением фактического параметра вошли в процедуру, с таким же и вышли.

[Дальше приводится пример передачи массива по значению - S.]

Применение списка значений в процедуре несколько сокращает время ее работы.


Ну и загадочка. Какие значения будет принимать параметр цикла, заголовок которого записан как

for i := 1,5,7 step 1 until 10, i+2 while i < 20 do ... ?
spamsink: (Default)
В былые времена символов в кодировках было немного, и поэтому, хотя в байте уже было 8 бит, о возможности наличия байтов с установленным старшим битом в нормальных человеческих текстовых строках (а не, скажем, в сжатом представлении) никто не заботился. От этого, как говорится, hilarity ensued, но только для программистов )
spamsink: (Default)
Последние несколько дней я в свободное от сна, еды и работы время занимаюсь расшифровкой старинной битописи.
Хорошо, что коллеги по хобби хранят не только позднейшие списки аналогичных битописей, но и современные той битописи свитки.
spamsink: (Default)
Одна диагностика ошибки, выдаваемая компилятором ФОРТРАН-ГДР, выглядит так:
ERROR 097 IN 00003 SUBSCRIPT OF ARRAY >J< DOES NOT BE LOOP VARIABLE


Does not be, понимаешь ли. Кроет пресловутые how much watch и such much, как бык овец.

Более полная и аутентичная выдача, посторонним вход не рекомендован )
spamsink: (Default)
Много лет назад я задавался вопросом (или тут), бывает ли такое в жизни, чтобы целочисленное деление отрицательного числа на отрицательное давало положительный остаток.

Опять только для программистов-археологов )
Я тут поразмыслил с анализом размерностей и решил, что ситуация, когда знак остатка совпадает со знаком частного, физического смысла не имеет. Смотрите:

Если тебе надо пройти 5 метров на юг трехметровыми шагами, а ты стоишь лицом к северу, то логично будет, если остаток пути надо делать
- или всегда в ту же сторону света, в какую делал шаги; неважно лицом вперед или пятился (сделал один шаг на юг, и еще надо 2 метра на юг, знак остатка равен знаку делимого),
- или всегда вперед (сделал два шага пятясь, и еще метр вперед, знак остатка равен знаку делителя),
- или, так уж и быть, всегда на север (остаток всегда неотрицательный).

А вот логика, что если ты ходил вперед, то остаток должен быть к северу, а если пятился, то к югу (знак остатка равен знаку частного), мне была бы непонятна.
spamsink: (Default)
Когда деревья были большими, а память в компьютерах - маленькой, дети развлекались написанием программ на языке BASIC. Язык был простой и незамысловатый, но с появлением пиксельной графики на микрокомпьютерах и, соответственно, операторов отрисовки точек, отрезков и дуг окружностей или эллипсов, какая-то добрая душа добавила в язык и оператор закраски замкнутой области (PAINT или FILL).

Ну а что ж, надо же как-то удобно рисовать закрашенные кружочки и многоугольнички?

Одни разработчики были умные. Они решили сделать так: перед рисованием контура фигуры программист должен сказать "приготовься закрашивать то, что я сейчас буду рисовать", а после окончания рисования контура - "давай закрашивай". Фигура при этом должна быть "выпуклая по горизонтали", т.е. пересечение любой горизонтальной прямой и контура должно быть не более чем две точки или отрезка (а если кто не читает инструкции, тот ССЗБ). Процедура закраски должна всего лишь запоминать, какие были самая левая и самая правая точки контура в каждой строке экрана, и по заключительной команде закрасить всё между ними.
Алгоритм простой, памяти много не требует, но рисовать таким образом, например, кремлевскую стену довольно утомительно.

Другие разработчики были хитрые. Они решили сделать так: операция закраски будет пытаться красить любые фигуры, пользуясь стеком или очередью для запоминания, в какие закоулки нужно не забыть зайти, а если фигура окажется слишком сложная, и алгоритму потребуется больше временной памяти, чем есть, то программа или вылетит по ошибке нехватки памяти (если основное качество разработчика было laziness), или фигура не докрасится до конца (если основное качество разработчика было impatience) или машина зависнет/рестартует (если основное качество разработчика было hubris).
Алгоритм простой, быстрый, но перекрашивать таким образом, например, случайно сгенерированный лабиринт довольно рискованно.

Третьи разработчики были добрые. Они решили сделать так: операция закраски будет пытаться красить любые фигуры, пользуясь фиксированным количеством памяти, а если фигура окажется слишком сложная, то нефиг было программисту выпендриваться — подождёт.
Алгоритм совершенно бешеный, и описание на естественном языке, и псевдокод; и на многосвязных фигурах медленный, как моя жизнь. Курсор бегает по лабиринту кругами, как крыса, а толку через час по чайной ложке (скажем, для закраски квадрата 50х50 с 13% случайно расставленных точек может потребоваться больше 100 тысяч шагов).
В псевдокоде особенно восхищает вот это:
cur, mark, and mark2 each hold either pixel coordinates or a null value
         NOTE: when mark is set to null, do not erase its previous coordinate value.
               Keep those coordinates available to be recalled if necessary.

(Поняли теперь, как nullable references должны быть устроены?)

Самое смешное, что алгоритм всё же действительно работает.
spamsink: (Default)
Компилятор с языка POP-2, уже у нас тут упоминавшийся, оказывается, мальчиковый.

Демонстрируем на простом примере
Так себе функциональное программирование )
spamsink: (Default)
Знаменитая программа-виртуальный собеседник ELIZA была, как водится, в свое время адаптирована к русскому языку. Вот как это выглядело:

  ПEPEД BAMИ - ПPOГPAMMA "ЛИЗA", ПPEДHAЗHAЧEHHAЯ ДЛЯ
  MOДEЛИPOBAHИЯ ПPOЦECCA ЧEЛOBEЧECKOГO MЫШЛEHИЯ.
  ПPOГPAMMA ПPEДCTABЛЯET COБOЙ BAPИAHT CИCTEMЫ  ELIZA
  AДAПTИPOBAHHЫЙ COTPУДHИKAMИ ЛBTA OИЯИ ДЛЯ ЭBM БЭCM-6.
  ПOCЛE ПOЯBЛEHИЯ HA ЭKPAHE CИMBOЛA "?" HAБИPAЙTE
  CTPOKУ.  ПPИЗHAK KOHЦA CTPOKИ - CИMBOЛ "LINE FEED".
  ПPEДOCTEPEЖEHИE : ПPOГPAMMA CAMOOБУЧAЮЩAЯCЯ, ПOЭTOMУ
  OЧEHЬ ПPOCИM BAC ИЗБEГATЬ HEПPИЛИЧHЫX BЫPAЖEHИЙ.
  ЧTOБЫ ЗAKOHЧИTЬ CEAHC - HAБEPИTE CЛOBO   KOHEЦ.

вот как это работало )
spamsink: (Default)
Андрей Борисович Ходулёв, к сожалению, рано ушедший от нас (1953-1999), был замечательным человеком: и переводчиком культовой (ЕВПОЧЯ) компьютерной литературы, и разносторонним программистом, и чемпионом по решению головоломок...

В частности, он был автором реализации языка POP-2 на БЭСМ-6, об оживлении которого я не так давно писал.

Вчера выяснилось, что в Новой Зеландии of all places есть человек, которому интересно было бы это дело позапускать, потому что он сам пишет компилятор с POP-2, и нужен какой-нибудь эталон. Ну собрал я ему дистрибутивчик, послал; а что делать, не оставлять же человека в беспомощном состоянии.
spamsink: (lenin)
Без комментариев.

       П А Р А М Е Т Р Ы   А Н К Е Т Ы

01. ФАМИЛИЯ                    14. СЕМЬЯ + ДЕТИ
02. ИМЯ                        15. АДРЕС
03. ОТЧЕСТВО                   16. ТЕЛЕФОН
04. ПОЛ                        17. ЗАЧИСЛЕНИЯ ДАТА
05. РОЖДЕНИЯ ДАТА              18. ПОВЫШЕНИЯ ДАТА + ТИП
06. НАЦИОНАЛЬНОСТЬ             19. ПОДРАЗДЕЛЕНИЕ
07. КПСС ГОД                   20. ДОЛЖНОСТЬ
08. ВЛКСМ ГОД                  21. ЗАРПЛАТА
09. ПРОФСОЮЗ                   22. СОСТАВ ВОЕННЫЙ
10. ОБРАЗОВАНИЕ                23. ВОИНСКОЕ ЗВАНИЕ
11. СТЕПЕНЬ УЧЕНАЯ             24. СТРОЙ ВОЕННЫЙ
12. ЗВАНИЕ УЧЕНОЕ              25. БРОНЬ ВОЕННАЯ
13. СПЕЦИАЛЬНОСТЬ


Хотя нет, один комментарий будет. Один пунктик съехал слегка; непонятно, почему: искусственный интеллект еще не умел угадывать пол по ФИО (например, потому, что у носителей паспортов национальных республик форма отчества могла быть на национальном языке, -оглы там, -кызы, или вообще -оол, все не перечислишь; а по имени еще труднее).
spamsink: (lenin)
Под катом приведена вроде бы цельная программа на мёртвом языке POP-2, делающая вид, что играет в крестики-нолики 4х4х4. Пока не выяснено, имеется ли в нашем распоряжении работающий компилятор для этого конкретного диалекта языка. Желающим предлагается по наитию перевести эту программу на какой-нибудь более современный язык и выяснить, насколько сильно она играет.
355 строк, 9 Кб )
Публикуется, если верить гуглопоиску по текстовым сообщениям, впервые.
spamsink: (lenin)
Язык, конечно, не человеческий, поэтому в основном под катом.
В качестве примера:
    FUNCTION DEBFN X;
      IF DEBUG THEN BUGIO(X, ">",HD); DEBSP+1->DEBSP; .X;
        DEBSP-1->DEBSP; BUGIO(X, "<",LAMBDA; HD(.TL) END)
      EXIT;.X
    END;

Я понятия не имею, на что это, вообще, похоже.
и тому подобное )
spamsink: (lenin)
⠢⠂⠑⠒⠡⠠⠒⡤⢌⠌⠄⡤⠂⠌⠉⠁⢉⠤⢉⠑⠄⠔⠢⢈⢌⠠⠑⠕⢊⠢⡁⠁⠔⢉⠒⠂⠀⠀⠀⠀
⠑⠀⠢⠀⡐⠀⠀⠀⠂⠂⠂⠐⠀⠀⡐⠀⠀⠀⠂⠀⠂⠂⠄⠀⠂⠀⡀⠀⠁⠐⠀⠁⠀⠀⠀⠁⠀⠀⠀⠀
⠀⠁⠀⢡⠀⠰⠊⠬⠀⢠⠄⠄⠁⡬⠀⡄⠄⠮⠀⠌⠄⠈⠠⠠⠀⠰⠐⠌⠀⠂⠀⠀⠎⠅⠊⠀⠀⠀⠀⠀

Упрощенный вариант:
⠌⠂⢉⠂⠊⡉⠠⢉⠄⠡⠠⠊⠤⠑⠈⠑⠁⠌⠒⠈⠡⠠⠉⠄⠢⠊⠉⡑⠁⡡⢈⠈⠉⠄⠀⠀⠀⠀⠀⠀
⠀⠀⠂⡀⢀⠠⠀⠀⠂⠈⠀⠀⠒⣀⠀⡀⡀⠀⠒⠀⡐⠐⠀⠁⠠⡐⠐⠀⠄⠈⠀⠀⠀⠂⠀⠀⠀⠀⠀⠀
⠡⠁⠀⠀⡀⠀⠈⠄⠀⡀⠈⣀⠀⠀⠠⢀⠀⢁⠀⠐⠀⠀⢄⠀⠂⠀⠄⢀⠀⠀⠀⠐⡈⠀⠀⠀⠀⠀⠀⠀

А ну-ка, криптоаналитики!
spamsink: (lenin)
На старых компьютерах не было различия между регистрами букв (сравните с самыми первыми пишущими машинками, а также с телеграфными аппаратами) - все буквы на печати выглядели как заглавные, но понимались в тексте преимущественно как строчные. Если надо было специально обозначить, что некоторая буква — заглавная, перед ней записывался символ надчеркивания (‾). Таким образом этот символ мог быть допустим, например, в именах переменных, но только если после него следует буква.
В противном случае компилятор выдавал сообщение об ошибке (по техническим причинам — даже если это нарушение было в тексте комментария). Выглядело оно так: ПОСЛЕ НАДЧЕРКИВАНИЯ <пропуск> НЕ БУКВА.

Заполните пропуск словом из семи букв. Следующие варианты неверны:пока их 7 )
Комментарии скринятся пару дней. Уже есть несколько угадавших.

Upd: Комменты открыты. Всем спасибо.
spamsink: (lenin)
Советское пасхальное яйцо: в конце генерации операционной системы программа генерации спрашивала "XOTИTE УЗHATЬ, ЧTO Я ДУMAЮ O BAC ?" и при положительном ответе выдавала одно из следующих сообщений:

  • BЫ XOPOШO ЗAПPOГPAMMИPOBAHЫ. BAC MOЖHO ИCПOЛЬЗOBATЬ BMECTO ЭBM.
  • BЫ HETEPПEЛИBЫ, HEOБУЗДAHHЫ И AГPECCИBHЫ. BЫ ПAДETE ЖEPTBOЙ COБCTBEHHЫX CTPACTEЙ.
  • BЫ TOPOПЫЖKA И XAЛTУPЩИK !
  • BЫ OЧEHЬ CПOCOБHЫ И ПPИЯTHЫ B OБЩEHИИ. BAC ЖДET ПOBЫШEHИE ПO CЛУЖБE.
  • BЫ CПOKOЙHЫ И CTAБИЛЬHЫ. BAШИ ЛУЧШИE BPEMEHA EЩE HE HACTУПИЛИ ИЛИ УЖE ПPOШЛИ.
  • XOPOШИЙ ЧEЛOBEK, HO HEAKKУPATHЫЙ.
  • BЫ, HECOMHEHHO, ГЛУБOKИЙ MЫCЛИTEЛЬ, BAM BПOPУ PAБOTATЬ CИCTEMHЫM AHAЛИCTOM.
  • BAM BCE BPEMЯ ЧTO-TO MEШAET, BЫ HE MOЖETE COCPEДOTOЧИTЬCЯ.
  • BЫ ПPOCTO CAБOTAЖHИK !

Profile

spamsink: (Default)
spamsink

October 2017

S M T W T F S
12 345 67
89 1011121314
15 1617 18 192021
22232425262728
293031    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Oct. 22nd, 2017 10:02 am
Powered by Dreamwidth Studios