Расширяемый чат-бот [1] оказался куда более толковым для освоения языка материалом, чем Проект Эйлер. Я потрогал практически всё, что было в Кложе, и почти не повторялся.
Страх перед скобочками сильно преувеличен. Их перестаешь замечать в первый день, куча гораздо более важного происходит внутри них. Пишешь себе код как везде, выравниваешь, копи-пастишь, читаешь, никаких проблем. Ставить их вокруг функции намного логичнее, чем часть выражения оставлять снаружи, часть внутри, и не дай бог можно опускать. Мне когда-то это казалось отличной идеей, а-ля ML, Coffee Script, Perl - мусора меньше, но потом я как-то увидел чужой исходник на Ocaml-е - пространство, равномерно заполненное двух- и трех-буквенными аббревиатурами, и понял, что скобки, они к лучшему, не мешают, а помогают читать.
Синтаксис в Кложе самый крутой, конструкции навернуты невероятные [2], но если поначалу тупишь [2], то потом все отлично, привыкаешь. Причем чтобы с этим всем разобраться, надо ковырять стандартную библиотеку, а не книгу по языку, что тоже довольно скоро начинает казаться естественным и логичным. И даже, разделение элементов списка пробелами, без запятых - как-то вдруг свежо, стройно и красиво решает проблему их назойливого болтания в начале и конце.
В общем, все страшные вещи, что рассказывают про синтаксис Лиспов, что его там нет, что он противоестественный, и так далее, всё неправда. Я до этого считал верхом лаконичности Питон и его библиотеки, но после Кложи даже он жутко косноязычен.
Динамичность тоже отличная штука. Пишу я своего бота, он у меня в фоновом потоке законнекчен, и не разрывая никаких соединений я его спокойно обновляю и тестирую. Говорят, если соединить repl с Емаксом, будет еще круче и код вообще из редактора будет обновляться, но я его пока боюсь, хотя надо уже браться. Главное, всё это построено на тех же самых примитивах, что доступны пользователю языка, то есть можно писать скрипты, работающие с неймспейсами, грузить туда-сюда, сканировать, менять, всё что угодно. Всё, чего вдруг не окажется, собери себе сам, как и в случае с синтаксисом.
Про собственно код. Намерения маппятся на текст программы точнее и плотнее, чем, опять же, везде, где я видел. На глазок получается, что одна функция на Кложе ≈ один файл на Джаве (при компиляции примерно то же соотношение).
Если об ощущениях, то это выглядит так: сидишь, думаешь, здесь так должно работать, а в этих случаях так, и если это, то то, и еще в этом случае надо вот это учесть, потом думаешь: ну всё, надо уже писать. Пишешь, пишешь. Проверяешь, пробегаешься по всем случаям, что продумал. Да, вроде всё учтено. Оглядываешься - написал четыре строчки.
Если еще об ощущениях, то чем больше я погружаюсь, тем больше паззл сходится. Последний раз такое было с Эрленгом, в котором все части очень грамотно и красиво дополняли друг друга, но там это укладывалось в одну нетолстую книжку. Здесь все началось с Рича Хики, который сначала рекомендовал всем не быть хипстерами, а выявлять настоящие проблемы и решать их [3]; продолжилось им же в толке про деконструкцию устоявшихся программистских конструкций на элементарные ортогональные части [4], и блестящим воплощением этих идей по всей Кложе.
Ну и в конце концов, из Кложи, возможно ввиду ее молодости, еще не высосали весь фан. Я, например, оторвался с антропоморфными названиями частей чатбота и лог-функциями типа (omg! …). Если попытаться представить что-то подобное в другом языке, вдруг понимаешь, что в Джаве запрещены имена классов из менее чем трех слов, в Скале названия берут из математических теорем, на Хаскелле пришлось бы называть их по-гречески (что круто, но крутизну оценили бы те восемь человек, которые его используют)1. На Питоне пришлось бы соревноваться в остроумии с Гвидо, чтобы писать на С, нужна борода, а на Ноде-ЖС, если давать осмысленные имена, велик риск обнаружить, что задница управляет мозгом через коллбеки. Получается, что единственное место, где можно ловить кайф по части названий - это Кложа.
Когда я узнал, что они всю эту красоту еще и в браузер перенесли (в очередной раз сделав это очень умно и по делу - [5]), стало понятно, что деваться некуда, скоро все будут писать на Кложе, поэтому надо работать на опережение. Я, в общем-то, даже с JVM уже примирился, хотя нечаянно закрыть repl пока ощутимо больно. Oracle, давайте уже допиливайте свою модульность и быстрый старт, будет с вас хоть шерсти клок.
Резюме: всем брать пример с Рича Хики. Кложа опционально, но горячо рекомендую.
Ссылки:
- Разбор кода чат-бота, in english.
- Пример одной из сложнейших конструкций condp.
- Мини-конспект первой презентации Рича Хики про решение проблем.
- Конспект второй презентации Рича Хики про элементарные ортогональные части.
- Introduction Стюарта Сиерры и видео Рича Хики про ClojureScript, in english.
1 На самом деле, если мне когда-либо доведется что-либо писать на Хаскелле, абсолютно точно первый свой тип я назову Пиписька. Просто чтобы сбить пафос.