Язык программирования Lisp: в чем его уникальность
Язык программирования Lisp относится к функциональной парадигме. Он является очень необычным вариантом с уникальными возможностями. Так, например, некоторые его называют программируемым языком программирования, так как необходимая библиотека может быть взята из любого другого языка.
Ранее Lisp использовался как родной, основной язык ИИ. Сейчас он таковым не является, но до сих пор успешно применяется в других сферах. Интересный факт: Lisp считается лучшим хакерским языком. Как он появился, где его использовали ранее и зачем – сейчас, вы узнаете из нашего материала.
История создания языка программирования Lisp
Lisp представляет собой один из самых старых языков программирования. Кроме того, он является первым функциональным, получившим большую популярность. Создание его ядра приходится на 60-е годы предыдущего столетия – разработчиком стал ученый Дж. Маккарти.
Основополагающая структура данных языка Lisp – список, откуда и пошло наименование языка. Широкую известность Лисп получил в 70-80-е годы ХХ века. В то время он использовался в качестве базового языка для научной деятельности в сфере искусственного интеллекта.
С учетом того, что сфера ИИ всегда предполагала большие траты ресурсов, а мощности компьютеров 80-х годов, очевидно, уступали современным, создатели Lisp пытались извлечь из языка максимум эффективности. Со временем Lisp приобрел небывалую ауру, а произошло это по двум причинам:
- В середине 70-х годов прошлого века исследователи в области ИИ ощутили недостаток мощности собственных компьютеров, и инженер Питер Дойч из MIT озвучил идею создания компьютера с упором на программы Лисп. В 80-е фирма Symbolics произвела ряд Lisp-машин, которые были специально заточены под этот язык. Таким образом Лисп стал связан с мощными программами для ИИ. В то же время создатели Lisp-машин и исследовательские отделы в области искусственного интеллекта стали предлагать свои варианты языка. Таким образом у Лисп образовалось много разновидностей (диалектов), что означало разделение языка. Дабы это предотвратить, в 1981 году несколько хакеров положили начало работе по созданию единого языка — Common Lisp, который включал в себя все лучшие стороны имеющихся версий.
- В 1985 году ученые MIT Харольд Абельсон и Джеральд Сассман выпустили книгу «Структура и интерпретация компьютерных программ», которая в хакерском сообществе более известна как Wizard Book («Книга волшебника»). С помощью этого учебника студентам MIT больше 20 лет преподавали программирование на Scheme, разновидности языка Lisp. Только за счет него Лисп стали рассматривать в качестве языка, с помощью которого возможно постичь сложные философские теории программирования.
Спад известности произошел в конце 80-х. В те времена исследовательская деятельность в сфере ИИ сместилась на периферию, а бюджетные и мощные компьютеры заполонили рынок и заменили Lisp-машины. Возрождение известности наступило после публикации эссе Пола Грэма, где он нарек его «лучшим языком для стартапов». В 1995 году автор со своим другом создал организацию Viaweb и выпустил одноимённый конструктор онлайн-магазинов, который был написан на Лиспе.
«Нам понравилась идея использования Lisp, так как это, на наш взгляд, могло сделать продукт более функциональным относительно конкурирующих компаний и позволило бы добавлять фичи, которые им недоступны. За счет того, что Lisp является языком высокого уровня, мы получим возможность обойтись без большой команды разработчиков и сберечь финансовые ресурсы» – такое заявление сделал Пол Грэм, сооснователь Y Combinator, создатель Hacker News.
Для некоторых людей слова Грэма оказались убедительными, но их было очень мало. Если верить статистике GitHub, Emacs Lisp занимает 25-е, а Common Lisp — 49-е место по степени распространенности среди пользователей веб-сайтов. Между тем самые выдающиеся его стороны проявились в других языках: например, Python позаимствовал генератор списков, а C# унаследовал язык интегрированных запросов LINQ.
Lisp — второй после Fortran из «оставшихся в живых» устаревших языков программирования. В индексе TIOBE за декабрь 2021 года Лисп стоит на 31 месте, расположившись выше Lua, Scala и TypeScript.
Даже при том условии, что Lisp лишился лидирующей позиции в списке языков программирования задач ИИ, он смог остаться пригодным для изучения функционального программирования. Доступность и прозрачность синтаксиса совмещаются в нём с мощностью языковых средств и естественностью его расширения. Одним из ярких свойств Лиспа является общая синтаксическая форма написания программ и данных, благодаря чему можно обрабатывать структуры данных как программы и совершенствовать программы как данные.
Ключевые особенности языка программирования Lisp
Представим основные отличия Lisp от стандартных языков программирования:
- Формы предоставления программ и обрабатываемых данных в Лисп тождественны и представляют собой списочные структуры. За счет этого обнаруживается ряд интересных возможностей – к примеру, взаимодействие одной программы с другими. Кроме того, можно выделить универсальность, расширяемость и масштабируемость самого синтаксиса. Ядро LISP, прописанное на Лисп, располагается в рамках 200 строк, а интерпретатор ПРОЛОГа занимает чуть больше 50 строк.
- Реализация списков дарит возможность не тратить время на управление памятью, а сохранение и очищение ячеек осуществляется динамически. За счет этого сборщик мусора появился уже в первых вариациях языка. Lisp не имеет структуры строго типизированного языка программирования. Сегодня это не поражает воображение, но необходимо заметить, что на стадии начального развития данная концепция была антагонистом типизированному Фортрану.
- Благодаря префиксной нотации появляется больше возможностей для синтаксического разбора выражений. Более того, можно использовать общий списочный контекст и для программ, и для данных.
- Использование множества скобок, за счет чего наряду со стандартной расшифровкой «LISP» как «LISt Processing» имеет место и «Lots of Idiotic Silly Parentheses».
- Немаловажным фактом является существование Lisp-машин – вычислительных машин, устройство которых было адаптировано для результативного выполнения программ на языке Лисп. Эти аппараты не очень популярны – их численность во всем мире не превышает 10 000. Lisp-машины исследовательского центра Xerox стали родоначальниками некоторых общеизвестных идей и технологий: сборка мусора, лазерная печать, многооконные системы и др.
Алфавит и атомы языка программирования Lisp
Языки программирования создаются для кодирования команд, выполняющихся компьютером. Благодаря этому устройство может обрабатывать текст, воспроизводить графику и звук, создавать расчеты и многое другое. При этом процессор компьютера обычно не может выполнять сложные команды. По этой причине их нужно трансформировать под процессор.
Но есть и другой метод, для которого программу не нужно менять под команды процессора, вместо этого он поступает на вход программы-исполнителя (то есть интерпретируется). Такой принцип действия как раз и присущ Лиспу.
Для удобства назовем Lisp-машиной программу, которая выполняет команды Лиспа. Изначально пользователь мог взаимодействовать с этим языком программирования за счет запросов и ответов. Но сейчас имеется два варианта реализации Лисп-машины: диалоговый и пакетный.
Второй способ взаимодействия подразумевает старт Lisp-машины, считывание команд из определенного источника (скажем, из файла), выполнение данной команды и завершение Лисп-машины. Чтобы овладеть языком Lisp, нужно помнить, что программа в этом случае будет состоять из команд, которые выполняются Лисп-машиной.
Команда GeekBrains совместно с международными специалистами по развитию карьеры подготовили материалы, которые помогут вам начать путь к профессии мечты.
Подборка содержит только самые востребованные и высокооплачиваемые специальности и направления в IT-сфере. 86% наших учеников с помощью данных материалов определились с карьерной целью на ближайшее будущее!
Скачивайте и используйте уже сегодня:
Топ-30 самых востребованных и высокооплачиваемых профессий 2023
Поможет разобраться в актуальной ситуации на рынке труда
Подборка 50+ ресурсов об IT-сфере
Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT
ТОП 50+ сервисов и приложений от Geekbrains
Безопасные и надежные программы для работы в наши дни
Алфавит языка Lisp
Алфавит языка Lisp состоит из заглавных и строчных латинских букв, цифр и всех клавиатурных знаков. В алфавит не включены литеры национальных языков, но это не является строгим правилом. Например, в алфавите HomeLisp есть все русские строчные и заглавные буквы.
Во множестве Lisp-алфавита наличествует 6 символов, которые применяются нестандартным способом – пробел, точка, открывающая и закрывающая круглые скобки, апостроф и двойные кавычки. Прочие символы используются обычным образом.
Атомы
Конструкции языка Lisp формируются из его алфавитных символов. Самой простой конструкцией выступает атом – произвольная строка алфавитных символов, за исключением отдельно стоящих:
- точки;
- левой или правой скобки или групп таких символов (кроме открывающей и закрывающей скобки, вписанных подряд);
- пробела или их группы;
- апострофа или знака двойных кавычек.
Те строки символов, которые изображают атомы, не могут включать в себя пробелы и круглые скобки, но могут содержать точку. Помимо всего прочего, существует предельная граница применения знака двойных кавычек внутри строки, изображающей атом.
В числе атомов Лиспа можно выделить 4 особые группы:
- Десятичные числа. Такие атомы являются корректным изображением такой единицы счета (целой или с дробной частью; в качестве их разделителя применяется точка).
- Шестнадцатеричные (битовые) константы. Представляются атомами вида: &Hnnnn, где nnnn – от 1 до 8 символов из набора: 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f.
- Строки. Данные атомы отличаются тем, что их первым и последним символом выступают двойные кавычки. В промежутках между этими знаками могут быть расположены любые алфавитные символы (включая пробелы и скобки).
- Атомы Nil и T. Такие атомы (в особенности Nil) применяются для выполнения самых разных задач.
В этой таблице вы можете видеть правила построения атомов Lisp:
Строка | Расшифровка |
Abc | Обычный атом. |
1Abc | Тоже атом, хоть и начинается с цифры. |
Q$W | Также является атомом, хоть и включает в свое название знак доллара. |
123 | Атом – число. |
-12.3 | Еще один атом – число. |
6.02E+23 | Тоже один атом – число. |
A.A | Атом. |
A A | Это не является атомом в связи с наличием пробела в имени. |
A( | Не является атомом из-за наличия скобки в имени. |
A’B | Также не является атомом, но уже по причине наличия апострофа. |
() | Атом. |
«Проба пера» | Атом-строка. В рамках строки можно использовать пробелы. |
«Проба «пера»» | Не является атомом из-за отсутствия удвоения кавычек, которые стоят внутри строки (см. пример ниже). |
«Проба «»пера»»» | Атом. |
«Проба ‘пера’» | Еще один вариант. Апостроф внутри строки – обычный символ. |
&HFFFFFF | Атом – битовая шкала. |
&H1122334455667788 | Обычный атом (похож на битовую шкалу, но в нем слишком много цифр). |
Настройка локальной среды языка программирования Lisp
Для полноценной настройки своей среды языка Lisp необходимо использовать две разновидности ПО – текстовый редактор и исполнитель Лисп:
Текстовый редактор
Он нужен для ввода программы. В качестве редактора подойдет Блокнот Windows, команда редактирования – ОС, Brief, Epsilon, EMACS и vim или vi.
Наименование и версия редактора может быть разной, в зависимости от конкретной ОС. К примеру, «Блокнот» – редактор в Windows, а vim или vi могут применяться как в Windows, так и в Linux или UNIX.