СНОБОЛ
Парадигма | Императивный , процедурный , неструктурированный. |
---|---|
Разработано | Дэвид Дж. Фарбер , Ральф Грисволд и Иван П. Полонски |
Разработчик | Дэвид Дж. Фарбер, Ральф Э. Грисволд, Иван П. Полонски и Bell Labs |
Впервые появился | 1962 год |
Стабильная версия | СНОБОЛ4
/ 1967 |
Веб-сайт | https://www.regressive.org/snobol4/ |
Основные реализации | |
SNOBOL, SPITBOL | |
Под влиянием | |
совершить | |
Под влиянием | |
AWK , SL5, значок , bs , Lua [1] |
SNOBOL («Строкоориентированный и символический язык») — серия языков программирования, разработанная в период с 1962 по 1967 год в лабораториях AT&T Bell Laboratories Дэвидом Дж. Фарбером , Ральфом Грисволдом и Иваном П. Полонски, кульминацией которой стал SNOBOL4. Это был один из многих языков, ориентированных на текстовые строки , разработанных в 1950-х и 1960-х годах; другие включали КОМИТ и ПРОФ .
SNOBOL4 отличается от большинства языков программирования того времени тем, что шаблоны являются первоклассным типом данных ( т. е. типом данных, значениями которого можно манипулировать всеми способами, разрешенными для любого другого типа данных в языке программирования), а также наличием операторов для шаблонов. конкатенация и чередование . Шаблоны SNOBOL4 представляют собой тип объекта и допускают различные манипуляции, как и более поздние объектно-ориентированные языки, такие как JavaScript , шаблоны которых известны как регулярные выражения . Кроме того, строки SNOBOL4, сгенерированные во время выполнения, можно рассматривать как программы и либо интерпретировать, либо компилировать и выполнять (как в функции eval в других языках).
SNOBOL4 довольно широко преподавался в крупных университетах США в конце 1960-х и начале 1970-х годов и широко использовался в 1970-х и 1980-х годах как язык манипулирования текстом в гуманитарных науках .
В 1980-х и 1990-х годах его использование прекратилось, поскольку новые языки, такие как AWK и Perl, сделали модными манипуляции со строками с помощью регулярных выражений . Шаблоны SNOBOL4 включают в себя грамматики BNF , которые эквивалентны контекстно-свободным грамматикам и более эффективны, чем регулярные выражения. [2] «Регулярные выражения» в текущих версиях AWK и Perl на самом деле являются расширениями регулярных выражений в традиционном смысле , но регулярные выражения, в отличие от шаблонов SNOBOL4, не являются рекурсивными, что дает явное вычислительное преимущество шаблонам SNOBOL4. [3] (Однако рекурсивные выражения появились в Perl 5.10 , выпущенном в декабре 2007 года. [4] [5] )
Более поздний SL5 (1977) [6] и Icon (1978) были разработаны Грисволдом для объединения обратного поиска сопоставления с образцом SNOBOL4 с более стандартным ALGOL структурированием, подобным .
Разработка
[ редактировать ]СНОБ 1
[ редактировать ]Первоначальный язык SNOBOL был создан как инструмент, который его авторы могли использовать для работы с символьными манипуляциями с полиномами. Он был написан на языке ассемблера для IBM 7090 . У него был простой синтаксис, только один тип данных — строка, никаких функций и объявлений, а также очень мало контроля ошибок. Однако, несмотря на его простоту и «личный» характер, его использование начало распространяться на другие группы. В результате авторы решили его расширить и привести в порядок.
СНОБОЛ2
[ редактировать ]SNOBOL2 действительно существовал, но это была недолговечная промежуточная версия разработки без определяемых пользователем функций и так и не была выпущена.
СНОБОЛ3
[ редактировать ]SNOBOL был переписан с добавлением функций, как стандартных, так и определяемых пользователем, и результат был выпущен как SNOBOL3. SNOBOL3 стал довольно популярным и был переписан другими программистами для других компьютеров, кроме IBM 7090. В результате возникло несколько несовместимых диалектов.
СНОБОЛ4
[ редактировать ]По мере того, как SNOBOL3 становился все более популярным, авторы получали все больше и больше запросов на расширения языка. Также к ним начали поступать жалобы на несовместимость и ошибки в версиях, которые они не писали. Чтобы решить эту проблему и воспользоваться преимуществами новых компьютеров, представленных в конце 1960-х годов, было принято решение разработать SNOBOL4 со многими дополнительными типами данных и функциями, но на основе виртуальной машины, чтобы обеспечить улучшенную переносимость между компьютерами. [7] Переводчик языка SNOBOL4 по-прежнему был написан на языке ассемблера. Однако макрофункции ассемблера использовались для определения инструкций виртуальной машины NOBOL , реализации S языка SIL. Это значительно улучшило переносимость языка, упростив перенос виртуальной машины, на которой размещался транслятор, путем воссоздания ее виртуальных инструкций на любой машине, которая включала макроассемблер или даже язык высокого уровня. [8]
Машинно-независимый язык SIL возник как обобщение макросов манипулирования строками Дугласа Макилроя , которые широко использовались в первоначальной реализации SNOBOL. В 1969 году Макилрой снова повлиял на язык, настояв на добавлении типа таблицы в SNOBOL4. [9] [10]
Возможности СНОБОЛ4
[ редактировать ]![]() | Эта статья , возможно, содержит оригинальные исследования . ( Август 2020 г. ) |
SNOBOL отличается форматом и стилем программирования, которые радикально отличаются от современных процедурных языков, таких как Фортран и АЛГОЛ .
SNOBOL4 поддерживает ряд встроенных типов данных , таких как целые ограниченной точности и действительные числа , строки , шаблоны , массивы и таблицы (ассоциативные массивы), а также позволяет программисту определять дополнительные типы данных и новые функции . В то время возможности типов данных, определяемых программистом, в SNOBOL4 были развиты — они аналогичны записям более ранних языков программирования COBOL и более поздних языков программирования Pascal .
Все командные строки SNOBOL имеют вид
- шаблон субъекта метки = объект : передача
Каждый из пяти элементов является необязательным. В общем, предмет сопоставляется с образцом . Если объект присутствует, любая совпавшая часть заменяется объектом с помощью правил замены. Передача может быть абсолютной ветвью или условной ветвью , зависящей от успеха или неудачи оценки субъекта, оценки шаблона, сопоставления шаблона, оценки объекта или окончательного назначения. Это также может быть перенос в код, созданный и скомпилированный самой программой во время выполнения.
Шаблон СНОБОЛ может быть очень простым или чрезвычайно сложным. Простой шаблон — это просто текстовая строка (например, «ABCD»), но сложный шаблон может представлять собой большую структуру, описывающую, например, полную грамматику компьютерного языка. В SNOBOL можно реализовать языковой интерпретатор почти непосредственно из в форме Бэкуса-Наура его выражения с небольшими изменениями. Создание макроассемблера и интерпретатора для полностью теоретического оборудования может занять всего несколько сотен строк, при этом новая инструкция добавляется одной строкой.
Сложные шаблоны SNOBOL могут делать вещи, которые были бы непрактичными или невозможными при использовании более примитивных регулярных выражений, используемых в большинстве других языков сопоставления с образцом. Часть этой мощи происходит от так называемых «расширений SPITBOL» (которые с тех пор были включены практически во все современные реализации исходного языка SNOBOL 4), хотя той же мощи можно достичь и без них. Частично эта мощь обусловлена побочными эффектами, которые можно получить во время операции сопоставления с образцом, включая сохранение многочисленных промежуточных/предварительных результатов сопоставления и возможность вызывать написанные пользователем функции во время сопоставления с образцом, которые могут выполнять практически любую желаемую обработку. а затем повлиять на текущее направление прерванного сопоставления с образцом или даже действительно изменить сам образец во время операции сопоставления. Шаблоны можно сохранять, как и любые другие первоклассные элементы данных, а также объединять, использовать в других шаблонах и использовать для создания очень сложных и сложных выражений шаблонов. Например, можно написать шаблон SNOBOL4, который соответствует «полному имени и международному почтовому адресу», что намного превосходит все, что практически возможно даже попытаться использовать регулярные выражения.
Сопоставление с образцом SNOBOL4 использует алгоритм обратного отслеживания, аналогичный тому, который используется в логического программирования языке Prolog , который предоставляет конструкции, подобные шаблону, через DCG . Этот алгоритм упрощает использование SNOBOL в качестве языка логического программирования, чем в случае большинства языков.
SNOBOL хранит переменные, строки и структуры данных в одной куче со сбором мусора .
Примеры программ
[ редактировать ]Программа «Привет, мир!» программа может быть следующей...
OUTPUT = "Hello, World!"
END
Простая программа, запрашивающая имя пользователя и затем использующая его в выходном предложении...
OUTPUT = "What is your name?"
Username = INPUT
OUTPUT = "Thank you, " Username
END
Чтобы выбрать один из трех возможных выходов...
OUTPUT = "What is your name?"
Username = INPUT
Username "J" :S(LOVE)
Username "K" :S(HATE)
MEH OUTPUT = "Hi, " Username :(END)
LOVE OUTPUT = "How nice to meet you, " Username :(END)
HATE OUTPUT = "Oh. It's you, " Username
END
Чтобы продолжать запрашивать ввод до тех пор, пока его больше не будет...
OUTPUT = "This program will ask you for personal names"
OUTPUT = "until you press return without giving it one"
NameCount = 0 :(GETINPUT)
AGAIN NameCount = NameCount + 1
OUTPUT = "Name " NameCount ": " PersonalName
GETINPUT OUTPUT = "Please give me name " NameCount + 1
PersonalName = INPUT
PersonalName LEN(1) :S(AGAIN)
OUTPUT = "Finished. " NameCount " names requested."
END
Реализации
[ редактировать ]Классическая реализация была на PDP-10 ; он использовался для изучения компиляторов , формальных грамматик и искусственного интеллекта , особенно машинного перевода и машинного понимания естественных языков . Первоначальная реализация была на IBM 7090 в Bell Labs, Холмдел, Нью-Джерси. SNOBOL4 был специально разработан для портативности; первая реализация была начата на IBM 7094 в 1966 году, но завершена на IBM 360 в 1967 году. Она была быстро перенесена на многие другие платформы.
Обычно он реализуется в виде , который предоставляет почти интерпретатора из-за сложности реализации некоторых его функций очень высокого уровня, но существует компилятор SPITBOL все возможности, которые предоставляет интерпретатор.
Классическая реализация PDP -10 была довольно медленной, и в 1972 году Джеймс Гимпел из Bell Labs, Холмдел, штат Нью-Джерси, разработал собственную реализацию SNOBOL4 для PDP-10 , которую он назвал SITBOL. Он использовал этот дизайн в качестве основы для выпускного курса по обработке струн, который он преподавал в том году в Технологическом институте Стивенса (именно поэтому он был назван СИТБОЛ). Студентам были даны разделы для реализации (на ассемблере PDP-10), и весь семестр был посвящен реализации SITBOL. К концу семестра он был завершен более чем на 80% и впоследствии был завершен профессором Гимпелем и несколькими студентами летом. SITBOL представлял собой полнофункциональный высокопроизводительный интерпретатор SNOBOL4.
Компилятор Gnat Ada поставляется с пакетом (GNAT.Spitbol), который реализует всю семантику манипуляций со строками Spitbol. Его можно вызвать из программы Ada.
Редактор файлов для Michigan Terminal System (MTS) обеспечивал сопоставление шаблонов на основе шаблонов SNOBOL4. [11]
В настоящее время доступно несколько реализаций. Макрос SNOBOL4 на языке C, написанный Филом Бадном, представляет собой бесплатную реализацию с открытым исходным кодом, способную работать практически на любой платформе. [12] Catspaw, Inc предоставила коммерческую реализацию языка SNOBOL4 для множества различных компьютерных платформ, включая DOS, Macintosh, Sun, RS/6000 и других, и эти реализации теперь доступны бесплатно на Catspaw. Миннесота SNOBOL4, автор Викторс Берстис, наиболее близкая реализация для ПК к исходной версии мэйнфрейма IBM (даже включая поддержку операторов FORMAT, подобных Фортрану), также бесплатна. [13]
Хотя сам SNOBOL не имеет функций структурированного программирования , препроцессор SNOBOL под названием Snostorm был разработан и реализован в 1970-х годах Фредом Г. Шварцем для использования в рамках Мичиганской терминальной системы (MTS) в Мичиганском университете . [14] Snostorm использовался на восьми-пятнадцати сайтах МТС. Он также был доступен в Университетском колледже Лондона (UCL) с 1982 по 1984 год.
Snocone от Эндрю Кенига добавляет в язык SNOBOL4 конструкции с блочной структурой. Snocone — это самостоятельный язык программирования, а не надстройка над SNOBOL4. [15]
Реализация SPITBOL также представила ряд функций, которые, хотя и не используют традиционные ключевые слова структурного программирования, тем не менее могут использоваться для обеспечения многих эквивалентных возможностей, обычно называемых «структурным программированием», в первую очередь вложенных конструкций типа if/then/else. Эти функции с тех пор были добавлены в самые последние реализации SNOBOL4. После многих лет работы в качестве коммерческого продукта в апреле 2009 года SPITBOL был выпущен как бесплатное программное обеспечение под лицензией GNU General Public License .
Мы
[ редактировать ]По словам Дэйва Фарбера, [16] он, Грисволд и Полонский «наконец-то пришли к названию «Интерпретатор символических выражений SEXI».
Все шло хорошо, пока однажды я не подал пакетное задание на сборку системы и как обычно на своей карточке РАБОТА — первой карте в колоде, я по стандартам BTL пробил свое задание и свое имя — SEXI Farber.
Одна из девушек из вычислительного центра посмотрела на это и с юмором сказала: «Вы так думаете».
Это дало понять, что нам нужно другое имя!! Мы сидели, разговаривали, пили кофе и стреляли резинками, и спустя слишком много времени кто-то сказал — скорее всего, Ральф — «У нас нет шансов Снежка найти имя». Мы все одновременно закричали: «У НАС ЭТО — СНОБОЛ» в духе всех языков BOL . Затем мы напрягли свой разум, чтобы найти, что это означает.
Распространенные бэкронимы «SNOBOL»: «Строкоориентированный символический язык». [17] или (как квазиинициализм ) «Строко-ориентированный символический язык». [18]
См. также
[ редактировать ]- Значок (язык программирования)
- Снежок (язык программирования)
- Snostorm
- SPITBOL
- Юникон (язык программирования)
Ссылки
[ редактировать ]- ^ Иерусалимский, Роберто; де Фигейредо, Луис Энрике; Селес, Вальдемар (2007), «Эволюция Lua», Материалы третьей конференции ACM SIGPLAN по истории языков программирования (PDF) , стр. 26, номер домена : 10.1145/1238844.1238846 , ISBN 9781595937667 , S2CID 475143
- ^ Гимпель, Дж. Ф. (февраль 1973 г.). «Теория дискретных паттернов и их реализация в СНОБОЛ4» . Коммуникации АКМ . 16 (2): 91-100. дои : 10.1145/361952.361960 . S2CID 17059429 .
- ^ «Доктор Добб: Программы, которые преобразуют собственный исходный код; или: Шутка о сноболах» . Dobbscodetalk.com . Проверено 4 декабря 2011 г.
- ^ Контактные данные. "перлр" . perldoc.perl.org . Проверено 4 декабря 2011 г.
- ^ «Учебное пособие по рекурсивным регулярным выражениям» . Проверено 19 марта 2017 г.
- ^ Грисволд, Ральф Э.; Хэнсон, Дэвид Р. (апрель 1977 г.). «Обзор SL5» . Уведомления ACM SIGPLAN . 12 (4): 40–50. дои : 10.1145/954654.954658 . S2CID 38692673 .
- ^ См. главу 1 макрореализации SNOBOL4.
- ^ SNOBOL4 был реализован с использованием C для воссоздания инструкций виртуальной машины.
- ^ Грисволд, Ральф (1978). «История языков программирования СНОБОЛ» (PDF) . Уведомления ACM SIGPLAN . 13 (8): 275–308. дои : 10.1145/960118.808393 . S2CID 5413577 . Архивировано из оригинала (PDF) 02 марта 2019 г.
- ^ Вексельблат, Ричард Л. , изд. (2014) [1981]. История языков программирования . Академическая пресса. п. 784. ИСБН 9781483266169 .
- ^ Знакомство с редактором файлов MTS , Вычислительный центр Мичиганского университета, 1986.
- ^ «SNOBOL4.ORG — Ресурсы SNOBOL4» .
- ^ «Язык программирования MINNESOTA SNOBOL4» .
- ^ "SNOSTORM" , MTS Volume 9: SNOBOL4 в MTS , Вычислительный центр Мичиганского университета, июнь 1979 г., страницы 99-120. Проверено 1 сентября 2014 г.
- ^ «Язык программирования Snocone» , Эндрю Кениг, USENIX (Портленд, Орегон), июнь 1985 г. Проверено 2 сентября 2014 г.
- ↑ СТОИТ ПРОЧИТАТЬ Статья в Википедии о SNOBOL — НАСТОЯЩАЯ история, НЕ Arc.Ask3.Ru (Дэйв Фарбер, список рассылки «Интересные люди», 26 декабря 2008 г.)
- ^ Компьютеры и гуманитарные науки 1 :158, 1967.
- ^ Белзер, Джек; Хольцман, Альберт Г.; Кент, Аллен, ред. (1979). «СНОБОЛ» . Энциклопедия компьютерных наук и технологий . Том. 13. ЦРК Пресс. п. 173. ИСБН 0-8247-2263-9 .
Дальнейшее чтение
[ редактировать ]- Эммер, Марк Б. (1985). SNOBOL4+: язык SNOBOL4 для пользователей персональных компьютеров . Прентис Холл. ISBN 0-13-815119-9 .
- Гимпель, Джеймс Ф. (1976). Алгоритмы в СНОБОЛ4 . Уайли. ISBN 0-471-30213-9 . переиздано Салида, Колорадо: Catspaw, 1986 ( ISBN 0-939793-00-8 ).
- Грисволд, Ральф Э. (1972). Макрореализация SNOBOL4 . У. Х. Фриман. ISBN 0-7167-0447-1 .
- Грисволд, Ральф Э.; Поаге, Дж. Ф.; Полонский, ИП (1968). Язык программирования СНОБОЛ4 . Прентис Холл. ISBN 0-13-815373-6 .
- Грисволд, Ральф Э. (1975). Обработка строк и списков в SNOBOL4: методы и приложения . Прентис Холл. ISBN 0-13-853010-6 .
- Хоккей, Сьюзен М. (1985). Снобольское программирование для гуманитарных наук . Кларендон Пресс. ISBN 0-19-824676-5 .
Внешние ссылки
[ редактировать ]- CSNOBOL4 — это бесплатный порт оригинальной версии SNOBOL4 от Bell Labs с открытым исходным кодом под лицензией BSD на системы с компилятором C, включающий улучшения SPITBOL и Blocks.
- Catspaw, Inc. предлагает внедрение и коммерческую поддержку SNOBOL4.
- СНОБОЛ в Керли
- Грисволд, Ральф Э. (25 июля 1990 г.). «Устное историческое интервью с Ральфом Э. Грисволдом - обсуждается развитие SNOBOL» . Миннеаполис: Институт Чарльза Бэббиджа , Университет Миннесоты. ].
- «Коллекция Чарльза Холла по языку программирования SNOBOL» . Миннеаполис: Институт Чарльза Бэббиджа, Университет Миннесоты.
- Чтобы получить небольшое представление о том, что такое SNOBOL4, попробуйте этот онлайн-компилятор. [ постоянная мертвая ссылка ]
- Попробуйте онлайн (Snobol4/CSNOBOL) Онлайн-компилятор
- Языки программирования сопоставления шаблонов
- Языки программирования, созданные в 1962 году.
- Семейство языков программирования SNOBOL
- Программное обеспечение на языке ассемблера
- Текстоориентированные языки программирования
- Языки программирования
- Гомоиконические языки программирования
- программное обеспечение 1962 года