stringtranslate.com

СНОБОЛ

SNOBOL («StriNg Oriented and symBOlic Language») — серия языков программирования, разработанная в 1962—1967 годах в AT&T Bell Laboratories Дэвидом Дж. Фарбером , Ральфом Грисволдом и Иваном П. Полонским, достигшая кульминации в SNOBOL4. Это был один из многих текстово-строковых языков, разработанных в 1950—1960-х годах; среди других были COMIT и TRAC .

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 по-прежнему был написан на языке ассемблера. Однако макрофункции ассемблера использовались для определения инструкций виртуальной машины языка реализации S NOBOL , SIL . Это значительно улучшило переносимость языка, сделав относительно простым перенос виртуальной машины, на которой размещался транслятор, путем воссоздания ее виртуальных инструкций на любой машине, которая включала макроассемблер или действительно язык высокого уровня. [8]

Машинно-независимый язык SIL возник как обобщение макросов манипуляции строками Дугласа Макилроя , которые широко использовались в первоначальной реализации SNOBOL. В 1969 году Макилрой снова повлиял на язык, настояв на добавлении табличного типа в SNOBOL4. [9] [10]

Возможности SNOBOL4

SNOBOL отличается своим форматом и стилем программирования, которые радикально отличаются от современных процедурных языков, таких как Fortran и ALGOL .

SNOBOL4 поддерживает ряд встроенных типов данных , таких как целые числа и действительные числа ограниченной точности , строки , шаблоны , массивы и таблицы (ассоциативные массивы), а также позволяет программисту определять дополнительные типы данных и новые функции . Средства определения программистом типов данных SNOBOL4 были развиты в то время — они похожи на записи более раннего языка программирования COBOL и более позднего языка программирования Pascal .

Все командные строки SNOBOL имеют вид

шаблон субъекта метки = объект : передача

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

Шаблон SNOBOL может быть очень простым или чрезвычайно сложным. Простой шаблон — это просто текстовая строка (например, «ABCD»), но сложный шаблон может быть большой структурой, описывающей, например, полную грамматику компьютерного языка. Можно реализовать интерпретатор языка в SNOBOL почти напрямую из его выражения в форме Бэкуса–Наура , с небольшими изменениями. Создание макроассемблера и интерпретатора для полностью теоретического элемента оборудования может занять всего несколько сотен строк, при этом новая инструкция добавляется одной строкой.

Сложные шаблоны SNOBOL могут делать то, что было бы непрактично или невозможно с использованием более примитивных регулярных выражений, используемых в большинстве других языков сопоставления с образцом. Часть этой мощности происходит из так называемых «расширений SPITBOL» (которые с тех пор были включены практически во все современные реализации исходного языка SNOBOL 4), хотя можно достичь той же мощности и без них. Часть этой мощности исходит из побочных эффектов, которые можно производить во время операции сопоставления с образцом, включая сохранение многочисленных промежуточных/предварительных результатов сопоставления и возможность вызывать написанные пользователем функции во время сопоставления с образцом, которые могут выполнять практически любую желаемую обработку, а затем влиять на текущее направление, которое принимает прерванное сопоставление с образцом, или даже действительно изменять сам шаблон во время операции сопоставления. Шаблоны можно сохранять, как и любой другой элемент данных первого класса, и их можно объединять, использовать в других шаблонах и использовать для создания очень сложных и замысловатых выражений шаблонов. Например, можно написать шаблон SNOBOL4, который соответствует «полному имени и международному почтовому адресу», что выходит далеко за рамки того, что можно было бы даже попытаться реализовать с помощью регулярных выражений.

Сопоставление с образцом SNOBOL4 использует алгоритм обратного отслеживания, аналогичный используемому в языке логического программирования Prolog , который предоставляет шаблоноподобные конструкции через DCG . Этот алгоритм упрощает использование SNOBOL в качестве языка логического программирования, чем в случае большинства языков.

SNOBOL хранит переменные, строки и структуры данных в единой куче со сборщиком мусора .

Примеры программ

Программа «Hello, World!» может быть следующей...

 ВЫВОД  =  "Привет, мир!" КОНЕЦ

Простая программа, которая запрашивает имя пользователя и затем использует его в выходном предложении...

 OUTPUT  =  "Как вас зовут?"  Имя пользователя  =  INPUT  OUTPUT  =  "Спасибо, "  Имя пользователя END

Чтобы выбрать один из трех возможных вариантов...

 ВЫХОД  =  "Как тебя зовут?"  Имя пользователя  =  ВХОД  Имя пользователя  "J"  : S ( ЛЮБОВЬ )  Имя пользователя  "K"  : S ( НЕНАВИСТЬ ) МНЕ  OUTPUT  =  "Привет, "  Имя пользователя  :( КОНЕЦ ) ЛЮБОВЬ  OUTPUT  =  "Как приятно познакомиться, "  Имя пользователя  :( КОНЕЦ ) НЕНАВИСТЬ  OUTPUT  =  "О, это ты, "  Имя пользователя КОНЕЦ

Продолжать запрашивать информацию до тех пор, пока не прекратятся поступления...

 ВЫВОД  =  "Эта программа будет спрашивать у вас личные имена"  ВЫВОД  =  "пока вы не нажмете клавишу Enter, не дав ей ни одного"  NameCount  =  0  :( GETINPUT ) AGAIN  NameCount  =  NameCount  +  1  ВЫВОД  =  "Имя "  NameCount  ": "  PersonalName GETINPUT  OUTPUT  =  "Пожалуйста, дайте мне имя "  NameCount  +  1  PersonalName  =  INPUT  PersonalName  LEN ( 1 )  : S ( AGAIN )  OUTPUT  =  "Завершено. "  NameCount  " запрошено имен." END

Реализации

Классическая реализация была на PDP-10 ; она использовалась для изучения компиляторов , формальных грамматик и искусственного интеллекта , особенно машинного перевода и машинного понимания естественных языков . Первоначальная реализация была на IBM 7090 в Bell Labs, Холмдел, Нью-Джерси. SNOBOL4 был специально разработан для переносимости; первая реализация была начата на IBM 7094 в 1966 году, но завершена на IBM 360 в 1967 году. Она была быстро перенесена на многие другие платформы.

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

Классическая реализация на PDP-10 была довольно медленной, и в 1972 году Джеймс Гимпель из Bell Labs, Холмдел, Нью-Джерси, разработал собственную реализацию SNOBOL4 для PDP-10 , которую он назвал SITBOL. Он использовал эту разработку в качестве основы для выпускного курса по обработке строк, который он преподавал в том году в Технологическом институте Стивенса (именно поэтому он был назван SITBOL). Студентам были даны разделы для реализации (на ассемблере PDP-10), и весь семестр был сосредоточен на реализации SITBOL. К концу семестра она была завершена более чем на 80% и впоследствии была завершена профессором Гимпелем и несколькими студентами в течение лета. SITBOL был полнофункциональным, высокопроизводительным интерпретатором SNOBOL4.

Компилятор Gnat Ada поставляется с пакетом (GNAT.Spitbol), который реализует всю семантику манипуляции строками Spitbol. Его можно вызвать из программы Ada.

Редактор файлов для системы терминалов Мичигана (MTS) обеспечивал сопоставление шаблонов на основе шаблонов SNOBOL4. [11]

В настоящее время доступно несколько реализаций. Макрос SNOBOL4 на языке C, написанный Филом Будне, является бесплатной реализацией с открытым исходным кодом, способной работать практически на любой платформе. [12] Catspaw, Inc предоставила коммерческую реализацию языка SNOBOL4 для многих различных компьютерных платформ, включая DOS, Macintosh, Sun, RS/6000 и другие, и эти реализации теперь доступны бесплатно на Catspaw. Minnesota SNOBOL4, созданная Викторсом Берстисом, наиболее близкая реализация для ПК к оригинальной версии IBM для мэйнфреймов (даже включающая поддержку Fortran-подобного оператора FORMAT), также бесплатна. [13]

Хотя сам SNOBOL не имеет структурных функций программирования, препроцессор SNOBOL под названием Snostorm был разработан и реализован в 1970-х годах Фредом Г. Шварцем для использования в системе терминалов Мичигана (MTS) в Мичиганском университете . [14] Snostorm использовался на восьми-пятнадцати сайтах, где работала MTS. Он также был доступен в Лондонском университетском колледже (UCL) между 1982 и 1984 годами.

Snocone Эндрю Кенига добавляет блочно-структурированные конструкции к языку SNOBOL4. Snocone — это самодостаточный язык программирования, а не надстройка SNOBOL4. [15]

Реализация SPITBOL также представила ряд функций, которые, хотя и не используют традиционные ключевые слова структурного программирования, тем не менее могут быть использованы для предоставления многих эквивалентных возможностей, обычно считающихся «структурным программированием», в частности, вложенных конструкций типа if/then/else. Эти функции с тех пор были добавлены в большинство последних реализаций SNOBOL4. После многих лет в качестве коммерческого продукта в апреле 2009 года SPITBOL был выпущен как свободное программное обеспечение под лицензией GNU General Public License .

Нейминг

По словам Дэйва Фарбера [16] , он, Грисволд и Полонски «в конце концов пришли к названию Symbolic EXpression Interpreter SEXI».

Все шло хорошо, пока однажды я не отправил пакетное задание по сборке системы и, как обычно, на своей карточке JOB — первой карте в колоде — я, по стандартам BTL, пробил свою работу и свое имя — SEXI Farber.

Одна из девушек из Comp Center посмотрела на это и сказала с юмором: «Это то, что ты думаешь».

Это дало понять, что нам нужно другое название!! Мы сидели, разговаривали, пили кофе, стреляли резинками, и после слишком долгого времени кто-то сказал — скорее всего, Ральф — «У нас нет ни единого шанса найти название». Все мы одновременно закричали: «МЫ ПОНЯЛИ — СНОБОЛ» в духе всех языков BOL . Затем мы напрягли свой разум, чтобы найти, что это значит.

Распространенные обратные названия «SNOBOL» — «String Oriented Symbolic Language» [17] или (как квази-инициализм ) «StriNg Oriented symBOlic Language» [18] .

Смотрите также

Ссылки

  1. ^ Иерусалимский, Роберто; де Фигейредо, Луис Энрике; Селес, Вальдемар (2007), «Эволюция Lua», Труды третьей конференции ACM SIGPLAN по истории языков программирования (PDF) , стр. 26, doi :10.1145/1238844.1238846, ISBN 9781595937667, S2CID  475143
  2. ^ Gimpel, JF (февраль 1973). "Теория дискретных паттернов и их реализация в SNOBOL4". Сообщения ACM . 16 (2): 91-100. doi : 10.1145/361952.361960 . S2CID  17059429.
  3. ^ "Доктор Доббс: Программы, преобразующие свой собственный исходный код; или: шутка о ноге Снобола". Dobbscodetalk.com . Получено 2011-12-04 .
  4. ^ Контактные данные. "perlre". perldoc.perl.org . Получено 2011-12-04 .
  5. ^ "Учебник по рекурсивным регулярным выражениям" . Получено 19.03.2017 .
  6. ^ Грисволд, Ральф Э.; Хансон, Дэвид Р. (апрель 1977 г.). «Обзор SL5». Уведомления ACM SIGPLAN . 12 (4): 40–50. doi : 10.1145/954654.954658 . S2CID  38692673.
  7. ^ См. Главу 1 « Макрореализация SNOBOL4».
  8. ^ SNOBOL4 был реализован с использованием C для воссоздания инструкций виртуальной машины.
  9. ^ Грисволд, Ральф (1978). «История языков программирования SNOBOL» (PDF) . Уведомления ACM SIGPLAN . 13 (8): 275–308. doi :10.1145/960118.808393. S2CID  5413577. Архивировано из оригинала (PDF) 2019-03-02.
  10. ^ Wexelblat, Richard L. , ред. (2014) [1981]. История языков программирования . Academic Press. стр. 784. ISBN 9781483266169.
  11. Введение в редактор файлов MTS, Вычислительный центр Мичиганского университета, 1986.
  12. ^ "SNOBOL4.ORG -- Ресурсы SNOBOL4".
  13. ^ «Язык программирования MINNESOTA SNOBOL4».
  14. ^ "SNOSTORM", MTS Volume 9: SNOBOL4 в MTS , Computing Center, University of Michigan, июнь 1979 г., страницы 99-120. Получено 1 сентября 2014 г.
  15. «Язык программирования Snocone», Эндрю Кёниг, USENIX (Портленд, Орегон), июнь 1985 г. Получено 2 сентября 2014 г.
  16. ^ СТОИТ ПРОЧИТАТЬ статью в Википедии о SNOBOL — ПРАВДИВАЯ история, а НЕ Википедия (Дэйв Фарбер, рассылка Interesting People, 26 декабря 2008 г.)
  17. Компьютеры и гуманитарные науки 1 :158, 1967.
  18. ^ Белзер, Джек; Хольцман, Альберт Г.; Кент, Аллен, ред. (1979). "SNOBOL". Энциклопедия компьютерной науки и технологий . Том 13. CRC Press. стр. 173. ISBN 0-8247-2263-9.

Дальнейшее чтение

Внешние ссылки