⌨ Labor omnia vincit ☮

Common Lisp: more Libraries, more Frameworks, more fixes…

Posted in Lisp by anaumov on 17.07.2015

Пожалуй позволю себе еще один пост о Lisp, а именно – о его использовании “в продакшин”. Буквально на этой неделе на хабре снова был очередной пост-перевод на эту тему, к тому же я сейчас практически все свободное время на работе посвещаю переписыванию некоторых скриптов с Python на Common Lisp, что является причиной интереса коллег к этой теме.

Но мой пост все же будет отличаться от большинства других. Дело в том, что я считаю неправильным саму постановку вопроса. Когда я читаю комментарии обоих сторон, я замечаю, что говорят они о разных вещах. Сам Lisp, как таковой, т.е. ядро этого языка, на много мощнее Python (давайте будем сравнивать его с Python, раз уж последний уже вытесняет Perl, а Ruby пока составляет ему конкуренцию только в Web). Обратите внимание на книги по Python (или другим языкам программирования), они как правило начинаются с описания типов данных. Я помню как не знал с какой стороны подойти к Lisp, когда так привык к python’новским dictonary. Этот тип данных является ядром самого Python. Но даже начального знакомства с Lisp (это было уже на первой неделе работы с Lisp) мне хватило, чтобы реализовать свой тип данных, который позволял мне делать тоже самое в Lisp, что и dictonary в Python (в процессе написания я нашел в сети информацию о Lisp-хеш-таблицах, но все же решил довести дело до конца). Я до сих пор под впечатлением, что в моем арсенале теперь есть язык, который позволяет создавать абстрации, ограниченные по возможностям лишь моей фантазией и представлением о том, что и как “можно”.

crazy lisp programmerНо правы и те, кто забрасывают риторические, как им кажется, вопросы о столь низкой популярности Lisp. Правы они в том, что он действительно совсем не популярен. Но вовсе не потому, что сам язык в чем-то уступает. Дело тут в библиотеках, а точнее – в поддержке этих библиотек сообществом. На домашней странице проекта Quicklisp гордо значится число поддерживаемых библиотек:

Quicklisp is a library manager for Common Lisp. It works with your existing Common Lisp implementation to download, install, and load any of over 1,200 libraries with a few simple commands.

Да, более 1200 библиотек поддерживается этим library manager’ом, но это значит лишь, что я могу без проблем найти их, установить и использовать в моем Lisp-проекте. Это совсем не значит, что все эти библиотеки хорошо документированны, и существуют примеры в сети как ими пользоваться. Вовсе нет. Есть сообщество пользователей, да. Кто-то из них наверняка использует, к примеру, SMTP или SQL, поэтому вы, я думаю, без проблем найдете в сети пару примеров, а может быть даже блог-посты, а может быть даже страницу, посвященную этой библиотеке, с подробным описанием функций. Но есть в их числе и те, которые написал какой-нибудь прыщавый студент-очкарик несколько лет назад, и теперь, возможно, после того как нашел работу или завел семью, не занимается поддержкой своей библиотеки. Я не буду приводить пример. Библиотекой пользоваться очень не просто, т.к. она устарела, нет документации, нет примеров… а альтернативы, т.е. другой библиотеки для тех же целей, в Quicklisp нет. Если вы использовали GNU/Linux или BSD-системы в 90х или даже начале 2000х, то вы можете себе предствить о чем идет речь.
В Python такой проблемы нет, ну или почти нет. Этот язык окружил себя сегодня просто огромным сообществом, которое само-собой является поддержкой этого языка. То там то здесь появляются все новые и новые библиотеки, framework’и. Наконец, у Python есть Pyton Foundation.
Да, полка книг о Python есть и у меня, так что на ближайшие 5-10 лет по поводу трудоустройства, я думаю, мне можно не переживать. Кстати, если вы интересовались поиском работы в Европе, то наверняка слышали про stepstone.de. Посмотрите сколько мест она вам выдаст по запросу “Java” или “.NET”, а теперь скажите: вы находите стиль Java столь элегантным, выразительным, а сам язык мощным или просто продуманным?🙂 Ее популярность обусловлена совсем другими причинами. Java, как и .NET, это два единственных в мире Enterprise языка программирования. А это, к сожалению, не имеет совсем никакого отношения ни к удобству использования, ни к продуманным типам данных, ни к простоте и стилю языка, а также не самым лучшим образом отражается на ее лицензии😉

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

Как Java и .NET обходят по популярности (на рынке труда) Python, так же и Python обходит Common Lisp. Но все же что-то приводит Java-программитов к Python, Perl или Ruby, а те, кто знаком с последними, рано или поздно хотя бы поверхностно знакомятся с Lisp. Ко второй группе отношусь и я, и я должен сказать, что код на Python лучше (в функциональном стиле?) пишет тот, кто знаком с Python и Lisp, чем тот¸ кто пишет только на Python. Возможно не все поймут последнее предложение, а Python-only программисты c ним, т.е. со мной, не согласятся😉

Да, наша команда использует Common Lisp “в продакшин”, и я рад, что есть те, кто поддерживают необходимые для нас библиотеки. Я благодарен им. Программирование на Common Lisp интересней. Возможности обработки данных намного мощнее. Если получится доработать/починить некоторые библиотеки, которые нам нужны, я не против переписать весь python код на Common Lisp. Если это действительно получится, я обещаю выложить фиксы в отрытый доступ и посвятить пару блог-постов примерам и просто описанию этих библиотек.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: