Лисп/Историософия: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
мНет описания правки
Строка 11:
Из этой наблюдаемой тенденции можно смело заключить: Лисп «сечёт» лишь небольшая прослойка академиков и искин-хакеров лишь потому, что сам он '''ведёт''' дальнейшее развитие иных языков общего назначения, с запозданием от года до десятков лет.
 
==Отличия==
[...]
В силу вышесказанного, даже бывалым программистам при изучении Лиспа порою прийдётся переучиваться:
#Отличать значения некоторых терминов в Лиспе от таковых в других языках, например: макрос, оператор, функция, определение функции, присвоение переменной.
#Изучать необычные заменители привычных приспособлений, например: макросы, родовые функции, условия, продолжения, обобщённые переменные.
#Привыкать к иной манере программирования, поощряемой уникальными свойствами Лиспа, — такими, например, как макросы.
 
Первое — путаницу в терминологии — легко простить Лиспу; как-никак, многие из таких понятий были впервые введены в нём. Второе требование также не шибко досадно: лисповы «заменители» оказываются изящнее и гибче, чем их привычные аналоги в иных языках.
 
А вот последнее требование — менять способ составления программ — отвратит от Лиспа многих программистов. Оно вовсе не обязательно: на Лиспе можно программировать в «джавном» или «сишном» стиле. Однако, безумной расточительностью будет это человеку, уже привыкшему к фортраноподобным языкам. Не переходить же на новый язык ради одних только «удобств» вроде родовых функций.
 
===Восходящее программирование===
<span style="margin-left:-0.1em">Частный</span> аспект этого нового способа назван «восходящим программированием» (по-английски — ''bottom-up'' programming<ref name="onlisp">Paul Graham, ''On Lisp'', ISBN 0130305529</ref> — «программирование со дна вверх»). Вообще-то любая программа составляется и «снизу», и «сверху», — если она, конечно, написана не прямо на автокоде. Программист на Фортране/Алголе/Си++/Джаве «восходит» по лестнице концептуальной сложности программы всякий раз, когда пишет библиотеку. Но целую программу не создашь на одних библиотеках, да и ограничения языка вскоре дают о себе знать. Так программист встаёт на более традиционный путь «нисходящего программирования»: начиная с наиболее общего взгляда на проектируемую систему, мысленно дробит её на такие части, какие легче всего представить средствами данного языка и существующими библиотеками.
 
<span style="margin-left:-0.1em">Лисп</span> же, будучи усвоен программистом, не торопит навязывать свои структуры и процедуры, а даёт все приспособления для творения новых, — творения, фактически, собственного языка. Опять же, библиотечные функции и классы делают подобное в других языках. Но Лисп идёт намного дальше, позволяя создавать ''«библиотечное что-угодно»'': не только функции или классы, а любую абстракцию вычислительных процессов и структур данных. Например, КЛОС — система классового программирования в Общем Лиспе, — это лишь набор макросов. Это равно что на каком-нибудь Си-шарпе написать библиотеку… например, логического программирования. А вот на Лиспе целая реализация Пролога вместилась в 180 неторопливых строк.<ref name="onlisp" />
 
{{Info|Одна из задач, предлагаемых в этом учебнике — придумать новую «парадигму» или «философию» программирования, затем реализовать её в Лиспе.}}
 
<span style="margin-left:-0.1em">Так</span>, Лисп позволяет программировать эффективнейшим способом: создать удобный набор понятий и составить из них решение вычислительной задачи. Или же наоборот: разделить задачу на систему более простых понятий, (и не обязательно только«модулей», «структур», «процедур», «объектов»,) а затем без особых ограничений реализовать те понятия и взаимосвязи между ними.
 
===Начинающим программистам===
Остережение выше было обращено к программистам, привыкшим к нелисповым языкам. Но и совершенным новичкам может быть немудро начинать с изучения Лиспа.<ref>Даже по Эрику Рэймонду[http://www.catb.org/~esr/faqs/hacker-howto.html#skills1], Лисп должен быть не первым изученным языком, а лишь одним из пяти-шести первых, наряду с [[Язык Си в примерах|Си]][[Си++|[++]]], [[:Категория:Python|Пайтоном]], [[Java|Джавой]] и Пёрлом ^.^ kawaii ;-)</ref> Во-первых, это сложный язык, а Общий Лисп — сложнейший из диалектов. Во-вторых, он непопулярен: намного трудней найти с ним трудоустройство, хостинг для веб-приложений или помощь.
 
Однако, изучение Лиспа будет полезно хотя бы для [[Словарик философствующего информатика|глубокого понимания информатики и проектирования программ]].
----
<references />