[Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp IDE
От: volk  
Дата: 16.03.09 00:22
Оценка: 15 (2)
(Этот пост не касается собственно декларативного программирования, но я попросил бы модераторов не переносить его в другой форум, поскольку там его не найдут.)


В ходе обсуждения первой части
Автор: volk
Дата: 09.03.09
ряд авторитетных товарищей в корне не согласился с тем, что Лисп следует употреблять без классического Emacs.

Кроме того, было и такое мнение: "Если ты достаточно сумасшедший, чтобы взяться за Лисп, то чего бы тебе не освоить этот причудливый Emacs". Тоже очень мотивирует.

Так что я решил сделать некоторый зигзаг и установить-таки традиционную Lisp IDE. Как и ранее, все колдовство осуществлялось исключительно в контексте Windows. Некоторые стартовые рекомендации
Автор: volk
Дата: 09.03.09
дал MasterZiv, остальное, как обычно, из Гугла. Вот что из этого вышло.






Часть 1.5. С чем его едят.


Сборка и установка Emacs.

Итак, чтобы заполучить на Windows-машине работающую Lisp IDE, было проделано следующее.

Установлены GnuWin, mingw & msys, cvs; извлечен из репозитория и собран из исходников Emacs, сначала без поддержки графики, потом с ней; установлен SBCL, CLISP и SLIME. Операция завершилась успешно: (почти) все работает. Установка проводилась в фоновом режиме и заняла примерно день, впрочем, большая часть этого времени ушла на скачивание исходников и компиляцию пакетов Emacs. Чистого времени в консоли и в Гугле -- не более двух часов. На всякий случай: это без учета времени на конфигурирование.



Ключевые моменты следующие.

1. Нужно использовать последние версии исходников тех приложений и пакетов, которые будут работать в связке. Ну или в крайнем случае, версии, выпущенные примерно в одно и то же время. Прямая и обратная совместимость -- это больное место OpenSource. На практике это означает, что все, что можно взять из CVS, следует взять из CVS.

2. Помимо актуальности версий ПО, огромную роль играет актуальность шаманских инструкций, по которым вы собираете и настраиваете это ПО. Использование устаревшего руководства обычно не приводит к желаемому результату; иногда -- прямо к противоположному. На руководства, появившиеся больше 3-х лет назад, надо смотреть с некоторой подозрительностью: они устаревают в мелочах.

В качестве базовой инструкции по сборке emacs был взят вот этот документ. На 2009 год он все еще актуален. Перечислены почти все неообходимые действия, за исключением мелочей вроде установки переменных среды.

3. Не надо расслабляться. OpenSource полон ловчих ям с острыми кольями на дне. Например, если одна утилита из пакета нормально переносит длинные имена файлов в Windows, то это не означает, что и другая утилита оттуда же будет чувствовать себя нормально, если вы поселите ее, к примеру, в папку Program Files. Поддержка совместимости с Windows в nix-приложениях все еще очень неоднородна.



Если следовать этим рецептам, то в ходе установки и сборки почти ничего не глючит и не падает. "Почти не глючит" -- значит, не больше одного глюка на утилиту в среднем. А упала в этот раз только приблуда mingw32-make; впрочем, и ее можно заставить работать.

На самом деле, не обязательно собирать все из исходников. Неофициальная сборка под названием EmacsW32, основаная на достаточно свежей -- месячной давности -- версии исходников, мне показалась вполне работоспособной.

Очень порадовала стабильность nix-утилит под Windows. В частности, MinGW и msys больше не конфликтуют и не дерутся за место в PATH-е. Кардинально улучшилось качество дистрибутивов MinGW: пришлось разыскивать только один забытый .h-файл. DLL hell, кажется, в прошлом. В общем, за последние несколько лет выращивать свой рахитичный линукс в клетке Windows-а стало гораздо проще.

В дистрибутивах различных компонент mingw и msys по-прежнему царит творческий беспорядок, что создает мелкие неудобства. Ну что ж, зато видно, что проекты живые и активно развиваются.




Конфигурирование Emacs.

Не вдаваясь в обсуждение собственно редактора (тема скользкая, а декларативный форум -- не место для политических дискуссий), перечислю несколько начальных ступенек.

1. Начинать emacs надо с tutorial-а. Он чрезвычайно подробный и позволяет за 15 минут освоить emacs на уровне блокнота. Конечно, удивили откровения в духе "курсор перемещается с помощью клавиш C-b ("back") и C-f ("forward"); вы, конечно, можете использовать эти забавные стрелочки справа на клавиатуре, но мы этого не рекомендуем -- ведь они встречаются не на всех терминалах!" Тем не менее, tutorial полезен чрезвычайно.

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

3. В том же документе описана настройка давно желанной фичи: чтобы текст сам прокручивался, когда курсор приближается к нижнему краю экрана.

4. А вот что делать с подергиванием текста при перемотке -- непонятно. Видимо, где-то в emacs-е не хватает двойной буферизации.

5. Настройка шрифтов и кодировок, как обычно, требует у себе особого внимания. Впрочем, для стандартных случаев это не должно занять более получаса; ключевое слово -- emule-ucs. Рекомендаций в сети более чем достаточно. Еще столько же у меня ушло на установку и настройку шрифта Consolas.

6. В русской раскладке нужно настраивать еще и расположение знаков пунктуации.
Например, вот так.

7. Кроме того, редактор содержит в себе собственную систему локализации и в этом смысле почти не зависит от ОС. На практике это означает, что переключать язык ввода в нем придется спецально предназначенной для этого комбинацией клавиш, а не той, что в ОС. Кончено, можно пользоваться и традиционным для Windows Ctrl-Shift, но тогда в режиме Ru пропадет возможность вводить клавиатурные комбинации emacs. Например, Ctrl-S превращается в Ctrl-Ы, и т.д. Настройка локализации и освоение -- еще около 15 минут.

8. Emacs не умеет запускаться в развернутом на весь экран окне. Почему?..

9. И совершенно непонятно, почему в русской раскладке нажатие на левый Control редактор воспринимает как Alt.


На этом я остановился.


Справедливости ради надо сказать, что мучительный процесс настройки редактора не является результатом его "кривости" или Open-Source природы (конечно, эти два фактора тоже сказываются). Тягомотная настройка проистекает из следующего фундаментального обстоятельства.

Оказывается, что набор рефлексов, которыми мы пользуемся при редактировании текста -- даже в блокноте, -- неожиданно обширный. А подход, который применянтся в emacs-е, таков, что вам придется отдельно конфигурировать среду практически для каждого действия, которое вы применяете при редактировании. Либо же освоить стандартный для emacs способ (если он есть) и отрабатывать соответствующий рефлекс.

Далее, Windows-специфика в настройке emacs почти не играет роли. Линуксоиды испытывают примерно те же мучения с локализацией, кодировками и шрифтами. А для большей части пакетов Emacs настройки не привязаны к платформе.

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


В целом, не так уж страшен черт, как его малюют: достаточно выучить 5-6 клавиатурных комбинаций, и с emacs-ом можно нормально жить (сосуществовать).

Для целенаправленной заточки редактора под себя потребуется около 10...30 движений рашпилем (интерполирую по примерам конфигурационных файлов Emacs), каждое из которых требует от 5 минут до часа времени. В общем, процесс должен растянуться на неделю-другую.


Установка и настройка CLISP

Установка CLISP вполне элементарная: его надо скачать, распаковать и задать путь к exe-файлу. Кроме того, в дистрибутиве нет пакета ASDF и его надо доустановить. Для этого нужно скачать 1 lisp-файл и дописать стартовый файл CLISP. Вот инструкция.

Для начала больше ничего не нужно.



Пакет Slime.

Установка Slime дается почти даром. Свежая версия скачивается с помощью CVS, и в конфигурационном файле emacs прописывается пара команд. Все.

Установленный Slime бодро запускается и функционирует. Вполне работоспособен и отладчик для CLISP. Кончено, если привыкнуть к тому, что первые 20 записей в backtrace иллюстрируют исключительно ход вызова отладчика, а выражение, вызвавшее ошибку, стоит 21-м в стеке.

А вот для SBCL любая ошибка в программе приводит потере соединения, и Slime приходится перезапускать. В остальном SLIME+SBCL вполне дружат.

(BTW, что означает сообщение "Your Kitten of Death awaits!", которым SBCL радостно приветствует пользователя при старте? Вспоминается только "Every time you use goto in your program, somewhere, somehow a kitten deaths".)


Свои основные IDE-шные функции -- автокомплит, подсветку скобок и прочее -- Slime выполняет хорошо. Более того, в нем есть еще и профилировщик, который, кажется, работает.




В целом, впечатления от Lisp IDE в виде Emacs+Slime вполне положительные. Из Emacs-а получается достойная IDE; по крайней мере, если усердно работать напильником.

Но, тем не менее, остаюсь при своем мнении: пирожки надо заглатывать последовательно, а не одновременно. То есть, осваиваясь в Лиспе и Emacs-е, надо сначала разбираться с одним, потом с другим. Порядок не важен. Начинать с Лиспа интереснее; старт с Emacs-а позволит сэкономить время на установке и изучении "временного" редактора.

Одновременный наскок на Emacs и Лисп -- это все ж таки слишком круто.
http://foolstown.com/sm/old.gif Тот, кто желает, но не делает, распространяет чуму.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.