Common Lisp IDE


    Доброго времени суток, уважаемый читатель!
    Перед каждым новичком в мире языка программирования Common Lisp
    возникает проблема выбора среды разработки — Integrated Development Environment (далее, IDE).

    Существует большое количество IDE для Common Lisp. Перечислим некоторые, самые распространенные, из них:

    Для Знатоков
    Знатоки могут возразить относительно последних двух пунктов списка.
    Ведь, казалось бы, Lispbox = Emacs + Slime?!
    Но, если внимательно посмотреть на сайт Lispbox, то, под ссылками для скачивания пакета, Вы увидите:
    Last updated: February 6, 2011.

    В данной статье я подробно расскажу как установить и настроить кроссплатформенную среду разработки для Common Lisp, как скачивать и устанавливать дополнительные библиотеки при помощи quicklisp — менеджера пакетов Common Lisp. Будет много полезных ссылок на ресурсы и материалы по языку.
    Речь пойдет о связке GNU Emacs & Slime.
    Если Вас интересует Common Lisp, Вам нужна кроссплатформенная, мощная, интерактивная Common Lisp IDE с блэкджеком и дамами дебаггером и дизассемблером (внезапно!), то, прошу под кат…



    Выбор реализации Common Lisp


    Common LispANSI стандартизированный язык программирования, не имеющий единой канонической реализации.
    Приведу список основных реализаций:

    Нам нужна кроссплатформенная, свободная, автивно развивающаяся реализация Common Lisp. Я выбрал SBCL.
    Итак, начнем!!!

    Подготовительные работы


    MS Windows


    • Создаем директорию для GNU Emacs по адресу: C:\emacs\
    • Создаем директорию для SBCL по адресу: C:\sbcl\
    • Скачиваем последнюю версию GNU Emacs и распаковываем в директорию C:\emacs\
    • Скачиваем дистрибутив SBCL и устанавливаем в директорию C:\sbcl\
    • Заходим в директорию с GNU Emacs (C:\emacs\bin\), находим addpm.exe и запускаем его
      (добавит иконку запуска Emacs в меню Пуск)
    • Редактируем переменные окружения:
      • Создаем переменную окружения с названием HOME (если Вы еще этого не делали...) и значением
        C:\Users\%username%\
        , где %username% — имя Вашей учетной записи
      • Создаем переменную окружения с названием PATH (если Вы еще этого не делали...) и значением C:\emacs\bin\
    • Создаем пустой файл с названием .emacs в C:\Users\%username%\
    • Создаем пустую директорию C:\Users\%username%\.quicklisp\
    • Скачиваем файл quicklisp.lisp и размещаем его в директорию C:\Users\%username%\.quicklisp\

    GNU/Linux (deb-based distributives)


    • Устанавливаем GNU Emacs:
      sudo apt-get -y install emacs24
      sudo apt-get -y install org-mode
      sudo apt-get -y install emacs24-el
      sudo apt-get -y install emacs-goodies-el 
      
    • Устанавливаем SBCL:
      sudo apt-get -y install sbcl
      sudo apt-get -y install sbcl-doc
      sudo apt-get -y install sbcl-source
      
    • Создаем пустой файл с названием .emacs в домашней директории ~/
    • Создаем пустую директорию ~/.quicklisp/
    • Скачиваем файл quicklisp.lisp и размещаем его в директорию ~/.quicklisp/
      sudo apt-get -y install curl
      curl -o $HOME/.quicklisp/quicklisp.lisp https://beta.quicklisp.org/quicklisp.lisp
      


    Настройка Emacs


    Пора настроить Emacs для профессиональной работы с Common Lisp проектами.
    Предупреждение
    Вся дальнейшая ребота по настройке системы будет проходить в GNU Emacs.
    Все, что приведено ниже относится и к MS Windows и к GNU/Linux.
    Подразумевается владение основами редактирования в Emacs.

    Откроем для редактирования файл .emacs. Поехали!
    • Определяем реализацию Common Lisp:
      (require 'cl)
      (setq-default inferior-lisp-program "sbcl")
      
    • Настроим пакетный менеджер Emacs:
      ;; Package manager:
      ;; Initialise package and add Melpa repository
      (require 'package)
      (add-to-list 'package-archives
                   '("melpa-stable" . "https://stable.melpa.org/packages/") t)
      (package-initialize)
      
      (defvar required-packages '(slime
                                  smartparens
                                  auto-complete))
      
      (defun packages-installed-p ()
        (loop for package in required-packages
              unless (package-installed-p package)
                do (return nil)
              finally (return t)))
      
      (unless (packages-installed-p)
        (package-refresh-contents)
        (dolist (package required-packages)
          (unless (package-installed-p package)
            (package-install package))))
      

      Теперь, когда Вы запустите Emacs снова, то начнется автоматическая загрузка и установка пакетов:
    • Настроим наши пакеты:
      (when (packages-installed-p)
        (require 'smartparens-config)
        (smartparens-global-mode)
      
        (require 'auto-complete-config)
        (ac-config-default)
        (global-auto-complete-mode t)
        (setq-default ac-auto-start t)
        (setq-default ac-auto-show-menu t)
        (defvar *sources* (list
                           'lisp-mode
                           'ac-source-semantic
                           'ac-source-functions
                           'ac-source-variables
                           'ac-source-dictionary
                           'ac-source-words-in-all-buffer
                           'ac-source-files-in-current-dir))
        (let (source)
          (dolist (source *sources*)
            (add-to-list 'ac-sources source)))
        (add-to-list 'ac-modes 'lisp-mode)
      
        (require 'slime)
        (require 'slime-autoloads)
        (slime-setup '(slime-asdf
                       slime-fancy
                       slime-indentation))
        (setq-default slime-net-coding-system 'utf-8-unix))
      
    • Настроим отступы Lisp-кода:
      (setq-default lisp-body-indent 2)
      (setq-default lisp-indent-function 'common-lisp-indent-function)
      

    Сохраняем файл .emacs и перезапускаем Emacs.
    Emacs загрузит и установит Slime, Smartparens и Auto Complete автоматически в директорию
    C:\Users\%username%\.emacs.d\ для MS Windows и в директорию ~/.emacs.d/ в GNU/Linux.
    Предупреждение
    Написанный нами, только что, файл конфигурации .emacs является кроссплатформенным!
    При переносе с Linux на Windows и наоборот, ничего не нужно менять!
    Главное — расположить .emacs в нужную директорию (создание переменной окружения
    HOME для MS Windows — обязательно!
    ).

    Рано праздновать, нужно еще настроить quicklisp — пакетный менеджер Common Lisp.

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


    Quicklisp — пакетный менеджер языка Common Lisp.
    • В запущенном Emacs выполняем команду M-x slime (Alt-x slime);
      запустится среда разработки Common LispSlime
    • Выполним:
      ;; Подгрузим менеджер пакетов
      (load "~/.quicklisp/quicklisp.lisp")
      ;; Автоматический скачается и установится менеджер пакетов quicklisp
      ;; со всеми зависимостями
      (quicklisp-quickstart:install :path "~/.quicklisp/")
      ;; Создаст .sbclrc файл в домашней директории
      ;; и, при каждом запуске среды Slime/SBCL, будет подгружать
      ;; скаченные и установленные Вами пакеты и библиотеки
      (ql:add-to-init-file)
      

    Для примера, установим пару библиотек для Common Lisp при помощи quicklisp:
    • CEPL is a lispy and REPL friendly library for working with OpenGL:
      (ql:quickload :swank)
      (ql:quickload :sdl2)
      (ql:quickload :cepl.sdl2)
      
    • работа с БД:
      (ql:quickload :cl-dbi)
      
    • Web-сервер:
      (ql:quickload :hunchentoot)
      
    • Вставить любимое расширение %username%
    • обновление установленных библиотек и самого quicklisp:
      (ql:update-all-dists)
      (ql:update-client)
      

    Для Common Lisp написано большое количество качественных библиотек на все случаи жизни.
    При помощи quicklisp их легко установить и начать использовать.
    Собственно, у Вас теперь есть все необходимое для того, чтобы с головой окунуться в мир Common Lisp!
    Поздравляю!

    Полезные ссылки


    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 14

      +1
      не слышал чтобы в GNU/Linux использовалось sudo aptitude install для чего-либо. Только для debian-sourse дистрибутивов
        0
        Прошу прощения, исправил.
        –1
        У меня есть вопрос о синтаксисе, и при этом не о скобках.
        Что вы думаете об удобочитаемости записей, которые нужно смотреть справа налево? Например,

        (to-customize (to-install Common-Lisp-IDE))
        


        В объектно-ориентированных языках это можно было бы записать как

        Common-Lisp-IDE.to-install.to-customize
        


        Это не относится непосредственно к LISP, в том же Haskell или C запись тоже «перевернутая». Привыкаете ли вы или со временем это продолжает вызывать дискомфорт, так как традиционно письменность в другую сторону.

        .LISP'e на писать легко арабам Наверное
          0
          Дело в том, что в функциональных языках функция является самодостаточным объектом. Ее можно передавать, возвращать и частично пприменять. Поэтому запись с точкой после ее первого аргумента — немного некорректна. Разве что язык должен быть мультипарадигменным.

          Например в Скале пошли еще дальше — поубирали точки, и теперь можно писать

          names mkString ","
          

          вместо

          names.mkString(",")
          

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

            (((Common-Lisp-IDE) to-install) to-customize)
            


            Здесь точно так же как в LISP'e, только последний аргумент, а не первый, считается функцией.

            В Scala очень даже используют функции без точек

            names ++ otherNames
            


            Anyways, вопрос в том, удобно ли читать справа налево.
            0
            Это скорее вопрос нотации.

            toCustomize( toInstall(CL_IDE) )
            


            Тоже выглядит не особо.

            Есть достаточно общее решение композиции функций. В Clojure для этого есть специальная функция ->:
            (-> Common-lisp-IDE to-install to-customize)
            

            Будучи макросом, тоже самое можно сделать и в CL.
              –1
              Я не говорю, что проблема с скобках. Я сам согласился, что к C такой же вопрос.

              Конечно, можно написать макрос. Но как говорят, «in Rome, do as Romans do», «со своим уставом в чужой монастырь не ходят». Это как в каком-то Ruby возвращать два значения, где второе — ошибка, как принято в Go.

              Все пишут справа налево, так здесь принято. Но удобно ли читать такой код?
              0
              По мне, так дело только в привычке…
              Просто я перестроил моё «миропонимание» таким образом: функция — первый элемент списка, остальное — аргументы (привет от Капитана Очевидность:-).
              Просто нужно привыкнуть…
              0
              Да я тоже не про скобки, я про то, что наличие функций как обьектов первого класса дает возможность строить элегантные конструкции, которые более идиоматичны для CL, чем цепочка вызовов. Хотя, усли вызовов двое, как в примере выше, то вприцнипе, ничего страшного нет и я сам регулярно так делаю. Но если действительно цепочка вызовов — то без композиции функций очень сложно понять кто что получает и кто что ожидает получить, особенно, если arity функций не всегда равен 1.

              Все пишут справа налево, так здесь принято.


              Вообще, тезис сильный. Я, например, стараюсь использовать композиции и частичное применение, привыкать к неудобному — не очень полезно.
                –1
                Могу ли я сделать вывод из вашего сообщение, что несмотря на опыт, запись справа налево остается неудобной, особенно если параметров несколько?
                  0
                  Не могу говорить за сообщество, но лично за себя ответ «да, мне неудобно».
                0
                Скажите, а куда можно пойти работать лисповиком в России/Украине/Белоруссии или по удаленке? Понятно, что софта на лиспе хватает, но интересует именно коммерческая сторона вопроса для среднего программиста.
                  0
                  > Нам нужна кроссплатформенная, свободная, автивно развивающаяся реализация
                  > Common Lisp. Я выбрал SBCL.

                  SBCL под Windows, официальный релиз имел некоторые баги и проблемы с потоками
                  habrahabr.ru/post/131418 сводящие впечатление от работы в с ним на нет.

                  Исправилось ли это? Хотели мерджить форк А.Ковелкенко с основной веткой.

                  С другой стороны версия/форк Антона Коваленко, последняя вышла в 2013-01, уже достаточно давно.

                  Какую версию SBCL выбрать?

                  2. Какой гайд по настройке выбрать? по ссылке выше более лаконично. хотелось бы программировать на CL а не заниматься длительными перенастройками Emacs-а
                    0
                    Спасибо за замечание относительно бага SBCL в Windows. Я про него знал.
                    Но зачем так котегорично?
                    … сводящие впечатление от работы в с ним на нет.

                    Не стоит судить о вещах на основании чьих-то впечатлений…
                    Я, пока, сильных косяков с официальной реализацией под Windows не замечал.
                    Для успокоения приведу ссылку на замечательную CAS-систему Maxima: бинарники скомпилированы при помощи трех реализаций: SBCL, OpenMCL и CLisp. Все прекрасно работают. Я все пробовал. Сейчас установлена версия с SBCL (на работе Windows, дома — Linux). Вы же понимаете, что CAS-систему, состоящую на 72.2% из Common Lisp кода не станут собирать и компилировать на «плохой» реализации…
                    На машине с Windows использую последнюю версию SBCL(1.2.13). Полет — нормальный.
                    Решать Вам…
                    Отностительно настройки Emacs — если хотите, скачайте LispWorks и/или Allegro — отличные продукты, но, проприетарные. Но есть «бесплатные» Personal Edition (типа MS VS Express Edition...). Но, запомните, Slime + Emacs ничем не уступают коммерческим системам… Бесплатно, но долго привыкать и учиться. Такова жизнь… С Emacs и Slime Вы получите полностью настроенную (Вами) и контролируемую систему, которая работает. Она просто работает. Выбирайте…

                  Only users with full accounts can post comments. Log in, please.