- Sbcl windows
- Настоящий веб-сайт на Common Lisp за 9 шагов
- Введение
- Установка последней версии SBCL
- Ставим quicklisp
- Ставим hunchentoot
- Ставим swank и slime на сервер
- Ставим screen
- Запускаем sbcl в screen на сервере и стартуем swank-сервер на 4005 порту
- Подключаемся из Emacs-a запущенного на своей машине к лисп-образу на сервере
- Запускаем web-server hunchentoot на 4242 порту
- lisp,sbcl: компиляция, создание ядра
- Re: lisp,sbcl: компиляция, создание ядра
- Re: lisp,sbcl: компиляция, создание ядра
- Re: lisp,sbcl: компиляция, создание ядра
- Re: lisp,sbcl: компиляция, создание ядра
- Re: lisp,sbcl: компиляция, создание ядра
- Re: lisp,sbcl: компиляция, создание ядра
- Solarian Programmer
- My programming ramblings
- Building SBCL — Steel Bank Common Lisp on Windows
- Posted on August 20, 2019 by Paul
Sbcl windows
SBCL под Windows. Не создаётся .exe из-под Slime
Когда настраивал SBCL + Emacs + Slime под Винду, сделал простой пример для проверки, который.
CLISP vs SBCL
Озадачили написать доклад на пару листов. Кто-нибудь из профи может помочь привести пару примеров с.
Странное поведение SBCL
Заметил странность. Допустим есть код (defun test () (format t «Enter a «) (let ((a.
CCL или SBCL
Всем привет. Снова решил задать вопрос, касающийся LISP и теперь уже CL в частности. Коллега по.
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Emacs/Slime and SBCL: stepping
Друзья, конкретно у меня никогда не было мысли пользоваться пошаговой отладкой в Common Lisp, и.
Почему runtime пишут на C? SBCL В частности
То есть у языков в стиле Common Lisp, Haskell компиляторы написаны сами на себе, но runtime на С.
Забавный факт о том, как повесить SBCL
Сегодня заметил, что Emacs+SBCL+Slime можно повесить обычным: (eval -) Никаких тебе предупреждений.
sbcl, ALSA через ffi, и файловый ввод/вывод
Всем привет! Уже несколько часов ковыряюсь в гугле, никак не могу понять, как же лучше.
Настоящий веб-сайт на Common Lisp за 9 шагов
Введение
Эта вводная статья предназначена для желающих попробовать применить Common Lisp в задачах веб-программирования. Я не буду останавливаться на преимуществах этого языка, за меня это сделал ababo в своем вводном посте Разработка web-приложений на языке Common Lisp (часть первая)
Я занимаюсь вопросами разработки веб-приложений на Common Lisp немногим более года и сделал на Common Lisp крупный интернет-магазин, что, как мне кажется, предупредит возражения тех, кто считает, что лисп бесполезен для коммерческого применения.
Сегодня моя задача — рассказать в подробностях о применяемом мной способе развертывания всей необходимой инфраструктуры. Используя эту статью как пошаговое руководство внимательный читатель сможет развернуть свой собственный сайт на лиспе.
Возможно мои подходы не идеальны — в таком случае я буду рад конструктивной критике — пожалуйста, не стесняйтесь если вам что-то не нравится — одной из целей написания этой статьи было исправление собственных ошибок.
Для тех, кто любит проматывать скучные процедуры установки — в конце статьи размещена небольшая вкусность, которая, возможно, расширит ваш взгляд на веб-программирование, если до этого момента вы не имели дела с лиспом. Ищите по ключевым словам SLIME и SWANK 🙂
Установка последней версии SBCL
Я использую SBCL как наиболее удобную, распространенную и свободную реализацию Common Lisp, тесно интергрированную со средой Emacs, обеспечивающей удобную и комфортную работу. В репозиториях, как правило, находится не самая последняя версия SBCL, поэтому вы можете скомпилировать его из сорцов или установить бинарник для вашей архитектуры. Последнее тривиально, поэтому в этой статье я опишу компиляцию из исходников.
Чтобы скомпилировать свежий SBCL можно воспользоваться старым, который мы тут же поставим, используя пакетный менеджер:
Поздравляю, теперь у вас есть свежая версия sbcl. В данный момент я разворачиваю его вместе с вами на своем сервере, чтобы избежать возможных неточностей и в конце статьи вы сможете убедиться в том, что по крайней мере у меня все заработало. Ну, будем надеяться, что это будет так 🙂
Ставим quicklisp
Для управления библиотеками наиболее часто используются два пакетных менеджера — ASDF и QuickLisp. Последний гораздо более дружелюбен, а первый уже предустановлен вместе с SBCL, поэтому сейчас мы установим себе QuickLisp. На quicklisp.org размещена все вводная информация, поэтому я не буду повторяться и мы перейдем сразу к установке:
Ставим hunchentoot
Теперь, когда у нас есть библиотечный менеджер, мы устанавливаем
веб-сервер hunchentoot, вместе со всеми его зависимостями одной командой:
Ставим swank и slime на сервер
«И даже более впечатляющий пример удаленной отладки произошел в миссии NASA «Deep Space 1» в 1998 году. Через полгода после запуска космического корабля, небольшой код на Lisp должен был управлять космическим кораблем в течении двух дней для проведения серии экспериментов. Однако, неуловимое состояние гонки (race condition) в коде не было выявлено при тестировании на земле и было обнаружено уже в космосе. Когда ошибка была выявлена в космосе (100 миллионов миль от Земли) команда смогла произвести диагностику и исправление работающего кода, что позволило завершить эксперимент. Один из программистов сказал об этом следующее:
— Отладка программы, работающей на оборудовании стоимостью 100 миллионов долларов, которая находится в 100 миллионах миль от вас, является интересным опытом. REPL, работающий на космическом корабле, предоставляет бесценные возможности в нахождении и устранении проблем.»
Я услышал об этом инциденте задолго до того как стал заниматься лиспом сам, и честно говоря воспринял это как байку, которой уже не суждено повториться в наш современный мир многомегабайтных исполняемых файлов и не менее тяжеловесных динамически связываемых библиотек. Однако познакомившись с возможностями удаленного управления лисп-образом я убедился в том, что это ничуть не сложнее чем работать с кодом у себя на машине. И никаких инкрементальных сборок, длительной компиляции или закачек скриптов через ftp — с помощью slime я подключаюсь к работающей системе и могу видеть и менять практически все, например реализовать горячую замену кода, или проинспектировать любой объект, функцию или макрос используя мощные средства интроспекции.
Как это работает? — спросите вы. Внутри лисп образа на удаленном сервере работает SWANK — специальная библиотека, предоставляющая собой бэкэнд, который предоставляет доступ ко всем рычагам управления лисп образом. SWANK написан на Common Lisp и общается со SLIME по довольно простому текстовому протоколу.
В моем Emacs-e работает SLIME, написанный на Emacs Lisp, который позволяет мне в момент редактирования файла с кодом отправлять команды, куски кода, определения объектов и структур удаленному образу Common Lisp. Таким образом, вы можете даже вообще не иметь копии исходного кода на удаленном сервере — и в этом случае никакой злоумышленник не сможет изменить его там, например чтобы обеспечить себе backdoor.
А учитывая развитые средства для кодогенерации, которыми отличается лисп, можно вообще не иметь практически никакого кода — пусть он сам будет генерироваться по данным — лучше самурая, который не сражается, может быть только программист, который не пишет код… Хм, что-то я тут увлекся, вернемся к установке 🙂
Итак, если у вас есть удаленный сервер, как у меня — вы можете ставить SWANK на него, а SLIME — на свою рабочую машину. Или
поставить и то и другое и туда и туда — главное потом не перепутать. Устанавливаем SWANK:
Внимательно читаем README в этом каталоге и добавляем в свой
/.emacs/init.el следующий код, следя за правильным указанием путей
Ставим screen
Поскольку мои сервера никогда не падают (ну да 🙂 — я использую screen, чтобы держать вечно запущенную копию SBCL, хотя, насколько мне известно, существуют и более лучшие практики (о которых компетентные читатели, несомненно, напомнят в комментариях)
Если он у вас еще не стоит — самое время поставить:
Запускаем sbcl в screen на сервере и стартуем swank-сервер на 4005 порту
Подключаемся из Emacs-a запущенного на своей машине к лисп-образу на сервере
В терминале прокидываем до хоста ssh-туннель
В Emacs-е подключаемся через этот туннель
Или, если у вас сервером является ваша домашняя машина — ничего прокидывать и поднимать SWANK не нужно — просто наберите в Emacs-e:
Запускаем web-server hunchentoot на 4242 порту
Теперь мы готовы поднять веб-сервер hunchentoot. Я поднимаю его на 4242 порту и использую nginx как прокси. Также nginx отдает статику и делает еще ряд вещей, для которых он предназначен как нельзя лучше.
Конфиг nginx для наших тестовых целей может быть очень простым:
Нижеследующий код, за авторством archimag-a создает специальный класс, который позволяет при возникновении ошибки на удаленном сервере сразу же пробросить эту ошибку вместе со стек-трейсом вам в уютненький emacs, где вы сможете с ней разобраться как следует. Таким образом, если вы подключены к серверу, где работает ваш сайт — вы будете всегда осведомлены о возникающих ошибках в момент их появления, в отличии от ряда других языков, используемых в веб-программировании.
Если же ошибок возникает слишком много, например на ошибочную странцицу постоянно заходят посетители — вы можете просто изменить значение *catch-errors-p* чтобы без помех разобраться из-за чего возникают уже пришедшие вам ошибки.
Функция request-dispatcher вызывается при каждом входящем запросе и в нашем случае просто возвращает «Hello!» — о ее расширении мы поговорим в следующей статье.
Если вы дочитали до этого места надо поставить вам бутылку , да еще и подняли у себя тестовый сайт на лиспе — я вам
пива
завидую! Знакомство с лиспом подарило мне почти полтора года
наслаждения этим удивительным языком — и у вас в этом отношении все
впереди. Happy hacking!
lisp,sbcl: компиляция, создание ядра
А почему не прописать все вышеприведенные зависимости в .asd файле? Тогда загрузка будет заключаться просто в (asdf:oos ‘asdf:load-op ‘my-fun). А после этого можно уже и сохранять core и просто работать в slime.
Ну или в чистом sbcl сделать все вышеприведенное и сделать (save-lisp-and-die . ) и получить образ, к которому уже прилинковано все вышеперечисленное.
Re: lisp,sbcl: компиляция, создание ядра
Re: lisp,sbcl: компиляция, создание ядра
#’save-lisp-and-die и #’quit не в common-lisp, а в sb-ext (если мне память не изменяет — или в каком-то другом, если изменяет) — так что не в cl-user их надо вызывать с префиксом модуля.
P.S. Не вздумай делать (use :cl-user)
Re: lisp,sbcl: компиляция, создание ядра
Re: lisp,sbcl: компиляция, создание ядра
Ну а так? (defpackage simple (:use common-lisp qt my-fun cgn cl))
Re: lisp,sbcl: компиляция, создание ядра
> Ну а так? (defpackage simple (:use common-lisp qt my-fun cgn cl))
А рразве cl и common-lisp не одно и то же? или последним ? Сейчас попробовать не могу, тока вечером.
Re: lisp,sbcl: компиляция, создание ядра
А можно ещё «расширеннее» обрисовать действия? А то возникают дурацкие вопросы: а загружаешь ты sbcl точно с новым ядром? Какая функция не вызывается? А что говорит (apropos «имя-твоей-функции») в sbcl с твоим ядром? А если повторить все действия, но не сохранять ядро — функция вызывается.
Можешь вместе со всеми логами — меньше будет таких вопросов 🙂
Solarian Programmer
My programming ramblings
Building SBCL — Steel Bank Common Lisp on Windows
Posted on August 20, 2019 by Paul
In this article, I will show you how to build the latest stable version of SBCL — Steel Bank Common Lisp on Windows. The officially provided binary of SBCL for Windows is typically older than the latest stable version, so I wrote this tutorial in the hope that it will be useful for people that want to use the latest version of SBCL. The article will also be useful for people that want to customize the installation of SBCL, for example you could build SBCL with more or less memory than the default 1GB that is allocated for the 64 bits version.
In order to build SBCL we’ll need another Common Lisp compiler, one will typically use an older version of SBCL and a C compiler with the GNU binutils. For this article I will use the latest provided SBCL Windows 64 bits binary which is at version 1.4.14 at the time of this writing. For the C compiler and GNU binutils I will use the MSYS2 distribution. The advantage of this approach is that you will be able to move the resulting SBCL binary to any Windows machine.
The article consists of three parts:
Start by downloading the latest installer of MSYS2. I recommend the 64 bits version, named msys2-x86_64-yyyy if you have a 64 bits Windows installation. Once the download is finished, start the installer and accept the defaults, you should end up with an MSYS command prompt window.
In the MSYS2 command prompt window or terminal, write:
and respond with Y when asked for confirmation. The above command will update the installation. Close the console window when the update is finished and reopen it from the Windows start menu. Be sure to pick the entry that reads MSYS2 MSYS from the start menu. Repeat the above command to finalize the update process:
Once the above is finished, we are ready to install the GCC toolchain:
Next, install the bzip2 utility:
Close the MSYS2 command prompt by writing:
Go to the SBCL download page and get the latest Windows 64 bits binary. At the time of this writing, latest SBCL binary is 1.4.14. This is a typical Windows installer.
Be sure to modify the default install location in order to not contain any spaces and to disable the add SBCL to the Windows PATH:
As you can see, from the above image, I’ve chosen to install SBCL to C:\DEV\SBCL-1.4.4. Feel free to use a different location, as long as there are no spaces in the install path. I’ve also disabled the add SBCL to the Windows PATH and the creation of the SBCL_HOME environment variable, this is necessary in order to not interfere with the SBCL build from the next part of the tutorial.
After the above customization, you can accept all the installer defaults.
Use the Windows start menu to open a MinGW 64 command prompt, pick the entry that reads MSYS2 MinGW 64-bit and download the SBCL source file:
Once the download is finished, extract the archive:
Next, temporarily add to the path the official SBCL binary and create the SBCL_HOME environment variable:
Please note, that in the above I assumed that you’ve installed the official SBCL binary to C:\DEV\SBCL-1.4.4. If you’ve used a different install location, modify the above command accordingly.
Next, create a temporary environment variable named GNUMAKE that points to the mingw32-make utility:
At this point, we are ready to build the latest SBCL. For simplicity, I will install SBCL to C:\SBCL-1.5.5. Again feel free to use a different location as long as you have no spaces in the install path, you will also need to modify the next commands accordingly if you want to use a different install path:
If there are no build errors, you can install SBCL:
Next, you can optionally add the newly built SBCL to the MSYS2 path:
With the above you should have the sbcl available from a MinGW command prompt.
It is probably easier and more portable to create a Windows batch file that sets the above environment variables. Create a text file named open_cmd.bat in C:\SBCL-1.5.5 and copy the next commands to it:
The above will let you double click on open_cmd.bat which will temporarily add SBCL to the PATH and open a command window in which you can use the sbcl executable. It is also possible to add the above to the Windows PATH permanently, but I suggest to use the batch file approach in order to not mess the Windows PATH.
If you want to get a SBCL REPL double click on open_cmd.bat and write sbcl. If you have a .lisp file, e.g. my_script.lisp, that you want to run, you could use:
If you want to copy the resulting binary to a different Windows machine, simply copy the SBCL-1.5.5 folder to the new machine. No need to install MSYS2 to the new machine.