А вот вопросец созрел. Допустим, хочется мне какой-то «рабочий» проект реализовать на лиспообразном языке — в порядке «использования самых маргинальных технологий«, по терминологии минского раввината. Для начала — что выбрать, Common Lisp или Scheme? Common Lisp мне сразу резко «не понравился» — хотя бы из-за объема документации и кучи малопонятных вещей категории «так сложилось исторически», типа неочевидных различий между set, setq и setf. Scheme выглядит попроще, да и SICP я прочитал где-то до половины — в общем, там все достаточно знакомо.
Что мне не нравится в Scheme? Нет какой-то «эталонной» реализации. MIT/GNU Scheme поддерживает «устаревший» стандарт R5RS (с некоторыми незначительными отклонениями), в четвертом издании TSPL описывается R6RS. Этот вариант реализован в Chez Scheme и Racket, остальные реализации мне не нравятся «организационно» — один-единственный «незаменимый» разработчик — это «несерьезный» подход. Вообще, огромное количество реализаций Scheme мне представляется следствием наличия упражнений 5.51 и 5.52 в SICP.
Более того, все пригодные для использования реализации предлагают свои ни с чем не совместимые расширения. Исключение — разве что MIT/GNU Scheme, где расширений относительно «стандарта» практически нет. Эти «несовместимые расширения» тоже напрягают — а вдруг выбранная реализация окажется по каким-то причинам некошерной, и что тогда?
Наконец, хочется нормальной «современной» IDE с возможностями отладки. Emacs не предлагать, он отвратителен (сугубое ИМХО). Edwin из MIT/GNU Scheme — те же яйца, только в профиль — какое-то тяжкое наследие из 70-х. Похоже, что это пожелание сужает выбор до Racket.
Теперь — про Common Lisp. Тут попроще с реализациями. Основных — всего три: SBCL, CMUCL и CLISP (коммерческие я не рассматриваю, тут начинаются те же проблемы с несовместимыми расширениями и прочий vendor lock-in). IDE, кроме Emacs, отсуствуют. Сам язык мне не очень нравится. Из-за совместимости с древними диалектами Лиспа в Common Lisp воткнули таких «костылей», что иногда создается впечатления — а не Фортран ли это вперемешку с Алголом и синтаксисом Лиспа?
Чего мне от всего этого счастья хочется? Во-первых, простого развертывания. Насколько я понимаю, «сделать экзешник» в Лиспах непросто. Хочется хотя бы возможности установить работающую систему «двумя нажатиями мышки», а с этим возникают некоторые проблемы.
Во-вторых, я не такой маньяк, чтобы писать на Лиспе все приложение целиком — начиная от GUI и заканчивая самыми низкоуровневыми частями. К тому же, я несколько напуган статьей The Lisp Curse, где утверждается, что для любой задачи в Лиспе можно найти стопицот библиотек — и все говно. Я планирую реализовывать на Лиспе только те компоненты, где это оправдано — и с помощью какого-нибудь разумного интерфейса связать это, скажем, с веб-частью или «десктопным» приложением. Какие для этого существуют интерфейсы?
В общем, приглашаю знатоков маргинальных технологий рассказать, как все это счастье применить в «реальной жизни».
В свое время я выбрал для себя коммон лисп, как один из наиболее практичных в использовании диалектов лиспа. Стандартная библиотека довольно-таки минималистична, по сравнению с каким-нибудь питоном, но тем не менее для большинства возникающих задач либы есть. SBCL де-факто основная реализация, хотя есть и некоторые другие системы, умеющие машинный код на выходе.
Emacs + Slime наиболее популярная среда для разработки на общелиспе.
О Scheme толком ничего сказать не могу, ибо дальше задач из sicp дело не дошло. На ЛОРе есть некто buddhist -http://www.linux.org.ru/people/buddhist/profile — которого можно поспрашивать о схеме.
Я юзаю CL не так давно. На работе пишу программу предварительной обработки данных для кое-какой железки. В рамках работы над диссером пишу большую и умную систему с шахматами и поэтессами целиком на общелиспе. Такие дела)
Лучше на F# попробуй, у него хотя бы среда разработки и рантайм нормальные..
чем лисповыый рантайм не угодил?
Недостаточно маргинально.
Я бы рекмендовал Erlang. Все тоже самое, но почеловечнее синтаксис + реально живущий инструмент + некоторый спрос + у меня есть шкурный интерес к живому разработчику.
» Я планирую реализовывать на Лиспе только те компоненты, где это оправдано – и с помощью какого-нибудь разумного интерфейса связать это, скажем, с веб-частью или “десктопным” приложением»
Строго говоря лисп как раз и оправдая для веб части и десктопа. Т.е. там где нетривиальная логика выполнения. Всякие обработчки событий и тп.
«Какие для этого существуют интерфейсы?»
Если имеются в виду готовые библиотеки пользовательских интерфейсов, то никаких. Если имеются в виду интерфейсы к бинарным библитекам (вызов функций из .obj и выполнение лисп кода из других ЯВУ), то почти у каждого инструмента есть и несложный.
Я буду intrusive, но предложил бы такой план:
1. во-первых веб-приложение
— потому, что везде работает и проще поддерживается. Для кустаря одиночки поддерживать многоплатформенный десктоп почти невозможном.
2. во-вторых http://yaws.hyber.org/ как платформу
— разрекламированная способность нести нагрузку. Это важно.
— сервер и приложение и, возможно даже бд, работают в одной среде. Знаешь ерланг — знаешь «все»
3. в-третих, хорошенько по-бенчмаркить yaws против tomcat’а
— никто этого не делал, хотя именно это (а не yaws vs apache+php) имеет смысл
4. в-четвертых, MVC фреймворк, генератор шаблонов
— с этим в багаже уже можно попытаться покинуть богоспасаемую
5. есть пара задумок, на которых нужны люди с профитом в конце
«Во-первых, простого развертывания»
В современном мире такого не бывает. Надо сцепиться с БД, с сервером приложений, сервером аутентификации, как-то сконфигурировать cron-задачи.