Старые песни о главном

cf239fd0b049c21d809a2681d22399e1.jpg

Программисты старшего (и очень старшего) возраста наверняка помнят такую книгу Фролова и Олюнина: «Практический курс программирования на языке PL/1», изданную в 80-х массовым тиражом. В те времена не было Интернета, и поэтому получить нужную информацию можно было, только купив или взяв в библиотеке или у коллеги соответствующую книгу. Поэтому и специальная литература издавалась в Советском Союзе фантастическими по нынешним меркам тиражами. Впрочем, в масштабах страны тогда и стотысячный тираж не мог обеспечить требуемыми экземплярами все библиотеки. Но даже с учетом всех этих обстоятельств, общий тираж изданий книги Фролова и Олюнина велик, он превысил 300 000! Наверное, это был самый массовый учебник по языку программирования в нашей стране. А ведь это было всего лишь учебное пособие для студентов.

Я всегда жалел, что у меня нет подобного пособия. С одной стороны, я в жизни не работал на ЕС ЭВМ, и потому всякие описания «наборов данных с региональной организацией 3-го типа» мне были и не нужны. Но, с другой стороны, язык, который я использую, тоже называется PL/1, хотя и с приставкой «подмножество». Почему подмножество? Потому, что еще Л.Ф. Штернберг (как знаток языка) утверждал, что если создать язык, отличающийся от PL/1 только тем, что из него убраны некоторые возможности, получится язык лучший, чем PL/1.

В целом, я согласен с Леонидом Францевичем. Простой пример. При разработке языка было принято вполне логичное решение — работать с массивами как с обычными переменными. Например, если перемножить переменные — получим их произведение. А если это не переменные, а массивы переменных — получим их произведение как массив, у которого каждый элемент — произведение элементов исходных массивов. Логично? Вполне. Трудно для понимания? Да нет, не трудно. Трудно для реализации? Да, и очень громоздко и для компилятора и для системных библиотек.

А за десятилетия работы мне часто требовалось, например, перемножать матрицы, но ни разу — перемножать массивы. Разумеется, есть и такие задачи. Если бы я писал какой-нибудь «Excel», я бы, наверное, порадовался такой возможности. Но в целом, это типичная ситуация: возможность используется не часто или вообще не используется, а сил на реализацию уходит много. Ну сделала так IBM в своем компиляторе, не выбрасывать же. Но на другие платформы зачем всю эту громоздкость тащить? И это было понятно не одному Л.Ф. Штернбергу.

Еще в 1980 году специалист по фамилии Фрайбургхаус разработал версию языка, которая позднее превратилась в международный стандарт ISO/IEC 6522:1992. На мой взгляд, у этой работы были и объективные и субъективные предпосылки.

С технической стороны, имевшийся продукт IBM не устраивал тем, что был очень привязан к IBM/360 и к «пакетному» режиму работы. Например, имелся препроцессор с чудовищно большими возможностями, включая препроцессорные процедуры и переменные. Зачем он нужен при интерактивном режиме работы, когда любым текстовым редактором я все равно могу изменить исходный текст еще круче? Или, например, предполагалось, что программист заранее напишет обработчики всех возникающих прерываний. Но при отладке это нереально. Гораздо продуктивнее использовать интерактивный отладчик и действовать по складывающейся во время работы программы обстановке. И так во всем.

Но, на мой взгляд, были и субъективные причины переделки PL/1. Многих специалистов очень раздражал снобизм руководства IBM и его непоколебимая уверенность в своем программно-аппаратном превосходстве. В части PL/1 фирма действовала под девизом: «Мы создали самый совершенный на все времена язык для самой совершенной на все времена машины. Мы не собираемся ничего никуда переносить». Как говорится, жрите, не обляпайтесь!

Хотя сама же IBM и открыла эру персональных компьютеров, ее политика в части ПО для них и в частности PL/1 выглядела настолько неумной, что даже возникла конспирологическая теория, что IBM специально не хочет массового распространения своего языка, чтобы использовать его только внутри фирмы для получения конкурентного преимущества при разработке ПО. Но это напоминает подозрения болельщиков после разгрома любимой команды, что, дескать, наши футболисты специально проиграли потому, что «сливали тренера».

Как бы то ни было, появился язык, имеющий много общего с языком IBM, но отвязанный от IBM/360. Поскольку в те времена было не принято после каждого изменения придумывать языку новое имя, он так и остался языком PL/1, но при этом подмножеством общего назначения.

И вот такой язык у меня есть и большую часть жизни я его и использую, а вот учебника по нему на русском нет и никогда не было. И я всегда с завистью смотрел на книгу Фролова и Олюнина. Как там все с математической строгостью (ведь авторы, вроде, математики из МГУ) по полочкам разложено, и все понятия формально описаны. Чуть занудно, зато, если разберешься — все логично, как и положено в математике.

И я решил, во-первых, в знак уважения к Геннадию Дмитриевичу и Виктору Юрьевичу «обессмертить» их труд — т.е. перевести его в нули и единицы. И не в какое-нибудь «дежавю» (такие образы этой книги давно есть в сети), а в настоящий .DOCX. А, во-вторых, и это главное, изъять почти половину объема книги и заменить разделы, описывающие взаимодействие с ЕС ЭВМ, более полезными описаниями.

В самом деле, в том виде, в каком вышла эта книга, сейчас она может быть полезна или историкам ИТ, или уж совсем каким-нибудь «реликтам», работающим на каких-нибудь эмуляторах IBM/390. Да и то, думаю, у всех у них еще сохранились бумажные экземпляры.

Другое дело, если человек имеет ноутбук с Windows 10 и хочет попробовать разные средства, в том числе и это подмножество. Тогда и учебное пособие должно иметь соответствующее содержание. При этом я старался сохранить и общую форму, и стиль, несмотря на некоторую его архаичность. Так, что, надеюсь, труд Фролова и Олюнина обретет вторую молодость.

И еще важный момент. Я сторонник использования родного языка в программировании. В этом отношении с PL/1 проще: у него нет зарезервированных слов. Сначала я даже хотел использовать в пособии исключительно кириллицу. Но тем программистам, кто учился на английских ключевых словах (я и сам такой), очень тяжело воспринимать непривычный вид исходных текстов. Поэтому во многих случаях приводится оба варианта. Замечу, что новички, ничему ранее не учившиеся, совершенно легко и спокойно воспринимают русские ключевые слова. И я им завидую.

Собственно само пособие здесь.

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

P.P. S. На возможные комментарии в духе «Не-а, не взлетит, все протухло» сразу отвечаю: все уже давным-давно летает (даже на МКС), а вот учебника не было, это факт.

© Habrahabr.ru