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

Содержимое удалено Содержимое добавлено
→‎Отличия: опечатка - приЙдётся
мНет описания правки
Строка 1:
{{Эпиграф|[Лисп есть] величайший единственный язык  программирования из когда-либо сотворённых.
{{Подпись|— [[w:Алан Кэй|Алан Кэй]].}}}}
<div style="max-width:52em;margin:1em0.61803em auto 02em 4%;">
Поищем ответ в сравнении. Популярные языки программирования создавались и создаются обычно инженерами, телефонизаторами, «хакерами» (и простыми студентами), веб-дизайнерами, лингвистами, математиками, любителями языка Си, японцами… для целей вроде создания веб-сайтов, популяризации среди школьников и первокурсников, программирования экзотичных операционных систем или стиральных машин, обработки текстовых файлов или создания «более удобного» соперника существующим языкам.</div>
Почему, несмотря на репутабельные доводы о [[Лисп/Превосходство|полном превосходстве Лиспа]] над другими языками программирования, народ не пошёл следом за таким убеждением, не одарил его всеобщей славой?
 
Поищем ответ в сравнении. Популярные языки программирования создавались и создаются обычно инженерами, телефонизаторами, «хакерами» (и простыми студентами), веб-дизайнерами, лингвистами, математиками, любителями языка Си, японцами… для целей вроде создания веб-сайтов, популяризации среди школьников и первокурсников, программирования экзотичных операционных систем или стиральных машин, обработки текстовых файлов или создания «более удобного» соперника существующим языкам.</div>
 
 
{{Эпиграф|Говорят, мол, [[Ruby|Руби]] это плохо переваренный Лисп или Смоллток, и мне приходится согласиться. Но он милее обычным людям.
{{Подпись|— [[w:Юкихиро Мацумото|Юкихиро Мацумото]], создатель Ruby}}}}
<div style="max-width:52em;margin:1em0.61803em auto 02em 4%;">
 
<div style="max-width:52em;margin:1em auto 0 4%;">
Лисп же изначально испытывал передовые приёмы исчисления и структурирования программ. Удивительно, но все из этих нововведений проникли в сознание программистской общественности лишь как последующие заимствования их в более популярных языках. То есть в тех языках, что милее обычным людям.
 
Многие из этих заимствований были сразу приняты за  стандарт (условные операторы выражения, переменные как -указатели, ), иные — чуть погодя (рекурсия, сборка мусорамусоросбор, интерактивность, нотация для символьных данных). Но не в малой части дары Лиспа ''лишь теперь'' опасно исследуются программистским сообществом, и их робкое применение сразу объявляется революционным нововведением: (функциональное программирование, метапрограммирование, синтактическая абстракция, макроввод данных при компиляции…
 
Из этой наблюдаемой тенденции можно смело заключить: Лисп «сечёт» лишь небольшая прослойка академиков, и поэтому он ведёт дальнейшее развитие иных языков общего назначения, с запозданием от года до десятков лет.</div>
 
Из этой наблюдаемой тенденции можно смело заключить: Лисп «сечётсечётся» лишь небольшаяхардкором прослойка академиковакадемии, икоторые поэтомуволей-неволей он ведётпредписывают дальнейшее развитие иных языков общего назначения, с запозданием от года до десятков лет и с поправкой на интересы индустрии.</div>
{{Эпиграф|[Созданием [[Java|Джавы]] в 1990-х годах] мы не стремились отыграть программистов на Лиспе; мы целились на программистов [[Си++]]. Многих из них мы утащили куда-то на полпути к Лиспу.
{{Подпись|— Гай Стил<ref>Член стандартизационных комитетов для Си, Фортрана, Коммон Лиспа, Джавы; член IEEE, соавтор диалекта Схим.</ref>}}}}
<div style="max-width:52em;margin:1em0.61803em auto 02em 4%;">Помимо того, однако, Лисп таит некую ''особую'' мощь, на которую не желают покуситься даже самые талантливые и амбициозные языкотворцы. Пол Грэхэм [http://paulgraham.com/diff.html описал] её так:
 
<div style="max-width:52em;margin:1em auto 0 4%;">Помимо того, однако, Лисп таит некую ''особую'' мощь, на которую не желают покуситься даже самые талантливые и амбициозные языкотворцы. Пол Грэхэм [http://paulgraham.com/diff.html описал] её так:
 
<div style="float:none; padding: 3px 15px 3px 15px;">
Строка 31 ⟶ 24 :
9. Всегдашняя доступность языка. Нету существенного разграничения между чтением, компиляцией и исполнением.
 
</i>[Замысел №]<i>8, который (вместе с 9) делает возможным Лисповы макросы, покамест уникален в Лиспе, наверное, потому, что (а) требует всех этих скобок, или нечта столь же плохого, и (б) если вы сделаете этот последний шаг умощнения, вы не сможете заявляться изобретателем нового языка — лишь только создателем нового диалекта Лиспа ;  -)»</i></div>
</div>
 
==Отличия==
<div style="max-width:52em;margin:1em auto 0 4%;">
В силу вышесказанного, даже бывалым программистам при изучении Лиспа порою придётся переучиваться:
#Отличать значения некоторых терминов в Лиспе от таковых в&nbsp; других&nbsp; языках, например: макрос, оператор, функция, определение&nbsp; функции, присвоение&nbsp; переменной.
#Изучать необычные заменители привычных&nbsp; приспособлений, например: макросы, родовые&nbsp; функции, условия, продолжения, обобщённые&nbsp; переменные.
#Привыкать к иной манере программирования, поощряемой уникальными&nbsp; свойствами&nbsp; Лиспа, —&nbsp; такими, например, как&nbsp; макросы.
 
Первое —&nbsp; путаницу в терминологии —&nbsp; легко простить Лиспу; как-никак, многие из таких понятий были впервые введены в нём. Второе&nbsp; требование также не шибко досадно: лисповы «заменители» оказываются изящнее и гибче, чем их привычные аналоги в&nbsp; иных&nbsp; языках.
 
А вот последнее требование —&nbsp; менять способ составления программ —&nbsp; отвратит от Лиспа многих программистов. Оно вовсе не обязательно: на&nbsp; Лиспе можно программировать в «джавном» или «сишном» стиле. Однако, безумной расточительностью будет это человеку, уже привыкшему к фортраноподобным языкам. Не переходить же на новый язык ради одних только «удобств» вроде родовых функций.</div>
 
===Восходящее программирование===
<div style="max-width:52em;margin:1em auto 0 4%;">
<span style="margin-left:-0.1em">Частный</span> аспект этого нового способа назван «восходящим программированием» (по-английски — ''bottom-up'' programming<ref name="bottom-up">Статья [http://www.paulgraham.com/progbot.html Programming Bottom Up] на английском; часть книги «On Lisp».</ref> — «программирование со дна вверх»). Вообще-то любая программа составляется и «снизу», и «сверху», — если она, конечно, написана не прямо на автокоде. Программист на Фортране/Алголе/Си++/Джаве «восходит» по лестнице концептуальной сложности программы всякий раз, когда пишет библиотеку. Но целую программу не создашь на одних библиотеках, да и ограничения языка вскоре дают о себе знать. Так программист встаёт на более традиционный путь «нисходящего программирования»: начиная с наиболее общего взгляда на проектируемую систему, мысленно дробит её на такие части, какие легче всего представить средствами данного языка и существующими библиотеками.
 
<span style="margin-left:-0.1em">Лисп</span> же, будучи усвоен программистом, не торопит навязывать свои структуры и процедуры, а даёт все приспособления для творения новых, — творения, фактически, собственного языка. Опять же, библиотечные функции и классы делают подобное в других языках. Но Лисп идёт намного дальше, позволяя создавать ''«библиотечное  что-угодно хочешь»'': не только функции или классы, а любую абстракцию вычислительных процессов и структур данных. Например, КЛОС — система классового программирования в Common Lisp, — это лишь набор макросов. Это равно что на каком-нибудь C# написать библиотеку… например, логического программирования. А вот на  Лиспе целая реализация Пролога вместилась в 180 неторопливых  строк.<ref name="onlisp">(англ.) [http://www.paulgraham.com/onlisptext.html Paul Graham, ''On Lisp'', ISBN 0130305529]</ref>
 
<span style="margin-left:-0.1em">Так</span>, Лисп позволяет программировать эффективнейшим способом: создать удобный набор понятий и составить из них решение вычислительной задачи. Или же наоборот: разделить задачу на систему более простых понятий, (и не обязательно только «модулей», «структур», «процедур», «объектов»,) а затем без особых ограничений реализовать те понятия и взаимосвязи  между  ними.
</div>
 
===Начинающим программистам===
<div style="max-width:52em;margin:1em auto 0 4%;">
Остережение выше было обращено к программистам, привыкшим к нелисповым языкам. Но и совершенным новичкам может быть немудро начинать с изучения Лиспа.<ref>Даже по Эрику Рэймонду[http://www.catb.org/~esr/faqs/hacker-howto.html#skills1], Лисп должен быть не первым изученным языком, а лишь одним из пяти-шести первых, наряду с [[Язык Си в примерах|Си]][[Си++|[++]]], [[:Категория:Python|Пайтоном]], [[Java|Джавой]] и Пёрлом ^.^ kawaii ;-)</ref> Во-первых, это сложный язык, а Общий Лисп — сложнейший из диалектов. Во-вторых, он непопулярен: намного трудней найти с ним трудоустройство, хостинг для веб-приложений или помощь.
 
С другой стороны, всё-таки, [[Лисп/Превосходство|Лисп не перестаёт быть хвалим]] выдающимися представителями рода человеческого. При всей сложности, может ли Лисп всё же оказаться кратчайшим путём от амбиции начинающего программиста к работающему, отлаженному вычислительному шедевру?
 
Вопрос ищет, скорее, область определения положительного ответа. Часто можно встретить мнение, дескать, каждой задаче —  своё  решение, каждому программисту —  свой  язык. Так, Лисп изначально доминирует в области «искусственного  интеллекта» (области довольно широкоохватной.) Однако на нём сделали большой доход творцы самых разных видов программного обеспечения. Это заслуга Лиспа, или же продукт случайности, так что использование Лиспа было компромиссом? Или, возможно, Лисп подходит только для определённого типа личности? Одно дело — эксцентричные «хакеры» и 50-летние кандидаты, проповедующие Лисп, другое дело — чёткая картина, описанная  выше.
 
Не умея дать уверенного и чёткого ответа, сошлёмся на эссе, написанного директором исследований компании «Гугл» и по совместительству знаменитым лиспником: [http://www.williamspublishing.com/21-days.html «Научись программировать за десять лет»] (русский перевод; оригинал — [http://norvig.com/21-days.html Teach Yourself Programming in Ten Years].) Однако Норвиг, опять-таки, вышел из той же академической среды по искуственному интеллекту…
 
Так или иначе, изучение Лиспа будет полезно хотя бы для [[Словарик философствующего информатика|глубокого понимания информатики и проектирования программ]].</div>