LINUX.ORG.RU

всё же есть что-то хорошее в Common Lisp


0

0

Будет несправедливо умолчать...
Из аськи

в лиспе как бывает?
4 варианта в принципе.
1. переопределить одну ф-ю. Т.е., делаешь что-то в repl, выясняешь, что что-то не так. Идёшь в ф-ю, редактируешь её (прямо в исходнике), нажимаешь C-c C-c, она переопределяется.
Второй вариант - большая степень поражения. То же, но после редактирования нажимаешь C-c C-k и "пересобирается" один файл, в котором твоя ф-я. Если есть тесты прямо в нём (я так люблю), то они тоже прогоняются и я делаю, чтобы была ошибка компиляции, если тест не прошёл
это удобно. Тем более, тесты одновременно являются примерами т.е., тест нахоятся рядом с определением.

Третий вариант - ещё большая степень поражения. Пересборка системы. Cистема - это на самом деле аналог "проекта" в средах типа Delphi или Visual Studio. Но у тебя одновременно загружено несколько взаимовязанных проектов. Пишешь
(asdf::! :имя-системы-включающей-твой-файл)
и пересобирается эта система и всё, что от неё зависит. Чтобы это случилось, у тебя должны быть заданы файлы .asd с описанием взаимосвязей, что-то типа makefile
но опять, только часть кода перекомпилируется. И наконец, если наступил полный пц, то выходишь из лиспа и заходишь заново. T.е., видишь, очень высокая степень гибкости в этом направлении. И тяжело на самом деле без неё, если привык. Потому что при маленькой аварии ты не теряешь значения переменных, коннекты к СУБД, запущенные сервисы и т.п. Например, при отладке веб-приложения я переопределял только один видгет (класс) или один метод и дальше просто делал в браузере refresh. При этом сервер не рестартовал, новая сессия не начиналась. Конечно, это не всегда возможно, но довольно часто.

★★★★★

Ответ на: комментарий от Pi

> а у меня почти все так же, только на яве

Там это слишком "почти". Стоит добавить новый член класса или даже поменять public на protected, как приходится перезапускать.

gaa ★★
()
Ответ на: комментарий от Miguel

++++++++++
[
   >+++++++>++++++++++>+++>+<<<<-
]
>++.
>+.
+++++++.
.
+++.
>++.
<<+++++++++++++++.
>.
+++.
------.
--------.
>+.
>.

a3
()
Ответ на: комментарий от dmitry_vk

> А можно подробнее насчет «пересобирается эта система и всё, что от неё зависит»?

А это, кстати, брехня. На самом деле, то, что зависит, не пересобирается. Правильнее будет сказать, что иногда сложно предотвратить пересборку всего, от чего данная система зависит.

На самом деле, такую пересборку зависимых можно сделать, если немного похачить asdf. Удивительно то, что никто из Ъ лисперов этого не сделал, а на потуги новичков в направлении улучшения asdf смотрят равнодушно. Что свидетельствует о невменяемости сообщества.

Вообще, конечно, asdf - это такое кривое и изначально плохо продуманное объектно-ориентированное дерьмо, что одного его вполне достаточно, чтобы отказаться от лиспа навсегда. Люди, которые пользуются этим и спокойно спят, просто себя не уважают. Или они каждый вечер усыпляют себя мыслями о том, что в теории всё это можно исправить...

Существует ещё 3-5 систем сборки проектов для лиспа, но ни одной нормальной я не знаю. Последняя более-менее нормальная была видна в мануале по Lisp Machine, который я недавно смотрел. С тех пор - всё хуже и хуже.

Но топик у нас имеет позитивный настрой :)

den73 ★★★★★
() автор топика
Ответ на: комментарий от dmitry_vk

Я думаю, что нужно сесть и исправить asdf. Написать толковое руководство и howto, покрывающие основные способы загрузки систем.

Расширить набор классов компонент. Интегрировать со SLIME. Сделать недостающие функции, например, "забыть про систему" (я сделал для себя некую заготовку, мож когда и опубликую, или уже опубликовал, не помню). Сделать синтаксический сахар, чтобы не нужно было писать абсурдное asdf:oos 'asdf:load-op

Новые системы сборки,аналогичные asdf, но отличающиеся несущественными деталями, не имеют смысла - они только усилят хаос.

den73 ★★★★★
() автор топика
Ответ на: комментарий от den73

Кстати, с моей подачи и с моим участием на comp.lang.lisp был выложен патч к slime, позволяющий открывать asd файл через M-. Надо бы донести патч до разработчиков slime. Также я (уже давно) готовлю к публикации небольшой набор утилит и там есть кое-что по asdf, например, можно получить md5 суммы всех исходников, на которые ссылается заданная asdf система, сделана компонента, которая грузится без компиляции (она была в defsystem, а в asdf я её не нашёл), сделано что-то для Русских кодировок, сделан тип "файл, с которым мы непосредственно ничего не делаем, но от которого что-то может зависеть" - такое можно в make, но так сразу не сделаешь в asdf. Но не знаю, будет это когда-нибудь доделано или нет. Я обычно ничего не доделываю до конца (и видимо, все лисперы таковы).

den73 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.