Про Lisp

А вот вопросец созрел. Допустим, хочется мне какой-то «рабочий» проект реализовать на лиспообразном языке — в порядке «использования самых маргинальных технологий«, по терминологии минского раввината. Для начала — что выбрать, 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, где утверждается, что для любой задачи в Лиспе можно найти стопицот библиотек — и все говно. Я планирую реализовывать на Лиспе только те компоненты, где это оправдано — и с помощью какого-нибудь разумного интерфейса связать это, скажем, с веб-частью или «десктопным» приложением. Какие для этого существуют интерфейсы?

В общем, приглашаю знатоков маргинальных технологий рассказать, как все это счастье применить в «реальной жизни».

Про Lisp: 7 комментариев

  1. В свое время я выбрал для себя коммон лисп, как один из наиболее практичных в использовании диалектов лиспа. Стандартная библиотека довольно-таки минималистична, по сравнению с каким-нибудь питоном, но тем не менее для большинства возникающих задач либы есть. SBCL де-факто основная реализация, хотя есть и некоторые другие системы, умеющие машинный код на выходе.

    Emacs + Slime наиболее популярная среда для разработки на общелиспе.

    О Scheme толком ничего сказать не могу, ибо дальше задач из sicp дело не дошло. На ЛОРе есть некто buddhist -http://www.linux.org.ru/people/buddhist/profile — которого можно поспрашивать о схеме.

    Я юзаю CL не так давно. На работе пишу программу предварительной обработки данных для кое-какой железки. В рамках работы над диссером пишу большую и умную систему с шахматами и поэтессами целиком на общелиспе. Такие дела)

  2. Я бы рекмендовал Erlang. Все тоже самое, но почеловечнее синтаксис + реально живущий инструмент + некоторый спрос + у меня есть шкурный интерес к живому разработчику.

  3. » Я планирую реализовывать на Лиспе только те компоненты, где это оправдано – и с помощью какого-нибудь разумного интерфейса связать это, скажем, с веб-частью или “десктопным” приложением»

    Строго говоря лисп как раз и оправдая для веб части и десктопа. Т.е. там где нетривиальная логика выполнения. Всякие обработчки событий и тп.

    «Какие для этого существуют интерфейсы?»

    Если имеются в виду готовые библиотеки пользовательских интерфейсов, то никаких. Если имеются в виду интерфейсы к бинарным библитекам (вызов функций из .obj и выполнение лисп кода из других ЯВУ), то почти у каждого инструмента есть и несложный.

    Я буду intrusive, но предложил бы такой план:
    1. во-первых веб-приложение
    — потому, что везде работает и проще поддерживается. Для кустаря одиночки поддерживать многоплатформенный десктоп почти невозможном.

    2. во-вторых http://yaws.hyber.org/ как платформу
    — разрекламированная способность нести нагрузку. Это важно.
    — сервер и приложение и, возможно даже бд, работают в одной среде. Знаешь ерланг — знаешь «все»

    3. в-третих, хорошенько по-бенчмаркить yaws против tomcat’а
    — никто этого не делал, хотя именно это (а не yaws vs apache+php) имеет смысл

    4. в-четвертых, MVC фреймворк, генератор шаблонов
    — с этим в багаже уже можно попытаться покинуть богоспасаемую

    5. есть пара задумок, на которых нужны люди с профитом в конце

  4. «Во-первых, простого развертывания»

    В современном мире такого не бывает. Надо сцепиться с БД, с сервером приложений, сервером аутентификации, как-то сконфигурировать cron-задачи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *