Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

В защиту PL/1

Предисловие

            Данная статья попалась мне в http://www.softpanorama.org/Lang/pl1.shtml. К сожалению и к своему стыду, я так и не смог найти имени автора. Но, конечно, этот автор не Безруков (хозяин сайта), а неведомый мне американский (или английский?) ИТ-специалист старшего поколения. Английский текст был пропущен через «Гугл-переводчик», а затем «литературно» обработан.

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

            Жесткий, даже нарочито оскорбительный тон по отношению к известным специалистам (сами они, впрочем, тоже обзывают!), тем не менее, показывает, что не все и сейчас согласны с «общепринятыми» вроде бы истинами в программировании.

            Я думаю, многим будет небезынтересно узнать, откуда пошли многие возможности современных языков программирования и как они задумывались изначально. А как программист, до сих пор использующий PL/1 в работе на обычном персональном компьютере, я во многом (но не во всем!) согласен с автором статьи и тоже, например, считаю, что развитие языков программирования было бы более эффективным, если бы фундаментом этого развития стали не примитивные языки типа Си, а появившийся полвека назад язык PL/1.

Введение

PL/1 — серьезный язык с двумя чрезвычайно высококачественными компиляторами, созданными IBM. К сожалению, он пережил трагическую, незаслуженную судьбу и сегодня почти забыт. Он должен был заменить Кобол, но ему никогда не удавалось исполнить эту роль, за исключением СССР и стран Восточного блока. Как и любая инновационная технология, язык получил серьезный ущерб от неправильного маркетинга IBM (IBM проделала огромную работу по разработке языка и компиляторов, но чрезмерная жадность обрекла эти усилия на неудачу). IBM должна была бы сделать отладочный компилятор бесплатным и брать деньги только за оптимизирующий компилятор. Можно было сделать и ещё один полезный шаг — перевести старый отладочный компилятор в ранг «общественного достояния», т.е. полностью открыть.

            До разработки PL/1 все предыдущие языки были сосредоточены на одной конкретной области применения, такой как численные расчеты, искусственный интеллект или бизнес. PL/1 был первым, разработанным как универсальный язык, и это был огромный прорыв, поскольку это была первая и успешная попытка создать язык, который можно было бы применять в различных областях. Опять же, во многих областях это было настолько далеко продвинуто для своего времени (это язык более высокого уровня, чем Cи, который был создан десятилетие спустя на основе опыта его создателей по использованию PL/1 в Multics), что даже с трудом воспринималось. Другим фактором, который способствовал гибели PL/1, было отсутствие бесплатных высококачественных компиляторов. Мы хорошо осознаем сложность таких компиляторов как таковых. Поэтому коммерческие компиляторы были довольно дорогими. Однако в Восточной Европе они поставлялись как часть стандартного дистрибутива ОС для мэйнфреймов. Это способствовало огромному успеху PL/1 в этом регионе и показывает, что если бы IBM предоставила компиляторы PL/1 бесплатно, язык мог бы быть значительно более успешным, чем в действительности стал в США.

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

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

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

            И это не единственный отличный продукт, который почти исчез. В этом смысле падение его популярности не сильно отличается от упадка двух других инновационных и интересных продуктов IBM: VM/CMS и OS/2.

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

            Например, такая возможность, как обработка исключений, была настолько хорошо интегрирована в язык, что большинство программистов действительно регулярно использовали её. В этом смысле PL/1 был первым языком, который узаконил исключения как особенность языков программирования (при этом, как ни странно, он не содержал явных сопрограмм в качестве конструкции языка программирования, хотя обработчики исключений «определяемые программистом» были очень похожи на них).

            PL/1 также имеет хорошие возможности обработки строк, и к этому языку можно отнести появление наиболее распространенных функций обработки строк (substr , index , length и trim) в их современной форме. Правда, появилась одна проблема, которая была связана с решением о реализации длин строк в компиляторах IBM как префиксов в их начале. Это была своего рода преждевременная оптимизация, в результате которой было создано два класса строк: короткие (до 255 — длина может быть сохранена одним байтом) и средние (с длиной, хранящейся в двух первых байтах).

            Возможности PL/1 существуют во многих других языках и, прежде всего, в Cи, что семантически можно рассматривать как прямую производную (ограниченное подмножество) PL/1. Я хотел бы подчеркнуть, что PL/1 (как язык системного программирования для Multics) имел большое влияние на Cи — один из наиболее широко используемых компилируемых языков программирования, и многие из идей PL/1 прямо или косвенно нашли свое отражение в других языках программирования, например, в Perl Ларри Уолла.

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

            Давайте немного поговорим о скрытой аналогии между PL/1 и Perl. PL/1 был первым широко распространенным неортогональным языком (т.е. с множеством разных способов сделать одно и то же), и в этом смысле его можно рассматривать как предшественник Perl и тесно связанный с философией Perl. Исторически это было, вероятно, ответной реакцией на Unix, слишком далеко продвигающей «простоту» и побеждающей других таким образом. Ключевой вопрос в этом отношении, который следует задать, заключается в следующем: что же такого простого в двухстах «простых» утилитах Unix? Только их общее количество и различия (часто незаметные) в подходах к именованию и обработке параметров (без железного кулака корпоративного стандарта, как в спецификации мэйнфреймов IBM или интерфейсов Microsoft GUI) сделали их совершенно непонятным беспорядком. В мире нет и не может быть человека, который знает их всех. Это слишком много для человеческого мозга.

            В этом смысле сложность, перенесенная из библиотек и утилит непосредственно в язык программирования, может принести пользу сообществу программистов: таким образом вы можете, если не избежать, но, по крайней мере, несколько приручить непроницаемый лабиринт библиотек/классов и т.д.

            Кроме того, PL/1 свободен от любых религиозных доктрин, и это делает его желанным членом семейства языков программирования, в отличие от всех этих языков со строгим типом или ОО-языков («обещают много, предоставляют мало»), таких как Java. Грубая ошибка считать, что дизайн Java слишком очевиден, хотя, по правде говоря, Java изначально создавался как небольшой язык для встроенного приложения и не был разработан как «универсальный» язык программирования, которым он стал позже (и заменой Коболу для коммерческого программирования), и который представил ОО в массы и полностью их с ним связал. Правоверные в ОО, вероятно, должны прекратить читать эту страницу в этот момент :-).

Атаки на PL/1 фанатиков от «структурированного программирования» и «доказательств правильности программ»

            Значительный удар по PL/1 был нанесен в начале 70-х годов религиозными фанатиками, связанными с догмами «структурированного программирования» и, особенно, Эдсгером В. Дейкстрой как вдохновителем «безумия верификации». Сейчас трудно понять, как почти вся компьютерная наука была обманута этой примитивной религиозной доктриной. Но это оказалось правдой и довольно хорошо продемонстрировало, что добродетели, приписываемые академическим ученым, слишком раздуты. Еретики, которые готовы быть сожженными на костре в защиту правды, так же редки в академическом сообществе, как и среди простых людей. Может быть ещё реже. Полная коррупция академической экономики, превращение большинства из них в интеллектуальных защитников интересов финансовой олигархии, которую мы наблюдали с 1980 года, говорят об этой довольно обычной и понятной ситуации. И компьютерные ученые не так уж отличаются от других. Они также зависят от грантов и хотят владеть умами любой ценой. Что требует определенных компромиссов.

            Эдсгер В. Дейкстра вдохновил «безумие верификации», которое было в основном связано с фиктивным математическим [рукоблудием — правка автором сайта], называемой «доказательствами правильности программ». Идея была «простой, привлекательной и неправильной», и из-за этого вскоре стала более модной, чем пьяные драки в пабах в Англии. Это привлекло огромное количество продавцов воздуха и мошенников от информатики, которые часто наводняли факультеты информатики и исключали полезные исследования. Вначале структурированное программирование давало положительный эффект для развития программирования (например, оно помогло ввести более богатый набор программных средств управления и структурирования в языках, и PL/1 снова стал пионером в этой области). Но в дальнейшем это привело к созданию нереалистичных или просто вредных ожиданий (что количество ошибок в программе без операторов goto меньше, чем для программы со многими операторами goto, но на самом деле значение имеет лишь использование структурированных управляющих операторов, причем, если некоторые из них не доступны на языке, они должны быть эмулированы с использованием тех самых операторов goto).

            Эдсгер В. Дейкстра сыграл роль яростного аятоллы. Этот противоречивый персонаж имел религиозное рвение Лютера, но был более заблуждающимся. И в разгар своего заблуждения аятолла Дейкстра полностью потерял здравый смысл и издал фетву, в которой он объявил PL/1 «смертельной болезнью». Эти ядовитые шипы религиозного пыла повредили статусу многих языков и помогли более примитивным языкам с гораздо более простыми компиляторами, такими как Паскаль и Cи, получить и место, и аудиторию.

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

            Компилятор для Cи был также намного проще, чем компилятор для сопоставимого подмножества PL/1, (такого как PL/M), и свободно распространялся с исходным кодом Unix. Создатели Cи отказались от фальшивой идеи «нет зарезервированных ключевых слов» и значительно упростили синтаксис объявления переменных, чем не только удалили «бородавки» языка PL/1, но и значительно сэкономили на простоте компилятора. Но сокращая язык до подмножества, подходящего для системного программирования, они сократили слишком много, и получились грабли, которые охотятся на Cи и C++ программистов по сей день. Они также допустили некоторые грубые ошибки в разработке синтаксиса языка, так как нет механизма для множественного закрытия блоков {} с помощью одного символа-скобки, такого как: «конец-метка» в PL/1. А в качестве разделителей для условных выражений в операторах if используются круглые скобки. Именно эти две ошибки стоят программистам на Си огромного количества потерянных часов в попытках найти ошибки, которых просто не должно существовать в правильно спроектированном языке. Они также игнорировали некоторые важные эвристики для обнаружения ошибок, изобретенные в оптимизирующем компиляторе PL/1.

            Догма структурированного программирования и догма «безумия верификации» были двумя первыми религиозными движениями в программировании, но, к сожалению, не были последними. Позже объектно-ориентированная (ОО) парадигма стала модной со своей собственной толпой продавцов воздуха. Каждый из этих всплесков породил огромную толпу мошенников и религиозных фанатиков, а также способствовал коррупции на факультетах информатики, где с начала 80-х годов, вероятно, её уровень стал довольно близок к коррупции экономических профессий с их группами высокооплачиваемых интеллектуальных [девушек с лёгким, как дуновение ветерка, поведением — правка автором сайта] или откровенных преступников, маскирующихся под профессоров.

Особенности языка

            Исторически PL/1 был очень элегантной и инновационной смесью Фортрана, Кобола и Алгола-60 в одном языке, совместив все три основных нововведения в дизайне языков программирования того времени:
  • Удивительно гибкий и мощный набор управляющих операторов, включающий оператор if-then-else и три типа циклов: for-while-do. PL/1 был также первым языком, который представил возможность выхода из цикла с помощью одного оператора (позже унаследованного Cи, но с другим ключевым словом).
  • Схема выделения памяти трех уровней: статическая, автоматическая (через стек) и управляемая (через кучу), соединенная с отдельными атрибутами, которые определяют видимость (атрибут External предоставляет возможности, аналогичные общим блокам Фортрана).
  • Нетипизированные указатели с возможностью выполнения арифметических операций над ними с помощью функции unspec. Кроме того, класс BASED обеспечивает аккуратное обобщение указателей на структуры.
  • Обработчики исключений составляют особый тип сопрограмм. Они активируются, когда управление достигает оператора, и возобновляются при возникновении соответствующего исключения как события в программе. PL/1 поддерживает мощную обработку исключений и почти 30 лет (до появления C++) оставался единственным языком с таким мощным и гибким механизмом обработки исключений. Система исключений PL/1 была первой успешной попыткой ввести сопрограммы в язык высокого уровня. Одним из основных недостатков Cи (как производной от PL/1) было отсутствие исключений, которые сильно повлияли на написание программы для чтения файлов. Неспособность справиться с такими условиями, как OVERFLOW и ZERODIVIDE, была ещё одним важным недостатком. Исключение также можно использовать в PL/1 для проверки переполнения индексов в массивах (их можно включить выборочно для каждой процедуры/для каждого блока). Как это ни парадоксально, популярные современные языки, такие как C++ и Java, предоставляют гораздо худший механизм обработки исключений, чем PL/1.
    • Например, вы можете иметь отдельные обработчики для попыток делить на ноль, для обработки исчерпания входного файла, для обработки случаев, когда числа становятся слишком большими для полей в вашей программе и т.д.
    • PL/1 имеет возможность эмулировать множество исключений, чтобы программист мог проверить поведение программы. Любые исключения, которые вы не обрабатываете или которые не имеют своих собственных конкретных проверяемых условий, обрабатываются универсальным обработчиком системной библиотеки языка.
            Обе эти функции значительно опередили свое время и усложнили компилятор. Это особенно верно в отношении исключений, которые, по сути, являются замороженными сопрограммами, и которые нужно активировать в контексте, отличном от контекста процедуры, в которой они содержатся. При этом нужно выделение памяти из кучи.

            PL/1 был первым универсальным языком, который ввел исключения. Интересно отметить, что половина расширений C++, включая исключения, была связана с возможностями, которые создатели Cи удалили из PL/1 при создании своего языка :).

            Интересно также отметить, что PL/1 был первым языком программирования, который обеспечивает правильную обработку такой распространенной проблемы, как обнаружение конца последовательного файла во время чтения. В PL/1 условие окончания файла «взводится», что активирует пока остановленную сопрограмму (обработчик исключений), в которой программист может делать все, что пожелает, но, как правило, просто переходит к первому оператору после цикла чтения. Такое использование goto определенно превосходит по понятности и эффективности ошибочные попытки выполнить эту проверку в заголовке цикла чтения, как это было сделано в Cи и Perl.

            Я бы ещё раз обратил внимание следующие важные языковые особенности:
  • PL/1 — блочно-ориентированный язык в стиле Алгола. Программы могут выполняться отдельно и состоять из блоков исключений («замороженные» сопрограммы), обычных блоков, операторов и подпрограмм. Процедуры могут быть внутренними или составляться отдельно. Этот тип структуры позволяет программисту создавать высокомодульные приложения. Свободная форма без зарезервированных ключевых слов (последнее, вероятно, было ошибкой, которая усложняла компиляторы с нулевым возвратом инвестиций). Очень чистая лексическая структура. Разумное решение для закрытия нескольких блоков или групп операторов с одним разделителем. Это действительно забавно и трагично одновременно, что это важное средство все ещё отсутствует в Cи, C++ и Java; его отсутствие по-прежнему может генерировать кучу трудно находимых ошибок.
  • PL/1 был первым популярным языком со встроенным препроцессором. Эта функция была позже скопирована (и злоупотреблена) в Cи.
  • Очень аккуратное обобщение способности Фортрана использовать отдельно скомпилированные единицы компиляции. Оператор процесса и класс выделения внешней памяти.
  • Он определил типы данных для абстрактного обобщенного компьютера без учета фактического оборудования. PL/1 был первым языком общего назначения с пригодным для использования данных типа строка. Он также имеет объекты — битовые строки.
  • Один из первых языков общего назначения, в котором указатели являются встроенной функцией языка, а шаблоны, базированные на них, могут иметь произвольную структуру данных.
  • PL/1 содержал очень мощный набор управляющих структур, которые в некоторых отношениях остаются непревзойденными, и это намного превосходит то, что получил язык Cи (несмотря на то, что Cи является производным от PL/1). Из основных языков только Perl может конкурировать с PL/1 в части богатства и гибкости структур управления.
  • PL/1 поддерживает массивы, структуры, объединения, массивы структур или объединений, структуры или объединения массивов и любые их комбинации.
  • Концепция PL/1 «области» как способности выделять хранилище в конкретной области вместе с процедурами с несколькими входами была конструкцией, которая позволяет программирование в стиле ОО без типичных для ОО издержек.
  • PL/1 использовался в Multics в качестве языка системного программирования и был одной из первых попыток написать ОС на языке высокого уровня (эта попытка вдохновила Unix и Cи, в целом, на семантику и структуру подобную PL/1).
  • Компиляторы PL/1 находились на переднем крае разработки компиляторов благодаря оптимизирующему и отладочному компиляторам IBM, в течение многих лет они представляли лучшие образцы в своем классе. Компилятор PL/C (который был разработан в Корнуэлле и реализовал большое подмножество PL/1) был и остается одним из лучших компиляторов для образовательных целей, которые я когда-либо видел. Они по-прежнему выглядят потрясающе даже сейчас, спустя полвека после их первого выпуска, особенно в отношении качества диагностических сообщений.
  • Многозадачность была реализована уже в PL/1-F. Он содержал типы данных EVENT и TASK , опцию TASK в операторе CALL, WAIT-состояние, DELAY (задержка времени), опции EVENT в операторах ввода-вывода.
            Важно отметить, что PL/1 использовался в качестве языка системного программирования для такой фундаментальной операционной системы, как Multics — создателя многих идей, которые впоследствии были переопределены в Unix. В частично «ублюдочном» виде ключевые идеи и большинство операторов PL/1 и семантику переменных можно найти в Cи, что, вероятно, следует рассматривать как косвенную производную и большое упрощение ядра PL/1.

            Программы PL/1 состоят из блоков. Блок может быть либо подпрограммой, либо просто группой операторов. Блок PL/1 позволяет создавать высокомодульные приложения, поскольку блоки могут содержать объявления, которые определяют имена переменных и классы хранения. Таким образом, вы можете ограничить область видимости переменной одним блоком или группой блоков, или вы можете сделать это известным в модуле компиляции или в модуле загрузки.

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

            Как это ни парадоксально, PL/1 играл роль бесплатного программного обеспечения по крайней мере в одной стране ;-). И в СССР он быстро стал доминирующим языком программирования на мэйнфреймах, намного опередив Cobol и Fortran, которые все ещё доминировали на арене мэйнфреймов в США и других западных странах. Так что здесь аналогия с Perl выглядит ещё убедительнее. PL/1 доминировал, несмотря на тот факт, что советские клоны IBM 360/370 (называемые ЕС ЭВМ — русская аббревиатура «Единая Система компьютеров») были гораздо менее мощными (и гораздо менее надежными), чем западные аналоги.

            И это все происходило в начале 60-х, а не в конце 80-х ;-).

Автор не известен. Переводчик и автор предисловия: Д.Ю.Караваев.

Опубликовано: 2018.12.17, последняя правка: 2019.01.28    20:56

ОценитеОценки посетителей
   ███████████████████████████████████ 9 (81.8%)
   ████ 1 (9.09%)
   ▌ 0
   ████ 1 (9.09%)

Отзывы

     2019/02/09 12:06, Антон          # 

Ужасная статья. Не сказано ничего по существу. Почти в каждом абзаце какой-то сленг, по-видимому, автор либо переводчик, либо глубоко верующий человек. Ни одного примера программ, которые показали бы преимущества PL/1, лишь пространные рассуждения вида "раньше трава была зеленее, а Дейкстра пришёл и она стала коричневая". Исключения есть почти в каждом современном языке программирования и от них нормальные люди стараются уходить, когда это далеко не самый удачный вид обработки ошибок. Хотел почитать за чашечкой чая полезную статью про PL/1, чтобы иметь представление о сильных сторонах языка, но в итоге как будто искупался в бочке с помоями, простите. Жаль потраченного времени.

     2019/02/09 13:24, Автор сайта          # 

И что ужасного в том, что кто-то выразил своё мнение? PL/1 был когда-то самым продвинутым языком — на фоне остальных. В статье признаётся ошибка насчёт ключевых слов языка. Отмечается его концептуальное превосходство над тем же Си в плане обработки исключений. Кому-то, может, обидно, что Дейкстру назвали «аятоллой», но мне это показалось забавным. «PL/1 играл роль бесплатного программного обеспечения по крайней мере в одной стране [СССР]» — нет, не в одной стране, а в целой группе стран, объединённых в СЭВ.

     2019/02/09 17:48, Антон          # 

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

     2019/02/09 19:12, Автор сайта          # 

Да, форма подкачала, я даже вносил правки, чтобы исключить брань. Но эпатаж нынче в моде. Кто ж на тебя обратит внимание, если ты не ведёшь себя вызывающе?

С другой стороны, в какой-то мере понимаю неизвестного автора этого опуса. Человек, возможно, много лет вкладывал свой труд и усердие в технологию, которая однажды обесценилась: карета превратилась в тыкву, а программисты PL/1 больше никому не нужны. Это плач по ушедшей эпохе.

Что касается «goto», то Дмитрий Юрьевич, переводчик этого текста и разработчик отечественного транслятора PL/1, рассказал о замечательной идее, которую он реализовал в своём ассемблере RASM. В те года, когда на ассемблере программировали многие, ей цены бы не было.

     2019/02/11 18:33, kt          # 

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

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

Ну вот пример программы: о размещении переменных в стеке.

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

Исключения — это объективная реальность в поведении процессоров. Нормальные люди это понимают, остальные объясняют, к примеру, что ничего страшного в переполнении нет, поскольку в языке, который они используют, этот случай не предусмотрен. Исключения PL/1 отражают реальное поведение процессоров.

Если автор точит зуб на Вирта или на Дейкстру, или хочет новую религию поклонников оператора goto

Наоборот, как раз автор заявляет, что религия + goto = Дейкстра. А тот (мир праху) заявлял, что язык PL/1 — смертельная болезнь, якобы слишком сложен. Посмотрите на современные языки. Они проще PL/1? Или они тоже смертельно больны? Почему-то смертельно больным выглядит несложный Форт.

     2019/02/11 19:47, Comdiv          # 

Кстати, Ваш транслятор воплощает полное множество языка PL/1?

     2019/02/11 20:33, kt          # 

Нет, не полный и вот здесь объясняется почему:
http://rsdn.org/forum/flame.comp/6550274.1
В 1978 году ряд недостатков языка попытались исправить новым стандартом. Список отличий от "полного" языка на 2009 год приведен здесь:
http://files.rsdn.org/122727/diff_PL.pdf

Правда, за последние 10 лет он несколько сократился.

     2019/02/11 21:05, Автор сайта          # 

И ведь вправду, Дейкстра первый начал. Жил-был «goto», никого не трогал, а тут проявили по отношению к нему немотивированную агрессию. Вовсе не «goto» организовал крестовый поход против Дейкстры!

религия + goto = Дейкстра

Эту формулу можно преобразовать:

религия = Дейкстра - goto

Или

goto = Дейкстра - религия

Иногда преобразования интересны:)

     2019/02/12 22:46, Антон          # 

Дейкстра норм чувак. Этот комментарий в его защиту!

     2020/05/02 20:59, Denis Juriev aka D.V.J.          # 

Хорошая статья. Я люблю PL/I. Но наверное, в том, что C (вкупе с С++) стал гораздо более популярным или влиятельным, нет ничего необъяснимого. Это, впрочем, не значит, что PL/I (а также PL/M) надо забыть или перестать изучать, отнюдь. Если честно, я, наверное, склонен поддержать ещё большую "еретичность", с ничуть не меньшей симпатией вспоминая переключатели (switch) Алгола-60. Да, и Perl, и Forth я тоже люблю и очень уважаю.

Эзотеричность отнюдь не противоположность логичности.

     2021/08/07 14:49, Автор сайта          # 

Читаю «Философию» и «Введение» в документации на PL/1 на сайте pl1.su:

В результате и этой почти религиозной критики PL/1 не стал массовым языком… мифы о его невероятной сложности

Мне кажется, роль критики в «низвержении» PL/1 преувеличена. Какие-то перемены в жизни зачастую случаются не от того, что старое критикуется, а от того, что новое притягательно. Лично со мной так и происходило.

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

Так они действительно были проще. Компактное ядро, которое быстро изучается. И специализированные библиотеки, подчинённые правилам из ядра. А PL/1 оказался в этом плане более размыт. Лично я падение популярности PL/1 связываю со сменой эпох, парадигм развития ИТ. PL/1 «обитал» на мейнфреймах. Закончилась их эпоха — закончилась востребованность PL/1. Началась эпоха PC — вот тут и пошли в гору Бейсик, Клиппер, Паскаль и Cи. Простые в сравнении с PL/1. С кучей компиляторов/интерпретаторов.

1985 году компилятор PL/I-86 попал и в Советский Союз

В те годы с соблюдению авторских прав относились без пиетета. Поэтому на PC появлялось абсолютно всё, что было более-менее востребовано. Но о компиляторе PL/I-86 впервые услышал только в 2010-х...

     2021/08/07 23:01, kt          # 

Насколько я понимаю, PL/I-86 был вполне себе законно куплен. Во всяком случае комплект документации был аж в 6 книжках: два тома описания языка, два тома руководство программисту и ещё ассемблер и редактор связей с редактором библиотеки. Серийный номер был, кажется, 1350. Потом на всяких пиратских CD попадались и другие номера типа 2600. Сколько реально было продано экземпляров не представляю. У Питера Нортона точно был — он писал обзор.
Первое упоминание 15 мая 1984 года.

https://books.google.ru/books?id=hcHq9kHRifYC&pg=PA107&lpg=PA107&dq=
PL/I-86&source=bl&ots=Tb56jyGx_u&sig=ACfU3U3ltg5FWWMjbj4X0wtdDmFyU7ALYQ&hl=ru
&sa=X&ved=2ahUKEwjGyoGp2Z_yAhXDlIsKHcgMCQwQ6AF6BAgIEAM#v=onepage&q=PL%2FI-86&f=false

     2021/08/08 00:10, kt          # 

Забыл добавить. На серийных номерах PL/I-86, которые мне попадались, последняя цифра всегда была ноль. Это подозрительно. Возможно реальные номера были не 1350 или 2600, а всего лишь 135 или 260. На фоне многомиллионных MS DOS или многотысячных DR DOS это вообще ни о чем.

     2021/08/08 23:42, Автор сайта          # 

Знаете, сколько всякого барахла прошло за многие годы через винчестер. И на рынках на CD чего только не было! Но компилятор PL/1 и разу не встречался, честно признаюсь.

     2021/08/09 11:37, kt          # 

Разумеется, невозможно было объять весь поток поделок для ПК, который в конце 90-х хлынул на прилавки. Я заглядывал в магазин "Мастер" (между собой мы его называли "Slave"). А CD, помнится, назывался "Все компиляторы для ПК, начиная с Фортрана". Продавец любезно прямо с него запустил PL.EXE и я увидел шильдик с серийным номером 2600 и год 1984.

     2021/08/10 19:17, kt          # 

Лично я падение популярности PL/1 связываю со сменой эпох, парадигм развития ИТ. PL/1 «обитал» на мейнфреймах. Закончилась их эпоха — закончилась востребованность PL/1. Началась эпоха PC — вот тут и пошли в гору Бейсик, Клиппер, Паскаль и Cи. Простые в сравнении с PL/1. С кучей компиляторов/интерпретаторов.

В данном конкретном случае не соглашусь. Еще до смены парадигм. Почему IBM-PC вызвала ажиотаж в Америке? Ведь по сравнению с остальными ПК не было ничего выдающегося. Вот только марка, реклама, престиж. «У меня на столе работает целая IBM!» А язык здесь какой? Ну, этот, как его… Ну какой там в IBM используют? Это сейчас, почти 40 лет спустя, мы рассуждаем об устаревших языках. А тогда никто именно «устаревших» в них не видел. Наоборот, если бы тогда на ПК был выбор из нескольких языков, в том числе и «новых» — большая часть программистов начала бы с тех, которые им известны. Это вполне естественно. Но в случае ПК даже и не в этом дело. Взять хотя бы мой случай и случай уважаемого автора сайта. Меня подвели к ПК и сказали: «вот новая техника, давай, осваивай скорее». И там был только один компилятор. И вообще только он один и был на диске. Мне и в голову не приходило искать другие и чего-то там сравнивать. А автору сайта, наоборот, он никогда не попадался, пока мы через его же сайт не познакомились.

Я к чему веду: вот не поцапалась бы IBM с Килдэлом и вошел бы дистрибутив PL/1 в MS DOS. Неужели бы им не пользовались, потому, что «древний»? По-моему, пользовались бы. Машина — от IBM, язык — от IBM. А как же иначе? И порог вхождения на уровне Бейсика: вводим два числа оператором get и выводим на экран сумму оператором put. Транслируем и, пожалуйста, вводим числа и на экране сумма введенного. Ну чем сложнее Бейсика?

А стали бы развиваться языки, если бы у всех с самого начала был доступ к PL/I-86? Разумеется, это же объективный процесс. И обязательно пришли бы к чему-то похожему на современный уровень. И языков стало бы все равно много. И парадигмы бы все равно размножились. Только вот стартовый уровень с PL/1, а не с Си позволил бы дойти до сегодняшнего уровня, на мой взгляд, быстрее. Да и по качеству компиляторов равнялись бы на старте по уровню PL/I-86, а не по первым Паскалям (где даже не было раздельной компиляции).

Так, что цепочка случайностей: ограбленный IBM/Microsoft Килдэл –> игнорирование его продуктов –> вместо PL/I-86 на IBM-PC Си и Бейсик.

И в моем случае: институт Радио -> нужен PL/1 на ПК -> купили -> но такой не нужен -> космонавт О.Г. Макаров -> PL/I-86 в НПО Энергия у меня на столе.

Случайно PL/I-86 не стал распостранненым, случайно я стал им пользоваться.

     2021/08/10 19:59, Gudleifr          # 

В данном конкретном случае не соглашусь.

Насколько помню, PL/I позиционировался как правильный FORTRAN. Я был в шоке, получив 3 метра распечатки суть которой сводилась к "обнаружена опечатка, но исправить её не удалось". Но, т.к. под боком был ЛГУ, то всем было велено смотреть в сторону Algol-68. А PL/I так и остался предком идеологии C++: чем кривее язык, тем больше его будут любить манагеры. (Правда была надежда, что урезав его до PL/M, сделают красиво, но тот промелькнул слишком быстро, умерев вместе с 8"-дискетами).

     2021/08/11 00:13, Клихальт          # 

Правда была надежда, что урезав его до PL/M, сделают красиво, но тот промелькнул слишком быстро, умерев вместе с 8"-дискетами

С Вашего позволения, PL/1 до PL/M никто не урезал — это совершенно разные языки с совершенно разной областью применения. И со смертью 8" дискет PL/M уж точно не умер.

     2021/08/11 00:30, Gudleifr          # 

это совершенно разные языки с совершенно разной областью применения
Для этого и резали

И со смертью 8" дискет PL/M уж точно не умер

За Зимбабве не знаю

     2021/08/11 10:35, Клихальт          # 

Для этого и резали

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

За Зимбабве не знаю

Intel свои PL/M-386 и PL/M-96 создавали в Зимбабве? Вот уж не знал. Кстати среда DA-PL/M поддерживается и развивается до сих пор. ;)

     2021/08/11 10:46, Gudleifr          # 

Его не резали, а создавали

С какой стороны посмотреть.

создавали в Зимбабве?

Ну не в СССР же. И кому какой интерес, кто что поддерживает, после появления C и синтаксической компиляции? Создание языка подобного уровня стало лишь упражнением из «Этюдов» Уэзерелла.

     2021/08/11 11:36, Клихальт          # 

С какой стороны посмотреть.

С любой.

Ну не в СССР же.

Бог ты мой, а СССР то тут при чём?

И кому какой интерес, кто что поддерживает, после появления C и синтаксической компиляции? Создание языка подобного уровня стало лишь упражнением из «Этюдов» Уэзерелла.

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

     2021/08/17 11:52, Автор сайта          # 

Почему IBM-PC вызвала ажиотаж в Америке? Ведь по сравнению с остальными ПК не было ничего выдающегося. Вот только марка, реклама, престиж. «У меня на столе работает целая IBM!»

Рассказываю, почему IBM PC вызвал ажиотаж.

Во-первых, существовал огромный неудовлетворённый спрос на PC. Их покупали даже в качестве простых пишущих машинок, пусть дороже, но зато не надо перепечатывать тексты, потому что их можно хранить. Не говоря уже о том, что на PC можно запускать программы.

Во-вторых, само название IBM в то время много о чём говорило. И когда IBM вышла на этот рынок, то многие ждали, что она наконец-то установит стандарты в отрасли. Отрасль была разбита на кучу островков: там Apple, сям Commodore, а ещё Atari, Sinclair и десятки, сотни фирм и фирмочек со своими собственными архитектурами и системами команд. Все задыхались от отсутствия стандартов и совместимости. А у IBM уже был опыт преодоления несовместимости. В 1950-60-х был похожий бардак в архитектуре мейнфреймов, и IBM в 1960-х разработала линейку совместимых устройств от мала до велика с единой системой команд и под одной ОС, установила стандарты де факто. У заказчиков появилась возможность долгосрочных прогнозов и инвестиций. Эта давняя история успеха с мейнфреймами легла на благодатную почву отсутствия стандартов на рынке PC. То есть за названием IBM стояла не только рекламная шумиха, но и известная история успеха.

     2021/08/19 20:41, kt          # 

Я со всем этим согласен. Добавлю, что массово машины стали появляться у людей, для которых "майнфрейм" и прочие прибамбасы — пустой звук, они все были тогда "на новенького". Какой бы язык тогда не предложила IBM — он обязательно лег бы "на благодатную почву". И компилятор физически уже существовал. Но вот Килдэл мешался...

     2021/08/19 20:52, Gudleifr          # 

Какой бы язык тогда не предложила IBM — он обязательно лег бы "на благодатную почву"

При условии, что они его могли реализовать с минимальной затратой сил. Поэтому выход был только один — BASIC.

Добавить свой отзыв

Написать автору можно на электронную почту mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Содержание

Каким должен быть язык программирования?

Анализ и критика

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

●  Концепция владения в Rust на примерах

●●  Концепция владения в Rust на примерах, часть 2

●●  Концепция владения в Rust на примерах, часть 3

●  О неулучшаемой архитектуре процессоров

●  Двадцать тысяч строк кода, которые потрясут мир?

●  Почему владение/заимствование в Rust такое сложное?

●  Масштабируемые архитектуры программ

●  О создании языков

●  Почему Хаскелл так мало используется в отрасли?

●  Программирование исчезнет. Будет дрессировка нейронных сетей

●  Бесплатный софт в мышеловке

●  Исповедь правового нигилиста

●  Русской операционной системой должна стать ReactOS

●  Почему обречён язык Форт

●  Программирование без программистов — это медицина без врачей

●  Электроника без электронщиков

●  Программисты-профессионалы и программирующие инженеры

●  Статьи Дмитрия Караваева

●●  Идеальный транслятор

●●  В защиту PL/1

●●  К вопросу о совершенствовании языка программирования

●●  О реализации метода оптимизации при компиляции

●●  О реализации метода распределения регистров при компиляции

●●  О распределении памяти при выполнении теста Кнута

●●  Опыты со стеком или «чемпионат по выполнению теста Кнута»

●●  О размещении переменных в стеке

●●  Сколько проходов должно быть у транслятора?

●●  Чтение лексем

●●  Экстракоды при синтезе программ

●●  Об исключенных командах или за что «списали» инструкцию INTO?

●●  Типы в инженерных задачах

●●  Непрерывное компилирование

●●  Об одной реализации специализированных операторов ввода-вывода

●●  Особенности реализации структурной обработки исключений в Win64

●●  О русском языке в программировании

●●  Формула расчета точности для умножения

●●  Права доступа к переменным

●●  Заметки о выходе из функции без значения и зеркальности get и put

●●  Модификация исполняемого кода как способ реализации массивов с изменяемыми границами

●●  Ошибка при отсутствии выполняемых действий

●●  О PL/1 и почему в нём не зарезервированы ключевые слова

●●  Не поминайте всуе PL/1

●●  Скорость в попугаях

●●  Крах операции «Инкогнито»

●●  Предопределённый результат

●●  Поддержка профилирования кода программы на низком уровне

●  Следующие 7000 языков программирования

●●  Что нового с 1966 года?

●●  Наблюдаемая эволюция языка программирования

●●  Ряд важных языков в 2017 году

●●  Слоны в комнате

●●  Следующие 7000 языков программирования: заключение

Компьютерный юмор

Новости и прочее




Последние отзывы

2021/09/11 16:46 ••• Gudleifr
Изобретение очередного велосипеда?

2021/09/01 23:42 ••• Gudleifr
Философия языка

2021/08/31 22:04 ••• Gudleifr
Должна ли программа быть удобочитаемой?

2021/08/30 00:42 ••• Gudleifr
Все языки эквивалентны. Но некоторые из них эквивалентнее других

2021/08/19 20:52 ••• Gudleifr
В защиту PL/1

2021/08/19 20:34 ••• Gudleifr
Каким должен быть язык программирования?

2021/08/11 11:24 ••• Gudleifr
Почему обречён язык Форт

2021/08/07 13:43 ••• Anatoly
Компилятор

2021/08/07 13:30 ••• Anatoly
Многоязыковое программирование

2021/06/16 13:10 ••• Александр Коновалов aka Маздайщик
Не поминайте всуе PL/1

2021/05/19 23:15 ••• Денис Будяк
Энтузиасты-разработчики компиляторов и их проекты

2021/04/25 08:41 ••• kt
Некошерный «goto»

2021/04/19 17:01 ••• Клихальт
О наименовании проекта и языка программирования

2021/04/04 18:29 ••• kt
Переключатель

2021/04/02 19:32 ••• Александр Коновалов aka Маздайщик
Циклы