[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 Тот, кто желает, но не делает, распространяет чуму.
Re: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp IDE
От: yumi  
Дата: 16.03.09 02:36
Оценка:
Здравствуйте, volk, Вы писали:

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


В целом прочитав весь тот кошмарный путь, который ты прошел, у меня мороз по коже пробежал, а еще и положительные отзывы говоришь, издеваешься? Почему тупо для начала не взять Lispbox? Ну и что, что там немного старые версии? Для первого старта и для обучения все равно прекрасно подойдут. Разве что, прочитал туториал по емаксу и в бой. Дальше, если освоитесь, то постепенно переходите на следующий уровень.

Ну или можно поставить самый последний эмакс, ставится как любая другая виндоус программа, двойным кликом и последующими нажатиями кнопок "Next". Ставится любой компилятор Лиспа (поддерживаемый Slime), обычно это тоже ставится двойным кликом. Ставишь Slime, создаешь в хоум директории файл .emacs (где именно создать, там где-то в мануалах написано), туда копи-пастом вставляешь строчки из туториала Slime, меняешь пути на свои, указываешь путь к slime и к компилятору. Запускаешь emacs, M-x slime и вуаля!

Можно еще проще, поставить в виртуальной машине какой-нибудь debian, ubuntu, а там уже это гораздо легче.
Lisp is not dead. It’s just the URL that has changed:
http://clojure.org
Re: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp IDE
От: kmmbvnr Россия http://kmmbvnr.livejournal.com
Дата: 16.03.09 04:47
Оценка:
Здравствуйте, volk, Вы писали:

V>Установлены GnuWin, mingw & msys, cvs; извлечен из репозитория и собран из исходников Emacs

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

Недавно перешел на 23 Emacs, что под виндой, что под linux — взял готовые бинарники. Все работает.


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


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


V>1. Начинать emacs надо с tutorial-а.


+1

V>5. Настройка шрифтов и кодировок, как обычно, требует у себе особого внимания. Впрочем, для стандартных случаев это не должно занять более получаса;


Чего? Чего?

(defconst win32p
  (eq system-type 'windows-nt)
  "Are we running on a Windows system?")

(defconst linuxp
  (or (eq system-type 'gnu/linux)
      (eq system-type 'linux))

(set-language-environment "Russian")
(when win32p
  (setq w32-pass-lwindow-to-system nil
        w32-pass-rwindow-to-system nil
        w32-pass-apps-to-system nil
        w32-lwindow-modifier 'super 
        w32-rwindow-modifier 'super 
        w32-apps-modifier 'hyper)
  (custom-set-faces
   '(default ((t (:inherit nil :stipple nil :background "beige" 
                           :foreground "black" :inverse-video nil 
                           :box nil :strike-through nil :overline nil 
                           :underline nil :slant normal :weight normal 
                           :height 101 :width normal :foundry "unknown" 
                           :family "Lucida Console")))))
  (prefer-coding-system 'cp1251-dos))
(when linuxp
  (prefer-coding-system 'utf-8)
  (custom-set-faces
   '(default ((t (:inherit nil :stipple nil :background "beige" 
                           :foreground "black" :inverse-video nil 
                           :box nil :strike-through nil :overline nil 
                           :underline nil :slant normal :weight normal 
                           :height 101 :width normal :foundry "unknown" 
                           :family "Liberation Mono")))))))


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

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

V>Например, вот так.

Ничего не настраивал. Все завелось из коробки.

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

Умеет. На emacswiki есть пример.

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

Может потому что криво собрал. У меня все ОК.

V>Одновременный наскок на Emacs и Лисп -- это все ж таки слишком круто.


Я года четыре назад, когда принялся читать PCL — взял LispBox — и у меня все заработало. С удовольствием
освоил две трети книжки. C тех пор изредка использую lisp для задачек на project euler, а вот с emacs'a практически
не слезаю.
-- Главное про деструктор копирования не забыть --
Re: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp IDE
От: StevenIvanov США  
Дата: 16.03.09 07:45
Оценка: +1
Здравствуйте, volk, Вы писали:

V>...


нужно было бы пойти дальше и установить убунту
На самом деле — на ней, во-первых, работает все заметно шустрее, во-вторых не надо устанавливать то что там и так есть (компилятор+командная строка).
Re: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp IDE
От: Mr.Cat  
Дата: 16.03.09 07:52
Оценка:
Здравствуйте, volk, Вы писали:
V>Перечислены почти все неообходимые действия, за исключением мелочей вроде установки переменных среды.
Жуть. Пользователи archlinux просто пишут pacman -Suy emacs-cvs.

V>Линуксоиды испытывают примерно те же мучения с локализацией, кодировками и шрифтами.

Нет.
Re[2]: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp
От: Mr.Cat  
Дата: 16.03.09 07:59
Оценка:
Здравствуйте, Mr.Cat, Вы писали:
MC>pacman

Или yaourt — не помню точно, т.к. только им и пользуюсь.
Re[2]: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp
От: DemAS http://demas.me
Дата: 16.03.09 08:02
Оценка:
"Mr.Cat" <64543@users.rsdn.ru> writes:

> Жуть. Пользователи archlinux просто пишут pacman -Suy emacs-cvs.


yaourt -Suy emacs-cvs slime <и все остальное>

и идут пить чай. По возвращению все установлено и минимально настроено.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp
От: volk  
Дата: 16.03.09 09:05
Оценка:
Здравствуйте, yumi, Вы писали:

Y>В целом прочитав весь тот кошмарный путь, который ты прошел, у меня мороз по коже пробежал, а еще и положительные отзывы говоришь, издеваешься?


Чего в нем кошмарного? Временные оценки на все-все-все даны. Они вроде не должны пугать до мурашек по коже.


>Почему тупо для начала не взять Lispbox? Ну и что, что там немного старые версии? Для первого старта и для обучения все равно прекрасно подойдут. Разве что, прочитал туториал по емаксу и в бой. Дальше, если освоитесь, то постепенно переходите на следующий уровень.


А как осуществлять upgrade Лиспбокса? Видимо, сносить его напрочь и ставить все по новой.


Y>Ну или можно поставить самый последний эмакс, ставится как любая другая виндоус программа, двойным кликом и последующими нажатиями кнопок "Next". Ставится любой компилятор Лиспа (поддерживаемый Slime), обычно это тоже ставится двойным кликом. Ставишь Slime, создаешь в хоум директории файл .emacs (где именно создать, там где-то в мануалах написано), туда копи-пастом вставляешь строчки из туториала Slime, меняешь пути на свои, указываешь путь к slime и к компилятору. Запускаешь emacs, M-x slime и вуаля!


Собственно, если не компилировать Emacs, то именно так я и расписывал процесс установки до момента начала конфигурирования. Вот только вместо последнего официального Emacs-а я предлагал брать EmacsW32.


Y>Можно еще проще, поставить в виртуальной машине какой-нибудь debian, ubuntu, а там уже это гораздо легче.


Да, конечно. Вот только придется одновременно карабкаться на Линукс, Лисп и Emacs.
http://foolstown.com/sm/old.gif Тот, кто желает, но не делает, распространяет чуму.
Re: [Lisp] Отчет о первом подходе к снаряду. ч.1.5: Lisp IDE
От: MasterZiv СССР  
Дата: 16.03.09 11:07
Оценка:
volk пишет:

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


Господи, да зачем же Emacs собирать, ну есть же уже готовый.

> 1. Начинать emacs надо с tutorial-а. Он чрезвычайно подробный и

> позволяет за 15 минут освоить emacs на уровне блокнота. Конечно, удивили

+1. Собственно, если вы надеятесь как-то работать с Emacs-ом, НЕ ПРОЙДЯ
этот самый тьюториал, то вы делаете это зря. Его НАДО честно пройти,
весь, и научится. Иначе времени потом будет потрачено больше.
Я говорю это, как человек, сам раза 3 на этот тьюториал забивавший.

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

> пунктуации.
> Например, вот так <http://www.linux.org.ru/view-message.jsp?msgid=1042552&gt;.

Тут надо отметить особенность: Русская клавиатура в emacs может
быть обеспечена либо операционной системой, либо самим Emacs-ом,
то есть даже если у вас вообще нет русской клавиатуры, емакс её вам
даст. Поэтому если вы по первому пункту — ничего настраивать не надо.
По второму -- ну да, возможно надо. У меня как-то всё само заработало.


> переключать язык ввода в нем придется спецально предназначенной для

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

Можно одновременно использовать и то, и другое. Просто в юниксах если
переключить внешнюю клавиатуру, все коммандные клавиши перестают работать,
ведь Emacs живёт не на клавишах, а на символах. Клавиатуры собственно он
не видит и не обрабатывает. Поэтому, если вы готовы с этим мириться,
можете использовать внешнюю клавиатуру со стандартным переключателем.
Если нет — используйте емаксовый эмулятор.

> Оказывается, что набор рефлексов, которыми мы пользуемся при

> редактировании текста -- даже в блокноте, -- неожиданно обширный.

О! А ты знаешь, как тебе потом будет круто работать в юниксовом шеле ?
Дело в том, что как настройки клавиш read-line-а, так и многих
других программ и редакторов в GNU-мире просто тупо стянуты из Emacs,
ну или они просто проектировались одинаково. Но идея одна и та же --
делать всё, не отрывая рук от определённого местоположения на клавиатуре.
И это -- очень здорово.

> Далее, Windows-специфика в настройке emacs почти не играет роли.

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

Точно так. Я уже в винде просто не могу работать.

>

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

На сколько я знаю, Slime интенсивно и специально затачивается под SBCL.
И при этом производится взаимное встречное движение со стороны последнего.
Поэтому достаточно важно иметь Slime не версии 2, а из репозитория,
я её называю для себя 3b(eta). И SBCL надо не 1.0.13, а последней версии,
сейчас — 1.0.23 -25. Для винды предсобрана 22. Но это НЕ ЗНАЧИТ, что
для винды нет 25-ой, вы можете её скачать в исходниках и собрать,
собирается SBCL очень легко, без проблем. Там будут только какие-то тесты
фейлиться, но это не страшно. Для сборки нужен тот же MinGW

>

> (BTW, что означает сообщение "Your Kitten of Death awaits!", которым

Это — виндузятников пугать.
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.