четверг, 13 января 2022 г.

Шеркало 05.05: любимые системы программирования (Паскаль)

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

Тем более, что никаких проблем с Паскалем там и не было. Трансляторы этого языка имелись практически на всех компьютерах института, причём вполне рабочие трансляторы, вполне качественно исполняющие программы в рамках утверждённого стандарта языка. В том числе и на БЭСМ-6 компилятор работал. Вот только большинство сотрудников ИОА Паскаль в грош не ставили, оценивали его исключительно "детско-учебным" языком программирования. Писать на нём программы в среде учёных считалось как бы слегка дурным тоном для приличного взрослого человека, примерно как куличики лепить в песочнице детского сада.

Я закономерно спрашивал: "Почему?" Мне в ответ показывали книжки от умных зарубежных авторов, которые язык Паскаль разгромно критиковали за его подчёркнутую "ограниченность". Дескать, в языке не предусмотрена модульность (возможность компоновать единую программу из независимо написанных модулей), не предусмотрен сложный интерфейс ввода-вывода для современных каналов мэйнфреймов, нет возможности вызывать низкоуровневые операции различных компьютеров. Ах, да из-за строгой типизации нельзя (якобы) передавать параметром процедуры массив заранее неизвестного размера (вот уж совсем жестокое ограничение в языке, надо же, какое свинство лично от Никлауса Вирта!). Ну и тому подобное.

 Критика была с виду вполне справедливая, авторы были весьма именитые. Только что-то странно покалывало мне глаза при чтении. Почему-то казалось, что "родные" Алгол-60 и Фортран-IV точно так же не выдерживают той самой критики, как и Паскаль. А те положительные примеры, на которые ссылались умные авторы, были либо гораздо более современными разработками, либо вообще сугубо умозрительны. Захотелось попробовать самостоятельно. Здесь, кажется уместно привести картинки с текстом программы на Паскале:

- Здесь, правда, картинки слегка анахроничные - сделаны в TurboPascal 4.0, который появился только после 1987 года, спустя пятилетку после описываемого процесса моей школьной учёбы. Но это неважно, сам текст программы вполне аутентичен на то давнее время (кстати, прогонял эту же программу и в более ранних реализациях языка, доступных на сегодня в режиме эмуляции - успешно работает везде, но скриншоты хуже получаются). 

- Эээ, Ёж... С каким там тембром голоса принято у людей изображать скучающе-вопросительную интонацию? Ну и как там дальше было-то с любовью?
- Не подкалывай, Шеркало! Не мешай, дай рассказать!
Что видно при взгляде на паскалевскую программу? Да, в общем, всё то же самое, что и в Алголе-60. Та же структура. Те же вложенные BEGIN - END. Те же описания переменных, те же массивы ARRAY, те же процедуры PROCEDURE с параметрами. Операторы очень похожие. Ничего особенного и не поменялось. Отличаются, вроде бы, только нюансы.
Да, раздражающий лес апострофов из текста исчез. Описания переменных немного упорядочились, сосредоточились в начале процедур, отдельные блоки и операторы самостоятельность потеряли, параметры в процедурах упорядочились, со строками чуть-чуть интереснее стало, константы появились, типы свои опять же. Но... Это всё - мелочи, вроде бы  Реально поразило меня другое.

- Знаешь, Шеркало, была у меня на тот момент одна школьно-учебная задача. Сама по себе не слишком сложная, вполне учебная, вполне с виду, мне посильная. Но и не совсем тривиальная, там нужно было какую-то продуманную структуру из нескольких вложенных процедур с несколькими циклами под системой условий реализовать. Суть задачи уже абсолютно не помню! Помню только, что сходу решить не смог - несколько попыток (на Алголе-60), всё время то ошибки, то зацикливания в результате. Взял паузу. На пару недель отвлёкся, делал другие задания. Потом снова вернулся к этой задаче. Переписал всё заново, на свежую голову. Снова - ошибка на ошибке, никакого приближения к работающей версии.
Самое обидное, что я суть задачи - прекрасно понимаю, никаких неясностей нет! Все инструменты - у меня под рукой, ничего необычного не требуется, всё решается знакомыми средствами. А вот - ПУТАЮСЬ постоянно, то в одном месте, то в другом!!! Один узел распутаю, в другой части алгоритма ошибка вылезает. Опять бросил задачу. перешёл к другим темам.
А тут как раз начал пробовать Паскаль. Ну и ту, неподдающуюся, путанную задачу переписал уже в третий раз ради шутки на Паскале. Программа выполнилась без ошибок с ПЕРВОЙ попытки!

- Серьёзно?
- Именно так, Шеркало! Все места, где я в Алголе путался, в Паскале оказались плоскими и прозрачными. Вроде бы никакой существенной разницы, кроме нюансов и апострофов, а вот за теми нюансами виден только тёмный лес, а вот за этими - чистое поле для любых твоих действий.

Алгол-60 вдруг начал выглядеть передо мной в образе человека рассеянного с улицы Бассейной - из стихов Маршака: вроде бы умный, но тем не менее "...вместо шапки на ходу он надел сковороду, .. направился в буфет покупать себе билет..." В противоположность Паскалю, автором которого был Никлаус Вирт. 
Вирт сбежал из комитета по разработке Алгола далеко не сразу. Он очень активно участвовал в разработке Алгола-60. Активно критиковал этот стандарт (большей частью именно за нелогичную шизофрению), надеялся на то, что следующая версия Алгола (а никто и не сомневался, что будет новая версия, прежний Алгол-60 всем вменяемым учёным казался лишь промежуточным вариантом) будет намного более ясной и чистой. Вошёл в комитет по разработке новой версии языка Алгол-68.
И вот, когда Вирт убедился, что новый Алгол-68 получается лишь немного менее шизофреничным, чем Алгол-60, причём небольшое уменьшение шизофрении компенсируется огромным увеличением веса и сложности языка и трансляторов с него, вот в этот момент Никлаус Вирт окончательно разругался с "алгольщиками" и сбежал из этой группы разработчиков. И в пику им он создал Паскаль. Показал собственное видение успешного алгоритмического языка, а заодно и возможность его успешной реализации на современных компьютерах.

Нужно добавить, что Вирт терпеть не мог СЛОЖНЫХ компиляторов. В то время, оперативной памяти у компьютеров было крайне мало (десятки, очень редко сотни килобайт на современный счёт). Написать транслятор со сколь-нибудь сложного языка высокого уровня в машинный язык было достаточно трудно. Вопрос решался созданием много-проходных трансляторов. Они на первом этапе читали исходный текст программы, преобразуя его в набор промежуточных таблиц  - результат записывался в долговременную память, на ленты, барабаны, диски. Потом запускался второй прогон, который читал из файловой системы таблицы первого этапа, делал некие преобразования, на выходе писал в файлы новый комплект промежуточных таблиц, который читал компилирующий этап третьего прогона...
"... Потерпевший случайно сам упал на нож, получил смертельное ранение, внезапно поднялся, и этот процесс, снова и снова, повторялся аж восемь раз..." (с = анекдот) 
"Нормальные" трансляторы с Алгола, Фортрана, Кобола и т.п. в то время делали от 5 до 15 проходов с записью в долговременную память промежуточных результатов, и с вызовом многочисленных новых программ "частичных обработчиков" этих промежуточных результатов, которые, в свою очередь, читали входные таблицы из файлов внешней памяти, и писали новые выходные таблицы во внешнюю память, чтобы в итоге всё-таки после N+1 го частичного прохода компилятора получить исполняемый на конкретной ЭВМ двоичный объектный код (Уффф, не утомил никого этим предложением?). Для более громоздких языков (PL/1 на IBM/360) или для менее мощных (мини-)ЭВМ делали компиляторы и с бОльшим числом проходов, там и за двадцать-тридцать проходов, бывало, сильно зашкаливало. Аааа, забыл, извиняюсь, потом полученный объектный код ещё дополнительно линковать с внешними библиотеками и резидентными модулями Операционной Системы требовалось, это ещё от 1 до 5 прогонов программ-линковщиков, но это уже второстепенные издержки..

Большая сложность и много-проходность трансляторов обосновывалась объективной сложностью языков программирования: "Наш язык высокого уровня достаточно сложен и хорош, поэтому для него и требуется компилятор в N -проходов, а если меньше - будет сильно хуже!"
Вирт взялся доказать, что можно построить очень качественный и пригодный для реального программирования язык высокого уровня с компилятором, работающим в ОДИН проход. У него получилось!
Паскаль весь насквозь построен так, чтобы по первому же читаемому компилятором из входной строки символу было бы понятно, какая лексема далее ожидается, и чтобы никакая штуковина не использовалась бы в программе раньше, чем её интерфейс будет полностью известен. Компилятор Паскаля реально можно написать в однопроходном варианте Это - фантастика для тех времён! 
И одновременно... Реакция программистского сообщества: "Нуу.. И зачем вам такой однопроходный компилятор? Просто ради прикола? Стопяти-проходный транслятор у нас вышел бы ничуть не хужее, если бы мы только его вчерась дописали. И вообще, этот Вирт - просто академический теоретик, ничего сам не сделал, только по своим Швейцариям шлялся". 

- А ты, Ёж?
- Так я уже сказал, Шеркало! В Алголе - я откровенно запутался. А вот логика Паскаля - сразу мой мозг распрямила. Дальше учебные программы писал почти только на Паскале.

пятница, 7 января 2022 г.

Шеркало 05.04: любимые системы программирования (Алгол-60 ч.3, Фортран-IV)

 - Так вот, я и говорю: Алгол, на котором нас учили писать учебные программы, стал мне постепенно надоедать...

- ОЙ!!! КТО здесь?!!

- Тихо, Шеркало, чего ты испугалось? Это же я, Ёж.

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

- Ближе к концу 9-го класса школы, в 3-й четверти, я чем-то, уж не помню чем, серьёзно заболел. Меня целую неделю с хвостиком, может даже полторы недели, не выпускали из дома в школу, да и температура около 39-40 градусов держалась. Мне было очень скучно лежать большую часть времени под одеялом, да и мозги при температурах, близких к точке свёртываемости крови, работают совсем иначе, чем в прохладе. В итоге, я схватил попавшийся под руку учебник по языку Фортран-IV - это весьма древняя версия Фортрана, примерно начало 1960-х годов, но именно она тогда чаще всего использовалась учёными в ИОА. 

Я очень внимательно изучил этот учебник насквозь. Компьютера у меня дома возле кровати под рукой никакого конечно не было, даже программируемого микрокалькулятора не было, но возбуждённое повышенной температурой состояние мозга, на которое ещё накладывалось то, что в качестве жаропонижающих мне давали не только обычный парацетамол, но и, для разнообразия, димедрол с молоком (тогда - общепринятая практика), позволяло мне писать достаточно сложные программы (для начального учебного уровня конечно, "сложные") прямо в уме, в собственной памяти, даже без записи в тетрадь. Позже, после выздоровления, я в ИОА получил возможность реально набрать (или заказать на перфокартах) некоторые из моих "бредовых" фортрановских программ, и запустить их на БЭСМ-6 или на М4030. После исправления незначительных ошибок, они оказались вполне работоспособными.

- Ну и какое было впечатление о "настоящем, промышленном" языке программирования?

- Какое моё основное впечатление о Фортране (подчеркну, о ранних версиях Фортрана, до конца 70-х годов)? Впечатление очень простое: Фортран - очень IBMовский язык! Фирма IBM изначально ведь делала не компьютеры! Она прежде всего прославилась своими табуляторами и сопутствующим перфокарточным оборудованием. Как в анекдоте: "Что бы не делали в СССР, гречневую кашу или, например, туалетную бумагу, а всё равно на выходе автомат Калашникова получается". 

Так вот, что бы не делала фирма IBM, вплоть до почти середины 1970-х годов, у неё всё равно в итоге получался табулятор, ориентированный на работу с перфокартами. Язык Фортран - он исходно весь сплошь перфокарточный. Там единица языка отнюдь не оператор. Единица языка - строка в 80 символов, разбитая на зоны колонок (читай - ПЕРФОКАРТА!). я даже не хочу здесь картинку типичной фортрановской программы приводить. 5 колонок отведено под метку (она же - тупо номер строки). Одна колонка - признак строки-продолжения предыдущей. Далее идёт сам оператор (или информация), в идеале - один оператор = одна перфокарта. Последние 8 символов строки(карты) транслятор игнорирует - теоретически это место предназначено для маааленького комментария, но на практике, некоторые ранние модели перфосчитывателей/перфораторов просто часто допускали сбои чтения/записи в этих колонках (карта на выходе из тракта механически плохо удерживалась, вихлялась) проще было эти колонки тупо принудительно пропустить, чем потом ошибки ввода/вывода отлавливать. 

Весь ввод и вывод такой же - таблицы, представляющие собой отформатированные по колонкам перфокарты. Многочисленные операторы FORMAT, определяющие форму ввода/вывода отдельных строк в общей структуре таблицы. Отдельные извращения с текстовыми константами в этих форматах - константы Холлерита, ага, прекрасный решение костыль.

Структура программы? Что? Какая структура? А ЗАЧЕМ она?! Зачем какая-то структура, если вся программа построчно УЖЕ заранее пронумерована (ну, или она МОЖЕТ быть вся пронумерована, поскольку каждая перфокарта в колоде заведомо уже имеет свой уникальный номер по определению). Просто говорим, какой номер строки будет следующим оператором, и всё, без особых изысков. Типичное наследие ранних компьютеров с 3-х адресной системой команд - там третий адрес как раз был адресом следующей выполняемой операции...


- Ой, Ёж, я заслушалось. прости. Так какой вывод? Традиционный вопрос, что там у тебя было к Фортрану насчёт любви?

- Нет, Шеркало, к Фортрану никакой любви у меня ни чуть-чуть не было. Да и программы я на нём почти не писал - не представлялось никакого смысла. А вот УВАЖЕНИЕ к этому языку, я получил на полную катушку. Ещё раз напомню, изначально выбор между двумя возможными языками обучения школьников, Алголом-60 и Фортраном-IV, для меня был очевиден: конечно же современный Алгол на порядок лучше заведомо устаревшего Фортрана! А вдруг оказалось, что всё не так очевидно.

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

Преимущества Фортран - никакой шизофрении, всё чётко определено и предсказуемо (правда, только до следующей версии, но это же другое. не так ли?). Железная логика программы. Качественно прописанный (хотя и жутко тяжеловесный, ну, так поищите лучше!) табличный ввод/вывод. Куча готовых вычислительных подпрограмм на научную тематику. Недостатки Фортран - никакого структурного программирования! Забудьте о современных парадигмах программирования вообще!!! Только перфокарты  Если у вас вдруг уже есть терминалы для непосредственного доступа к компьютеру- значит эти ваши терминалы будут просто эмулировать устройства чтения или печати перфокарт. Забудьте о функциональном программировании, забудьте о рекурсиях вообще!

Ну, о работе с символьной информацией ещё более отдельный вопрос. Ни в Алголе, ни в Фортране этого не было совсем! Потом добавлялось, но опять же, смотри ниже итог... А символы и строки были реально нужны и интересны.

Итог? Ничья, 1:1. Алгол-60 и Фортран-IV оказались примерно шилом с мылом в одном мешке. То, что наши преподаватели предпочли Алгол - совершенно нормально. Структурное программирование в плане обучения школьников перевесило достоинства Фортрана. Однако, вряд ли такое решение было принято легко и единогласно. То, что учёные ИОА в большинстве тогда предпочитали Фортран - тоже абсолютно нормально. Им ведь формулы быстрее считать надо было и таблички рисовать, а не шашечки на полировке структурного программирования разглядывать. А готовых библиотек для расчёта разных формул у Фортрана было явно больше, да и табличный ввод/вывод - вполне развитОй.

вторник, 4 января 2022 г.

Шеркало 05.03: любимые системы программирования (Алгол-60 ч.2)

 - Подъём в погранистических войсках! Давай, Ёж, просыпайся и рассказывай, чем тебя тогда Алгол-60 разочаровал? Все же его вроде всегда хвалили, говорили, что он на кучу современных языков программирования прямо чуть ли не решающее влияние оказал? Что, врали?

- Нет, конечно не врали, влияние точно оказал... Дело в том, что Алгол изначально создавался не как практически реализуемое на компьютерах средство написания реальных программ, а скорее как удобная форма обмена (на бумаге в первую очередь) алгоритмами между учёными-математиками разных стран мира. Такой, вроде, алгоритмический язык "Эсперанто", псевдо-код для интуитивного понимания. А его практическое использование конечно подразумевалось, но только во вторую очередь. Наверное надо привести для примера картинку с текстом программы на Алголе:

Это не реальный текст с компьютера, это картинка из книжки. Можно сразу обратить внимание на несколько моментов:

1. Некоторые слова выделены жирным шрифтом - это ключевые слова языка (служебные слова). Разработчики Алгола считали, что служебные слова всегда должны ЯВНО отличаться от остальных слов. При бумажных публикациях их выделяли шрифтом, как в этом примере. А на реальных компьютерах, где не предусмотрено несколько различных шрифтов?

2. Программа (точнее процедура) красиво оформлена пробелами. Каждый оператор, каждый блок, выделяется своим уровнем отступа от левого края текста - так легче читать.

3. Меня лично немного фрустрирует заголовок процедуры (первая строка). Я с первой (да и со второй тоже) попытки не могу понять, что в контексте процедуры означают слова "Absmax, Size, Result, Subscripts". В каких случаях и для чего каждое из этих слов можно использовать, почему они не разделены запятыми или другими знаками препинания, в каком отношении друг к другу состоят? Почему "(n,m)" следует после "Size" кажется вроде понятно, но почему тогда "(a)" следует именно за "Absmax"? В этом какой-то скрытый смысл или случайное совпадение? А пара "n, m" в описании повторяется аж три раза. Это важно? Можно было повторить больше или меньше раз? А если описания в другом порядке переставить, что-то сломается или нет?

А теперь приведу другой пример, уже не из книжки. Это пример реального текста программы на Алголе-60 для реального компьютера. Мы запускали на БЭСМ-6 примерно вот такие программы:

'PROCEDURE'EULER(FCT,SUM,EPS,TIM);'VALUE'EPS,TIM;'INTEGER'TIM;'REAL' 'PROCEDURE'FCT;'REAL'SUM,EPS;
'COMMENT' EULER COMPUTES THE SUM OF FCT (I) FOR I FROM ZERO UP TO INFINITY BY MEANS OF A SUITABLY REFINED EULER TRANSFORMATION;'BEGIN''INTEGER'

          I,K,N,T;'ARRAY' M(/0:15/); 'REAL'MN, MP, DS;        I:=N:=T:=0;M(/0/):=FCT(0);SUM:=M(/0/)/2;NEXTTERM:I:=I+1;MN:=FCT(1);'FOR' K:=0'STEP'1'UNTIL'N'DO''BEGIN'MP:=(MN+M(/K/))/2;M(/K/):=MN;

            MN:=MP'END'MEANS;
    'IF' (ABS(MN)'LESS' ABS (M(/N/))'AND'N'LESS'15)'THEN'
 'BEGIN'DS:=MN/2;N:=N+1;M(/N/):=MN'END'ACCEPT'ELSE' DS:=MN;SUM:=SUM+DS; 'IF'ABS(DS)'LESS'EPS'THEN'T:=T+1'ELSE'T:=0; 'IF'T'LESS'TIM'THEN''GOTO'NEXTTERM'END'EULER;

Что в этом тексте бросается в глаза, по сравнению с первой картинкой?

1. Нет никаких выделений жирным шрифтом, зато есть масса рассыпанных по тексту знаков апострофа ('BEGIN''END''FOR''INTEGER' и т.п.). Всё правильно. Выделение служебных слов в Алгол-60 никто не отменял, а раз не получается выделять их шрифтом (ну нет такой возможности у БЭСМ-6!), значит будем выделять чем-нибудь другим, например апострофами спереди и сзади. А то,  что от этого леса кавычек рябит в глазах, и текст становится крайне плохо читаемым, ну так это мелкие побочные эффекты. просто нужно немного привыкнуть.

2. Бросается в глаза полное отсутствие форматирования текста. Никаких отступов, операторы начинаются где попало, разрываются на строки как попало и т.д. Нет, вот это вовсе не есть обязательная фишечка. На реальных компьютерах нам никто, разумеется, не запрещал писать красиво структурированные тексты программ со всеми полагающимися отступами. Но вот...

Вот ты - неопытный школьник. Тебя посадили за терминал ЭВМ. Включили тебе простейший текстовый редактор. У тебя на ввод и прогон своей учебной программы есть ровно 30 минут! Через 30 минут тебя просто вышвырнут из терминального класса за шкирку, независимо от результата работы, а там жди неделю до следующего захода в класс. Текстовый редактор обеспечивать автоформатирование текста ещё не научился, а ты сам работаешь на клавиатуре пока ещё в "двухпальцевом" режиме. И что ты будешь делать? Будешь старательно ручками выравнивать каждый оператор по началу строки нужным количеством пробелов (считая пробелы в уме), или постараешься как можно быстрее ввести текст программы без всякого форматирования, "лишь бы заработало"?  По-моему, ответ очевиден. Плюс к тому, даже если и попытаешься сначала соблюдать отступы, то при первом же исправлении ошибок всё форматирование всё равно съедет вкривь. А исправлений (по неопытности) будет много, а терминального времени катастрофически не хватает.

3. По третьему пункту, я там на верхней картинке придрался к структуре заголовка процедуры. Это понимание приходило с опытом. Постепенно даже мне (школьнику) становилось ясно, что Алгол-60 в некоторых местах - это просто какая-то дичайшая шизофрения группы разработчиков под девизом "Лебедь+Рак+Щука=Поехали". Недаром многие нормальные люди, включая Никлауса Вирта, из этой группы быстро сбежали.

Могу просто привести цитаты из официальной документации на Алгол-60:

4.7.6 Метки в качестве параметров

 Метка может вызываться значением, несмотря на то, что не существует переменных типа метка.

4.7.7 Ограничители параметров

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

Перевожу на русский с брюссельского:

"Мы тут придумали очень красивые заголовки для передачи параметров в процедуры, но вы на них не обращайте внимания, поскольку они в нашем языке полностью избыточны и реализованы никогда не будут. А ещё у нас есть метки, которые являются переменными, поэтому могут передаваться по своему значению, но переменных которые бы принимали значения меток у нас в языке нет и не будет. Что? Куда можно присвоить значение того, для чего нет переменной? Гусары молчать! Его можно присвоить параметру процедуры, а уж он как-нибудь там сам внутри процедуры разберется, как передать своему формальному параметру значение, которого у того просто не может быть. Неувязочка получается, говорите? А нам пофигу на эту неувязочку. Мы здесь СТРАТЕГИЕЙ развития науки программирования занимаемся, вотъ! А над неувязочками пусть потом конечные пользователи головы ломают, им жить с того веселее будет.".

Это, повторяю, не моя шизофрения, это - дословные цитаты из официальной (одобренной международным учёным комитетом) документации на Алгол-60.

Понятно, что такие подробности я никак не мог заметить сразу, при начале обучения. Но постепенно, начал на подобные "неувязочки" натыкаться. В первую очередь стало мешать обилие апострофов, щедро рассыпанных по всему тексту, застилающих смысл решаемой задачи. Потом свою роль сыграла и синтаксическая сложность деклараций, которые в Алголе распределены по нескольким строкам, и далеко не всегда взаимоувязаны между собою.

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

понедельник, 3 января 2022 г.

Шеркало 05.02: любимые системы программирования (Алгол-60)

 - Итак, Шеркало, не отвлекайся!

- Я внимательно внимаю, о, Ёж!

- Я вспоминал о своей школьной учёбе в старших классах на УПК (учебно-производственный комбинат) в НИИ ИОА (Институт Оптики Атмосферы). И нашими преподавателями были назначены простые нормальные сотрудники института, а школьного предмета "Информатика" тогда ещё не придумали, никаких учебных программ не было. Так вот, эти преподаватели собрались вместе и стали думать думу, как бы так нас получше выучить, когда никто не знает - как.

- Чего-чего?

- Ты, не отвлекайся! Это я просто так додумываю. Меня, школьника, никто на их совещания не приглашал. Но по результатам ведь можно попытаться угадать исходную задумку?

Основная идея была красивая и абсолютно правильная: "Наших детей нужно обучать программированию не в "бумажном" режиме (карандашом в тетрадке и мелом на доске), а на настоящей "взрослой", работающей ЭВМ!" А подходящая для обучения школьников ЭВМ в то время в институте была лишь одна - БЭСМ-6. Только она обладала и нужными вычислительными ресурсами, и достаточной надёжностью, и работающим терминальным залом с разделением времени. Все остальные компьютеры либо ломались и зависали через каждые 30 секунд (ЕС ЭВМ и другие клоны IBM/360), либо были слишком маломощны (ранние СМ ЭВМ и младшие клоны PDP-11), либо в институте не было ни единого специалиста, который бы знал, где у этой ЭВМ кнопка "ВКЛ/ВЫКЛ", и с какой стороны в неё программа вставляется (МИР-2). А персональных компьютеров тогда в городе вообще практически ни у кого и не было.

Итак, должна быть выбрана БЭСМ-6, плюс настоящий "взрослый" язык программирования. А вот таких языков в ИОА на БЭСМ-6 было в те времена ровно две штуки - Фортран и Алгол-60. Нет, в институте при желании и необходимости использовали и другие языки (например набирающий популярность на мини-ЭВМ минималистичный язык "С", или стремительно теряющий популярность ассемблер IBM/360, или слывущий исключительно учебным языком "Pascal", или даже совсем экзотический "Forth"), но мэйнстримом для научных сотрудников были именно Фортран (бОльшая доля), и Алгол-60 (меньшая часть). Так какому же языку учить детей, чтобы не ошибиться?!

Наши преподаватели вполне ожидаемо предпочли Алгол-60. На тот момент я с ними был полностью согласен. Фортран, хотя и активно использовался учёными, из-за наличия кучи готовых пакетов математических процедур, но для обучения программированию выглядел уж слишком архаично. Алгол всё-таки был практически современным, структурным языком. Вот так и получилось, что нас стали на УПК учить Алголу-60, в одной из реализаций на БЭСМ-6 (кажется, это был Алгол-ГДР, но могу ошибаться). Мы писали программы на Алголе в обоих доступных режимах: и сами вводили руками с клавиатуры терминала, тут же запуская на трансляцию и выполнение, получая через несколько секунд результат на экран, и, если программа предполагала сколь-нибудь длительный счёт, или вывод более 20-30 строк, то в пакетном режиме. 

О пакетном запуске, конечно нужно рассказывать отдельно, сейчас такое и не увидишь. Нам выдавали специальные типографские бланки, разбитые клеточками на строки по 80 клеточек в каждой строке. Мы писали текст программы обязательно заглавными латинскими буквами, обязательно по одному символу в каждой клеточке, обязательно строгим печатным шрифтом. Потом складывали бланки со своими программами каракулями в специальную картотеку с отдельными пронумерованными ячейками (как сумки на входе в супермаркет, только ячейки меньшего размера и ключиком не запираются). Бланки по очереди забирали из картотеки операторы клавишного ввода (они уже сидели в закрытой машинной зоне, куда никого постороннего не пускали). Операторы ввода печатали программы с наших бланков руками на клавиатуре перфоратора. 

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

Полученную колоду перфокарт нужно было проверить на правильность пробивки. Можно и не проверять, конечно, но предварительная проверка могла в будущем сильно сэкономить время на поиск ошибок. В начало и конец колоды подкладывали несколько дополнительных перфокарт, которые определяли способ запуска программы в пакетной очереди. Часто эти дополнительные карты были одинаковы для разных программ - их просто перекладывали из предыдущей колоды в новую. Затем колоду перевязывали, чтобы карты не рассыпались и не путались. Обычно, для перевязки использовали не верёвочку, а резинку от трусов - так нивелировалась переменная толщина колоды. Чтобы перфокарты (тонкий картон) не гнулись от действия тугой резинки, с двух сторон колоду обкладывали твёрдыми пластмассовыми "щёчками" - их дома самостоятельно выпиливали лобзиком по размеру перфокарты, из фанеры или текстолита, что уж находилось...

Собранную колоду перфокарт складывали "на выполнение" в свободную ячейку другой картотеки перед входом в машинный зал. А на утро следующего рабочего дня забирали из этой ячейки свою колоду с результатом работы - распечаткой на бумаге. Кстати, во времена БЭСМ-6 термин "принтер" для устройства распечатки текста у нас не применялся. Эта штуковина называлась АЦПУ (Алфавитно-Цифровое Печатающее Устройство), размером оно было с приличный комод (или целых два комода), грохотало, как слегка поломанный тяжёлый танк, жрало с огромной скоростью и в невероятных количествах ленту широкоформатных бумажных листов, с перфорацией (для равномерной протяжки бумаги) по бокам. Сами листы отделялись в ленте один от другого тоже перфорацией, поперечной и мелкой, как на рулоне туалетной бумаги.

До сих пор не могу забыть то невероятно острое чувство стыда, когда я пришёл забирать результаты прогона своей очередной учебной программы и обнаружил, что моя ячейка в картотеке пуста. Но тут же открылась дверь машинного зала, начальник дежурной смены обслуживания БЭСМ торжественно подошёл ко мне, держа в руках огромную стопку листов бумаги формата А3, сплошь испечатанную бесконечными строчками нулей: "Вот результат, выданный твоей программой! Это мы бесконечный цикл ещё по времени выполнения прервали, а то и больше могла бы напечатать". Пачка бумаги весила, кажется, немногим меньше 10 кг. Я буквально готов был "провалиться в ад", а вокруг стояли сотрудники института (большинство незнакомые), аплодировали. и, улыбаясь. поздравляли меня с установлением очередного месячного рекорда по бесполезному расходу бумаги. Никогда больше я не позволял себ...


- Ёж, ты кажется опять слишком увлёкся! Что там про Алгол-60? Что там про любовь, была или нет?

- Вот чёрт! Шеркало! Умеешь же прервать меня на самом интересном месте!

- Так это... Обработка прерываний - одна из базовых функций любого нормального компьютера. Учись, значит, прерываться!

- Чёрт, чёрт! Про какой ещё Алгол-60? Про какую ещё любовь?! Ах, да, там в заголовке текста так написано... Ладно, так и быть. Была у меня любовь к Алголу-60, была не спорю. Но она... самоликвидировалась, вот!

- Чтоооо?!

- Считай, что это была не любовь, а юношеская влюблённость. Мне действительно весь первый год моей учёбы (9-й класс школы) очень нравился Алгол. Изящный, быстрый, структурный. Да к тому же и "ты у меня ПЕРВЫЙ" (ну, почти первый). Но постепенно я начинал изучать (большей частью самостоятельно и по своей собственной инициативе) другие языки программирования. И тут-то моя любовь к Алголу начала так же постепенно меркнуть. Впрочем, об этом в следующем рассказике.

- Эй, стой! Ты хоть пример программы на Алголе-60 здесь выложи! По традиции, а?

- Не хочу. Постараюсь в следующем рассказе дать пример, чтобы стало понятно, из-за чего разочаровался.

воскресенье, 2 января 2022 г.

Шеркало 05.01: любимые системы программирования (Рапира)

 - Миша, звал7

- Хм. Кажется звал. Хотя, это было в моём сне. Только не называй меня "Миша", пожалуйста, Шеркало.

- А как надо?

- Называй меня, например, Ёж!

- Вот нифигасе! Впрочем, как скажешь, Ёж. Так для чего ты меня звал? В прошлый раз, кажется, хотел что-то про язык Паскаль рассказать?

- Я уже передумал!

- А что, и так можно было, а, Ёж?!

- Не ёрничай, Шеркало! Я решил немного расширить тему. Просто молчи, слушай и отражай, если пожелаешь. Ты, знаешь, у людей есть такое понятие - "первая любовь". Это, когда то, что первый раз тебя впечатлило, становится потом идеалом на всю оставшуюся жизнь, даже, если объективно это вовсе и не идеал.

- Ну, Ёж, ты меня порадовал. Ты мне, своей зеркальной тени, пытаешься объяснять, что такое "импринтинг" (оно же "запечатление")?! И, кстати, ты ошибаешься, если полагаешь, что импринтинг свойственен лишь людям. Да, многие приматы эту фишечку при воспитании детей активно используют, но и другие млекопитающие тоже, и очень многие птицы. Да и рептилии тоже, хотя учёные это пока вроде бы не особо исследовали...Я уверено - у горгонопсов перед великим пермским вымиранием импринтинг уже заметную роль играл. Впрочем доказывать не берусь.

- Ладно, можешь не доказывать. Всё равно тебе не поверят. А я вообще о другом хотел вспомнить - о первом своём языке программирования.

- И что же это было? BASIC наверняка?

- Ошибаешься! Моим первым языком программирования была "Рапира". Выглядела она примерно вот так:









Вот только работала эта самая Рапира исключительно на компьютерах "Агат" (первый раз нам её показали на импортном компьютере "Apple II+" (с которого тот Агат и пытались тогда в СССР копировать)). А у нас в Томске ни Агатов, ни Apple'ов под рукой не было. Правда, там по ссылке в Википедии говорят, что существовал транслятор Рапиры для машины БЭСМ-6 (которая у нас как раз была), но вот я лично его не видел. В итоге, толком поработать на Рапире мне и не довелось. Но, кажется, сожалеть о том не нужно.

- Прям совсем уж примитивно было?

- Нет, Шеркало, не совсем. Рапира была по-сути студенческой разработкой в Новосибирском Университете (НГУ). Так тогда было модно. Для сравнения с западом скажу, что и язык Паскаль (и его развития Модула и Оберон), тоже были студенческими университетскими разработками, получившими популярность благодаря руководящей и направляющей руке Никлауса Вирта. И супер-популярный ныне Python - тоже изначально студенческая разработка. И Рапира была в том же ряду, ничуть не хуже! Если бы развивалась - могла бы стать в один ряд с Python, во всяком случае идеи там очень похожие (только отступов в Рапире не предусмотрели). Но разнице в уровне и в судьбе научных руководителей предопределила разницу в судьбе языков.

А амбиции были! Как тебе "Марш разработчиков Рапиры"?

Мы рождены, чтоб сказку сделать былью,
Чтоб мир забыл про Бейсик и Кобол.
Нас Крокодил вооружил Рапирой,
НИИ ВК дал каменный топор.

Все шире, и шире, и шире
Становится день ото дня
Любимая наша Рапира -
Система грядущего дня.

Рапиры штык вонзался в каждый атом,
Ее булат прочнее всех мечей.
И в нужный час монбланы из АГАТов
Переломаем в горы кирпичей.

Все реже, и реже, и реже
Развалы в системе у нас.
И каждая строчка содержит
Теперь вычислительный класс.

Швыряя ДОС и Бейсик в бокс позорный
И наблюдая плавный их полет,
Мы без гроша оставим Commodore'а,
А фирму Apple пустим на компот.

Все ближе, и ближе, и ближе
Побед и триумфов черед.
Пусть в Риме, Нью-Йорке, Париже
Увидят Рапиры восход !

- Мощно, Ёж! Это ты сочинил?

- Ну что ты! НЕТ конечно, это типичная студенческая песня, сочинена группой разработчиков Рапиры.

- А при чём тут НИИ ВК? И что такое крокодил?

- НИИ ВК - это контора, которая с переменным успехом разрабатывала компьютеры "Агат". Агаты предполагались для поставки в школы, в качестве учебных школьных компьютеров. И Рапира предполагалась одним из основных языков программирования для этих компьютеров. Кстати, более поздние версии языка Рапира (я их, к счастью, уже не застал, а то бы очень расстроился) сильно напоминали по синтаксису "Е-практикум", он же "Учебный алгоритмический язык" Ершова - псевдо язык программирования, для описания алгоритмов в школьных учебниках Информатики.

А Крокодил - не что, а кто. Это кличка, прозвище, Геннадия Анатольевича Звенигородского, человека, который как раз и руководил студенческой группой, создававшей Рапиру. К огромному сожалению, Г.А. Звенигородский скоропостижно умер в 1984 году, после чего развитие Рапиры было практически полностью свёрнуто. 

Но у нас в Томске, никаких Агатов тогда не было (их на тот момент - вторую половину 1983 года, если правильно помню - и 10 штук на весь СССР сложно было бы найти), как и уроков Информатики тоже не было, их ещё не придумали. У нас были стандартные для школ того времени уроки труда в старших классах - назывались "Учебно-производственный комбинат" (УПК), этакая якобы близкая к жизни трудовая практика на реальных предприятиях перед выпуском из школы. А поскольку наша школа располагалась в академгородке, то одним из предлагаемых вариантов УПК оказалось обучение программированию на реальных живых компьютерах в одном из НИИ - Институте Оптики Атмосферы (ИОА). Следует заметить, что школьного предмета "Информатика" в то время ещё НЕ существовало, мы занимались на компьютерах именно в рамках УПК, отнимая дефицитные вычислительные ресурсы у сотрудников НИИ. Преподавали нам тоже не профессиональные педагоги, а на "общественных началах" обычные научные сотрудники и инженеры ИОА, причём программу обучения они кажется тоже разрабатывали самостоятельно.

- Ёж, погоди, не уклоняйся от темы! Ты начал про "первую любовь", вроде? Так всё-таки Рапира была твоей любовью, или, как ты выразился, "толком на ней и не поработал"?

- Второе, точно. Рапира к числу моих любовей, пожалуй, не относится. Да и померла она слишком быстро, развития так и не получила. Хотя, повторюсь, перспектива у неё чисто теоретически была, уровень идей, как и уровень реализации, был круче раннего Python. А про любовь продолжим в следующий раз.


Продолжение от 2022 года.

Собственно, в этом месте я хотел закончить свой рассказ о языке Рапира. В самом деле, что я мог ещё сказать? Мой личный опыт использования Рапиры закончился в 1985. Сам язык смерти своего вдохновителя Г.А. "Крокодила" Звенигородского, очевидно тоже не пережил, и скончался тогда же, в середине 1980-х. Так о чём ещё говорить?

Но что-то странное продолжало меня беспокоить. Чем дальше, тем сильнее. Рапира давно мертва, на ней точно никто ничего не пишет, но почему же я вижу её следы в текстах программ моей дочки? И ведь чем дальше, тем более ясные и вовсе не призрачные следы! Прямо мистика, и мурашки по коже!!!

Ответ я нашёл, мистика исчезла. Всё оказалось очень прозаично. Наследник нашёлся. Это язык Python (даже упомянутый мной выше и раньше), на который я уже писал шуточную рецензию. Python вовсе не зомби, это вполне современный, очень популярный, весьма распространённый язык. Просто между началом популярности Python и концом Рапиры прошло больше десятилетия очень бурного развития отрасли ИТ. Сложно было сразу заметить явную связь между языками из разных эпох. А всё просто:

В Википедии, в статье про язык Рапира, говорится, что он основан на двух более ранних языках (цитата):

"... Язык построен на основе объединения возможностей языков Сетл и Поплан. Изначально был реализован как набор макрорасширений на базе языка Поплан — интерпретатора языка POP-2 ..."

В более раннем варианте вики-статьи Сетл кажется даже не упоминался (могу ошибаться, но меня именно отсутствие упоминания Сетл тогда удивило, поэтому и запомнилось!) - только Поплан. На самом деле в Рапире от Поплана нет почти ничего, разве лишь странное присваивание "слева-направо" - оно именно из Поплана взято. А вот Сетл - реальный духовный предшественник Рапиры.

А что мы знаем про Сетл? Ну понятно, есть статья в Вики, но гораздо интереснее воспоминания с новосибирской стороны из Компьютерного музея. Оказывается, Сетл был хорошо известен и высоко оценен в СССР в целом, и в Новосибирском Академгородке в частности. И было очень продуктивное международное сотрудничество по доработке, развитию и применению этого языка и положенных в его основу идей! Но в 1980 Брежнев приказал ввести войска в Афганистан. Всякое международное сотрудничество между программистами СССР и США с этого момента мгновенно прекратилось.

Что было дальше? Язык Сетл к тому моменту был большей частью БУМАЖНЫМ языком. Никаких промышленных реализаций не было, до них дело не дошло. Только чистые демонстраторы перспективных идей в форме алфа- бета- версий с крайне ограниченной функциональностью для подсветки светлого будущего. Развивать эти идеи на западе и в СССР продолжили независимыми путями.

Со стороны СССР осталась, в частности, новосибирская команда академика Ершова, в которую был приглашён лидером (не сразу лидером, сначала МНС, как водится) молодой перспективный Звенигородский. Эта команда, сначала формально следуя довольно шаблонно-традиционным рамкам системы Школьница, тем не менее рискнула выдвинуть к вниманию руководства абсолютно революционную на тот момент Рапиру.  Проблема была в технической базе - ну никак НЕ укладывалась Рапира (да и вся Школьница тоже) в технологии ВЦ на базе БЭСМ-6. Как манны небесной ждали появления персональных компьютеров, прежде всего надеялись на обещанные промышленностью Агаты. Агаты появились на пару лет позже, чем их в самом крайнем случае ожидали, при этом показали себя не только запоздалыми, но и зашкаливающе деьмовыми! Тем не менее, даже на фоне этого невменяемого дерьмищща, Рапира смотрелась, как яркий луч надежды. Даже на Агатах она блистала изящными возможностями - только дайте этой талантливейшей команде разработчиков чуть-чуть более надёжную и современную среду, вот там-то уж можно будет развернуться!

Смерть Звенигородского совпала с внедрением первых серийных Агатов. Страна шла к развалу. А тут ещё и смерть академика Ершова. Рапира больше никого не интересовала.

А что со стороны Запада? Коммерсанты там тоже Сетл не поддержали (впрочем, с самого начала и не собирались). Но Университетская среда Сетл оценила высоко. В том числе, планировали использовать идеи Сетл в системах обучения студентов. Для этого, в частности, разработали специальный язык программирования ABC. Вы, возможно, несколько удивитесь, но в разработке языка ABC на младших ролях активно участвовал некто по имени Гвидо ван Россум. ABC, в отличие от Сетла был отнюдь не бумажным языком, его вполне реализовывали силами студенческих команд. Другой вопрос, что и функциональность реализуемого языка была более-менее близка к учебной, а не к промышленной.

Ну а потом была опять же учебная ОС Амёба, где тоже приложил руку ван Россум. А ещё позже, понадобился новый скриптовый интерпретируемый язык, но уже промышленного уровня. И этот самый Гвидо ван Россум предложил такой язык, благо он подобные штуки проходил к тому времени уже не раз и не два....


Вот и имеем результат. Python известен повсеместно. Рапиру не знает никто. Кстати, Сетл тоже никто не знает, но это и справедливо - Сетл никогда не был реализован в приемлемой конфигурации. А вот Рапира - таки была реализована.

Только Геннадий Анатольевич "Крокодил" Звенигородский, родился не совсем в том месте и не совсем в нужное время. Ещё хуже, умер он совсем уж точно не в нужное время.

А Гвидо ван Россум, вероятно, родился когда и где надо. Поэтому все учат Python, но никто не помнит Рапиру.

понедельник, 27 декабря 2021 г.

Шеркало 05: FoxPro

- Что-то ты давно меня не вызывал?

- Да другим делом решил позаниматься... ностальгическим. Вспоминал FoxPro for DOS. Помнишь такую систему, Шеркало?

- Не очень. Моё дело ведь тебе тебя отражать, а не помнить и думать. Это кажется такая система управления базами данных в древности была?

- Как бы тебе объяснить? И да, и нет. Изначально это была именно небольшая система управления базами данных (СУБД) под MS-DOS на весьма ещё маломощных тогда персональных компьютерах (ПК). Называлась она тогда ещё FoxBase+ и была не очень лицензионным клоном более ранней и более популярной СУБД dBaseIII+ (там какие-то судебные разбирательства у них были, впрочем, мне это неважно). Постепенно Fox приобретала всё больше индивидуальных, уникальных особенностей. Очень быстро dBase и другие её клоны остались даааалеко позади (с моей личной точки зрения, конечно).

В первой половине 1990-х годов FoxPro, на мой взгляд, превратилась в потрясающе мощную комплексную систему программирования. Там был очень приличный скриптовый язык программирования, полноценный оконный интерфейс с мышкой, кнопочками, менюшками, шорткатами, списками, поп-апами, прочим необходимым (свёртывание, развёртывание, перетаскивание, изменение размера, перекрытие окон)). Да, это всё в псевдографике, но, во-первых, тогда ничто иное по цене и не прокатывало, а во-вторых, весьма адекватно работало. Была встроенная База Данных. Причём вполне "взрослая", Настоящая реляционная БД со всеми необходимыми функциями, с сетевыми возможностями, по качеству и скорости как минимум не уступавшая лучшим конкурентным системам. Там же встроенная система быстрой разработки приложений - Rapid Application Development (RAD), ставшая популярной в других системах программирования несколькими годами позже. Встроенные визуальные редакторы форм ввода, отчётов вывода, диалоговых окон, меню разных уровней, исполняемых модулей, зачатки (а нужно ли большего для простого скриптового языка?!  объектно-ориентированного программирования), всё это в единой универсальной системе редактирования приложения! Мощные и гибкие средства работы не только с БД, но и с произвольными файлами, в том числе с произвольными текстами. 


- И, понимаешь, Шеркало, ВСЁ ЭТО - совершенно "из коробки"! Не нужно ничего дополнительного подключать, не нужно дозагружать, не нужно допокупать, не нужно ничего специально настраивать. Всё работает уже сразу после инсталляции. А! Кстати, насчёт инсталляции. Не было никаких вопросов, чтобы отдать кому-то работающую версию моей программы. Не нужно было там, на чужой стороне что-то такое жутко сложное и требующее внешней лицензии инсталлировать! 
Клиенту просто копировался один исполняемый файл *.exe (правда, довольно большого размера), либо три файла - один маленький исполняемый файл *.exe плюс две библиотеки (суммарным размером, как тот большой файл). А дальше у него всё само собой работало! 
Понятно, что я не мог не полюбить этого! Дааа...

- Это всё очень интересно. И про начало 1990-х годов, и про FoxPro, и про эти, как их, "БД"?... А МНЕ то ты чего сказать хотел?! Ты же зачем-то МЕНЯ сюда вызвал.

- Да, Шеркало, конечно. Дело в том, что для меня FoxPro в то время реально был одним из наиболее востребованных инструментов. Тем, чем пользуешься буквально каждую минуту рабочего времени. И я умел им пользоваться в совершенстве! Это была система, в которой я мог за единицы минут реализовать прототип любой программы!

И вот, сейчас я его запустил снова. FoxPro работает точно, как и раньше. Те же ограничения - только DOS, нет WinAPI, нет знакомых фреймворков (зато незнакомые есть - FoxPro, это по сути и есть очень мощный фреймворк поверх более ранней FoxBase, только ТСССС! Никому не рассказывайте! Там кроме фреймворка поверх FoxBase ещё много чего добавили, включая абсолютно потрясающий по скорости движок БД),  нет современной модели Объектно-Ориентированного-Программирования, точнее она есть, но стыдливо прикрыта скриптовыми "хвостиками" к традиционным командам. То есть, вроде как ООП в FoxPro якобы и нету. 

Но тут я начинаю объяснять своему начальнику работу очередной моей программы: 
- Вот эта процедура сработает по вот тому событию, а этот код - вот по этому событию, но только, если мышкой ткнуть, а на кнопку с клавиатуры совсем другой код будет реагировать, там другой сценарий предусмотрен, но в итоге обработка сведётся вот к таким-то действиям...
- О! Вот это я понимаю! Это и есть то самое ново-модное Объектно-Ориентированное-Программирование! - начальник многозначительно поднимает палец, улыбается и понимающе кивает.
- Нет, не совсем... Это же FoxPro, - стесняясь отвечаю я, - здесь объектная модель полноценно не реализована, например инкапсуляции вовсе нет...
А сам при этом думаю, что как раз ООП-модель в FoxPro всё-таки реализована, только очень-очень тщательно снаружи ветками и травой замаскирована, чтобы начинающих кодеров незнакомым видом объектов и классов не испугать.

Но вот, об чём я?  Вот, оказывается, Я не помню НИ ОДНОЙ команды!
Я взялся написать простейшую игрушку "Удавчик", который ест яблоки. Игрушка - задание для начальной школы по программированию. Писал её аж 4 дня (не подряд конечно, с перерывами). На самом деле - работы там на 10 минут! Но я же был вынужден за каждой буквой лазить в HELP системы, без которого я вообще ничего не помнил! Вот такая система, которую я искренне любил, на которой написал тысячи строк кода за десяток лет... 

- А что изменилось? FoxPro? Ты?
- Ты знаешь, Шеркало, всё изменилось. И FoxPro (это отдельный вопрос), и я, и вселенная. 
Скорее всего проблема во мне. ПОЧЕМУ я полностью забываю то, с чем (и с кем) когда-то работал? Почему это всё вытесняется?

- Ты знаешь ответ.

- НЕТ!!! Не знаю!
Впрочем, поговорим позже. Может быть я и про язык Паскаль захочу написать?

среда, 22 декабря 2021 г.

Шеркало 04: картошка

 - Здесь?! Шеркало, здесь?

- А ты здесь?

- Ну я-то здесь, раз уж зову.

- Ну так и я здесь, раз уж отзываюсь. Чего хотел-то?

- Жена, вот, картошку жарит. Вкусно пахнет. Хочешь? Заходи!

- Вот ты прямо порадовал! Угощать бестелесную сущность жареной картошкой?! Прямо шесть баллов по шкале Задорнова-Петросяна.

- А чем тебя угощать? Анекдотами, что ли? Давай попробую.

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

- Здорово, мужик! Это хорошо, что ты к нам зашёл, мы тут как раз ужинать с друзьями собрались. Оо! Так ты и шампур с собой принёс? (отбирает у мужика ружьё) Это ты молодец, это прямо очень своевременно!

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

- Здравствуйте, уважаемые хищники. Если желаете поужинать, то у меня как раз есть с собой целый рюкзак вкусной картошки, на соседней полянке под ёлкой стоит. Можно её пожарить!

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


- Это ты сам что ли анекдот придумал?

- Ага, прямо сейчас, как только тебя, Шеркало, увидел.

- Ладно, молодец, вручаю тебе медаль героя подполья театра имени Дубовицкой!

- Где?

- Да вот же! Она же невидимая. Прикрутишь сзади к трусам, пусть все прохожие смеются...

- Не издевайся! Жена картошку дожаривает, картошка - пахнет. Вот, само собой и придумалось, про шашлыки. А шашлыков-то и нету.

- Ладно, ладно, иди, ешь свою картошку. А то я - невкусное, не заглядывайся в мою сторону лишний раз.