Введение

Язык программирования, ориентированный на строковые операции, SNOBOL ("StriNg Oriented and symBOlic Language") – это серия языков программирования, разработанных в период с 1962 по 1967 год в лабораториях AT&T Bell Дэвидом Дж. Фарбером, Ральфом Э. Грисуолдом и Иваном П. Полонским, кульминацией которых стал SNOBOL4. Он был одним из ряда языков, ориентированных на обработку текстовых строк, разработанных в 1950-х и 1960-х годах; другие включали COMIT и TRAC. SNOBOL4 выделяется среди большинства языков программирования того времени тем, что рассматривает шаблоны как данные первого класса (то есть тип данных, значениями которого можно манипулировать всеми способами, допустимыми для любого другого типа данных в языке программирования) и предоставляет операторы для конкатенации и чередования шаблонов. Шаблоны SNOBOL4 являются разновидностью объектов и допускают различные манипуляции, подобно более поздним объектно-ориентированным языкам, таким как JavaScript, шаблоны которых известны как регулярные выражения. Кроме того, строки SNOBOL4, генерируемые во время выполнения, могут рассматриваться как программы и либо интерпретироваться, либо компилироваться и выполняться (как в функции eval других языков). SNOBOL4 широко преподавался в крупных университетах США в конце 1960-х и начале 1970-х годов и широко использовался в 1970-х и 1980-х годах как язык манипулирования текстом в гуманитарных науках. В 1980-х и 1990-х годах его использование сократилось, поскольку новые языки, такие как AWK и Perl, сделали манипулирование строками с помощью регулярных выражений популярным. Шаблоны SNOBOL4 включают в себя грамматики BNF, которые эквивалентны грамматикам, свободным от контекста, и более мощные, чем регулярные выражения. "Регулярные выражения" в современных версиях AWK и Perl фактически являются расширениями регулярных выражений в традиционном смысле, но регулярные выражения, в отличие от шаблонов SNOBOL4, не являются рекурсивными, что дает шаблонам SNOBOL4 явное вычислительное преимущество. (Рекурсивные выражения появились в Perl 5.10, выпущенном в декабре 2007 года.) Позднее разработанные языки SL5 (1977) и Icon (1978) были созданы Грисуолдом для объединения механизма обратного отслеживания при сопоставлении шаблонов SNOBOL4 с более стандартной структурой, характерной для ALGOL.

СНОБОЛ1

Первоначальный язык SNOBOL был создан как инструмент для его авторов, чтобы работать с символьным преобразованием полиномов. Он был написан на языке ассемблера для IBM 7090. Он обладал простым синтаксисом, только одним типом данных – строкой, не имел функций и объявлений, а также практически не осуществлял контроль ошибок. Однако, несмотря на свою простоту и "персональный" характер, его использование стало распространяться и на другие группы. В результате авторы решили расширить его возможности и упорядочить.

СНОБОЛ2

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

СНОБОЛ3

SNOBOL был переписан для добавления функций, как стандартных, так и определенных пользователем, и результат был выпущен под названием SNOBOL3. SNOBOL3 стал весьма популярным и был переписан другими программистами для компьютеров, отличных от IBM 7090. В результате появилось несколько несовместимых диалектов.

СНОБОЛ4

По мере того, как SNOBOL3 становился все более популярным, авторы получали все больше запросов на расширение языка. Они также начали получать жалобы на несовместимость и ошибки в версиях, которые они не разрабатывали. Чтобы решить эту проблему и воспользоваться преимуществами новых компьютеров, появившихся в конце 1960-х годов, было принято решение разработать SNOBOL4 с множеством дополнительных типов данных и функций, но на основе виртуальной машины для повышения переносимости между компьютерами. Переводчик языка SNOBOL4 по-прежнему был написан на языке ассемблера. Однако макровозможности ассемблера использовались для определения инструкций виртуальной машины Языка реализации SNOBOL (SIL). Это значительно улучшило переносимость языка, поскольку стало относительно легко переносить виртуальную машину, на которой работал переводчик, путем воссоздания ее виртуальных инструкций на любом компьютере, оснащенном макроассемблером или даже языком высокого уровня. Машинно-независимый язык SIL возник как обобщение макросов для манипулирования строками, разработанных Дугласом Макилроем, которые широко использовались в исходной реализации SNOBOL. В 1969 году Макилрой снова оказал влияние на язык, настояв на добавлении табличного типа в SNOBOL4.

Реализация

Классическая реализация была выполнена на 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. Редактор файлов для Michigan Terminal System (MTS) обеспечивал сопоставление с образцом на основе шаблонов SNOBOL4. В настоящее время доступно несколько реализаций. Macro SNOBOL4 на C, написанный Филом Будном, является бесплатной реализацией с открытым исходным кодом, способной работать практически на любой платформе. Catspaw, Inc. предоставляла коммерческую реализацию языка SNOBOL4 для различных компьютерных платформ, включая DOS, Macintosh, Sun, RS/6000 и другие, и эти реализации теперь доступны бесплатно от Catspaw. Minnesota SNOBOL4, разработанный Виктором Берстисом, является наиболее близкой к оригинальной версии IBM реализацией для персональных компьютеров (включая поддержку операторов FORMAT, аналогичных Fortran). Она также распространяется бесплатно. Хотя сам SNOBOL не имеет средств структурированного программирования, препроцессор SNOBOL под названием Snostorm был разработан и реализован в 1970-х годах Фредом Г. Шварцем для использования в Michigan Terminal System (MTS) в Мичиганском университете. Snostorm использовался на восьми-пятнадцати узлах, работающих под MTS. Он также был доступен в Университетском колледже Лондона (UCL) в период с 1982 по 1984 год. Snocone, разработанный Эндрю Кенигом, добавляет блочные структурированные конструкции в язык SNOBOL4. Snocone – это самостоятельный язык программирования, а не надмножество SNOBOL4. Реализация SPITBOL также представила ряд функций, которые, хотя и не используют традиционные ключевые слова структурированного программирования, тем не менее могут быть использованы для обеспечения многих эквивалентных возможностей, обычно рассматриваемых как «структурированное программирование», в частности, вложенные конструкции типа if/then/else. Эти функции были добавлены в большинство современных реализаций SNOBOL4. После многих лет существования в качестве коммерческого продукта в апреле 2009 года SPITBOL был выпущен как свободное программное обеспечение под лицензией GNU General Public License.

Именование

По словам Дэйва Фарбера, он, Грисуолд и Полонский "наконец пришли к названию Symbolic EXpression Interpreter SEXI". Распространенные обратные акронимы "SNOBOL" – "String Oriented Symbolic Language" (строко-ориентированный символический язык) или (как квазиинициализм) "StriNg Oriented symBOlic Language".