Заметка ветерана

Hugh Gleaves
Из серии: Приключения Капитана Ядро
(размышления о нашем вычислительном мире)
http://geekswithblogs.net
Опубликовано: 23 ноября 2013

Я обучался программированию на языке PL/1. Это было формальное обучение, я должен был оцениваться на каждом этапе и продвигаться по служебной лестнице программиста-стажера, помощника программиста, младшего программиста, в конечном итоге достигая старшего программиста через несколько лет.
Оглядываясь назад, понимаю, что тогдашние мои наставники были одними из лучших разработчиков программного обеспечения, с которыми я когда-либо работал, но в те дни титула «разработчик программного обеспечения» еще не существовало.
Обучение включало в себя письменные и устные контакты, определение повестки дня совещаний и председательство на совещаниях, написание спецификаций, оценку алгоритмов и, конечно же, глубокое понимание языка PL/1, используемого на «мэйнфреймах» IBM.
В то время Си был академическим языком с очень небольшим присутствием в коммерческом мире, Паскаль был более распространен, чем Си, но в то время тремя основными языками были COBOL, Fortran и PL/1. У меня был выбор в колледже специализироваться на одном из этих трех, и после некоторых исследований в библиотеке, это не стало проблемой для такого технически склонного человека, как я, поскольку PL/1 был существенно более продвинутым, чем другие.
Вот некоторые не очень известные факты об этом языке:

До сравнительно недавнего времени оптимизирующий компилятор IBM PL/1 был самым сложным из существующих компиляторов.
PL/1 был первым языком высокого уровня, используемым для написания операционной системы (Multics).
PL/1 был первым языком, использующим /* */ для комментариев.
PL/1 был первым языком, который использовал термин «статический» для хранения переменных, не связанных со стеком.
Это был первый язык, который обрабатывал исключения на основе стековых фреймов (называемых «условиями», т.е. condition).
Это единственный язык программирования, в котором нет зарезервированных слов.
Это был первый язык, компилятор которого был написан на этом языке.
Это был первый язык, который использовал нотацию -> для указателей.
Как язык системного программирования он значительно превосходил Си, а написание компиляторов и операционных систем на языке PL/1 давало ряд преимуществ с точки зрения надежности, производительности и технического сопровождения.
Я написал почти полный компилятор PL/1 в Си для Windows NT (32-битный COFF) и до сих пор имею весь исходный код (реализация для Visual Studio 2005).
Способность парсера поддерживать требование «никаких зарезервированных слов», хотя и очень мощная, не слишком сложна, вот как это делается:
На самом деле в языке существует только два вида операторов: операторы с ключевыми словами и операторы присваивания.
Оператором с ключевым словом может быть почти любое выражение языка, типа: call log_fault; или, например, do while (flag = FALSE);
Оператор присваивания всегда имеет вид <ссылка> = <выражение>;
Таким образом, синтаксический анализатор просто решает, является ли оператор присваиванием или нет, если это так, то ключевые слова не имеют значения, а идентификаторы могут быть любыми.
Вот почему PL/1 позволяет Вам кодировать, что-нибудь вроде:
if then then else=then; else then=if;
Грамматика очень мощная, и Вам не нужно «==» для сравнения, как в Си, достаточно только одного «=» для присвоения и сравнения.
Кстати, причина, по которой PL/1 поддерживает это, заключается не в том, чтобы позволить Вам писать сбивающий с толку код, а в том, чтобы позволить вводить новые ключевые слова в будущем, не нарушая существующий код.
Очень полезная статья [1] о реализации компилятора PL/I была написана Бобом Фрейбургхаузом в 1969 году, и вот еще одна увлекательная статья [2], которая подробно рассказывает о том, как язык был выбран в качестве основы для Multics. Статья Боба была чрезвычайно полезна мне, когда я начал описывать дизайн и общий подход к моему собственному компилятору PL/I, любой, кто интересуется компиляторами, их реализацией и историей, должен ценить эти источники.

1. https://www.computer.org/csdl/proceedings-article/afips/1969/50740187/12OmNyKJioR
2. http://www.multicians.org/pl1.html

0

Автор публикации

не в сети 12 часов

admin

3
Комментарии: 28Публикации: 173Регистрация: 13-06-2019
Авторизация
*
*

9 − 6 =

Регистрация
*
*
*

18 − 6 =

Генерация пароля

17 − семь =

Перевести »
Прокрутить вверх
Scroll to Top