Как стать автором
Обновить
0

Clojure *

Уголок языков Clojure и Clojure REPL

Сначала показывать
Порог рейтинга
Уровень сложности

От PHP к Clojure

Время на прочтение 7 мин
Количество просмотров 23K


Clojure (произносится как closure) — современный диалект Лиспа, язык программирования общего назначения с динамической типизацией и поощряющий функциональное программирование. Автор языка Рич Хикки впервые представил своё творение в 2007 году, с тех пор язык заматерел и достиг версии 1.7, вышедшей 30 июня 2015 года.

Одна из основных концепций языка — это работа на какой-либо существующей платформе. Рич Хикки решил не писать свою среду выполнения, свой сборщик мусора и т.п. — это потребовало бы больших трудозатрат, проще использовать уже готовые платформы, такие как JVM, .NET, JavaScript. На сегодняшний день два самых активно развиваемых направления: Clojure на JVM (именно он достиг версии 1.7 не так давно) и ClojureSrcipt — подмножество языка, которое компилируется в JavaScript для работы в браузере и на Node.js. Версия для .NET развивается не так активно и отстаёт от JVM имплементации. Я поискал в интернете и нашел ещё несколько мёртвых реализаций Clojure: на Go, на PHP, на Python и на Perl.

В этой статье я хочу рассказать о Clojure, показав примеры в сравнении с PHP, основываясь на серии скринкастов на английском From PHP to Clojure.
Читать дальше →
Всего голосов 30: ↑22 и ↓8 +14
Комментарии 138

Веб-приложение на Clojure. Часть 2

Время на прочтение 11 мин
Количество просмотров 12K
Здравствуйте, уважаемые пользователи и посетители Хабра. В первой статье Веб-приложения на Clojure были рассмотрены базовые инструменты и библиотеки для построения веб-проектов на Clojure. А именно Leiningen, Ring, Compojure, Monger, Buddy и Selmer. Здесь же речь пойдет об их практическом применении.
Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 5

Веб-приложения на Clojure

Время на прочтение 6 мин
Количество просмотров 24K
На Хабре не так уж и много статей о Clojure, и это печально, намерен это исправить. Ниже я расскажу об отличном на мой субъективный взгляд инструменте — языке программирования Clojure и его библиотеках для создания веб-приложений.
Читать дальше →
Всего голосов 25: ↑25 и ↓0 +25
Комментарии 11

Супер муравейник на ClojureCLR

Время на прочтение 10 мин
Количество просмотров 14K
Многопоточность в Clojure выведена на новый уровень развития, поскольку там реализованы транзакции изменений памяти STM (The software transactional memory system). В качестве демонстрации Рич Хикки (божественный автор Clojure) и Дэвид Миллер (человек, который написал реализацию Clojure под .Net) предлагают программу «ants», которая моделирует муравейник. Каждый муравей там живет в отдельном потоке. Муравьи бегают по клеткам общего поля, собирают еду, носят ее в муравейник и не конфликтуют друг с другом.

Результат своих упражнений с этой программой я и хочу вынести на общее обозрение. Надеюсь, статья будет полезна тем, кто начинает знакомиться с Clojure на платформе .Net.
Читать дальше →
Всего голосов 27: ↑24 и ↓3 +21
Комментарии 6

Истории

Clojure — трансдьюсеры, редьюсеры и прочая муть

Время на прочтение 14 мин
Количество просмотров 23K
В последнее время определенную известность получили transducers — новая фишка из еще не вышедшей Clojure 1.7. На момент написания статьи актуальна Сlojure 1.7-alpha5, но уже успело появиться изрядное количество портов трансдьюсеров на разнообразные языки: Python, Ruby, JavaScript, PHP, Java, C++, Lua, Erlang. И… это немного обескураживает. Ведь довольно давно (еще в Clojure 1.5) добавили библиотеку reducers.Так вот про редьюсеры никто особо не говорил,никуда ничего не портировал, хотя, вроде как, делают они схожие вещи… Или нет?

Давайте разберемся, для чего нам в Clojure понадобились все эти reducers & transducers (они нам правда нужны?), как они работают, как их использовать… И выясним наконец, не пора ли выкидывать reducers на свалку.
Сворачиваемся...
Всего голосов 47: ↑42 и ↓5 +37
Комментарии 10

Решетчатое наследование

Время на прочтение 4 мин
Количество просмотров 8.2K
Наследование, при кажущейся простоте, часто приводит к сложным, сопротивляющимся изменениям структурам. Иерархии классов растут как самый настоящий лес.
Целью наследование является привязка кода (набора методов) к минимальному набору свойств сущности (как правило — объекта), которые он обеспечивает и которые ему требуются. Это упрощает повторное использование, тестирование и анализ кода. Но наборы свойств со временем становятся очень большими, начинают пересекаться нетривиальным образом. И в структуре классов появляются миксины и прочее множественное наследование.
Внести изменения в глубине иерархии становится проблематично, приходится думать заранее о «внедрении зависимостей», разрабатывать и использовать сложные инструменты рефакторинга.

Возможно ли всего этого избежать? Стоит попытаться — пусть методы будут привязаны к множеству характерных свойств объекта (тегов), а иерархия наследования выстраивается автоматически по вложенности этих множеств.

Пусть мы разрабатывает иерархию для игровых персонажей. Часть кода будет общая для всех персонажей — она привязана к пустому набору свойств. Код, отвечающий за их отображение будет представлен в виде вариантов для OpenGL и DirectX разных версий. Что-то будет зависеть от расы персонажа, что-то от наличия и вида магических способностей и тп. Теги персонажа первичны. Они перечисляются явно, а не наследуются. А реализация наследуется в зависимости от набора тегов (по вложенности). Таким образом умение стрелять из ПЗРК не окажется у кенгуру, потому что его унаследовали от пехотинца.

Идея такого подхода была предложена Дмитрием Кимом. Автор не стал ее воплощать в код, я попробую исправить это упущение.
Реализация такого подхода на Clojure, как обычно, на github.
Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 34

Pipe matching в ЯП Clojure (метапрограммирование в Lisp для начинающих)

Время на прочтение 9 мин
Количество просмотров 13K


Введение


Несколько дней назад я открыл для себя замечательный ЯП Clojure — один из современных диалектов Lisp, особенностью которого является хорошая реализация средств многопоточности, компиляция в байткод jvm, соответственно возможность использования java — библиотек, jit-компиляция и т.д. Про Clojure можно почитать например тут. Но в этой статье речь пойдёт о метапрограммировании. Lisp устроен таким образом, что данные и код в нём — одно и то же. Объявления функций, макросов, вызовы функций, развёртывание макросов — в Lisp это всё просто списки, возможно вложенные друг в друга.

(defn square [foo] (* foo foo))
(defmacro show-it [foo] `(println ~foo))


Такое единство кода и данных предоставляет мощные возможности для метапрограммирования — код который пишет код, который пишет код, который пишет код и т.д. — это самое обычное дело для программирования на Lisp. В compile-time нам полностью доступен весь функционал языка, мы можем вызывать функции, развёртывать макросы, возможно рекурсивно. Например, если мы определим вот такой макрос:
Читать дальше →
Всего голосов 21: ↑20 и ↓1 +19
Комментарии 12

Party hard по-программистски, или как мы писали ClojureCup 2014

Время на прочтение 5 мин
Количество просмотров 11K
В минувшие выходные Clojure-сообщество испытывало… Ой, так начинался прошлогодний пост с отчётом о прошедшем ClojureCup 2013.

ClojureCup — это 48-часовой онлайн-хакатон, обязательным условием которого является написание приложений на языках Clojure/ClojureScript. В этом году в хакатоне участвовало около 50 команд (в каждой по 1-4 человека), которые сделали множество классных приложений.

Приложения оценивают как жюри (известные в Clojure-сообществе люди), так и обычные пользователи: зайти с помощью twitter-а и проголосовать за понравившиеся вам приложения можно на странице приложений.

А попробовать, что у нас получилось, можно вот тут.



Осторожно: под катом много картинок.
Читать дальше →
Всего голосов 46: ↑42 и ↓4 +38
Комментарии 11

Упрощение жизни программиста с vim + vim-slime + tmux

Время на прочтение 5 мин
Количество просмотров 25K
Эта публикация рассказывает о том, как экономить время при разработке для Clojure и NodeJS, а также Bash скриптов, посылая текст из vim в REPL, c использованием tmux + vim + vim-slime. Также приводятся рецепты с nodemon.

Скорее всего, vim-slime сработает и для других интерпретируемых языков (Ruby / Python / PHP / Perl ...). vim-slime также работает со screen.
На хабре достаточно освещались и vim, и tmux. Я только хотел показать, что можно получить от их комбинации.
Добавление от Fikys: с Ruby работает.

Если вы знаете vim и tmux, и вам интересен только vim-slime — прыгайте сразу ко второй секции.

Вступление


Мы все стремимся быть производительными. После того, как код написан, мы хотим узнать, работает ли он и получить обратную связь. Мы придумали много способов ускорения обратной связи: статическое выведение типов при компиляции и в IDE, юнит-тесты, интеграционные тесты, REPL, LiveReload и т.д.

Для моих небольших проектов я использую связку REPL и юнит-тестов, что позволяет получать обратную связь мгновенно.

Я веб-разработчик. По работе и в своем проекте обычно я делаю фронтэнд и стыкующуюся с ним часть бэкэнда. В течении рабочей сессии я пишу PHP, phtml, Stylus, css, Coffeescript, Javascript, + sql запросики и пуши в гит; что обеспечивается связкой tmux и vim. Также есть пара маленьких проектов на CoffeeScript, для которых используется комбо tmux + vim + vim-slime + Coffeescript REPL. В проектной сессии увязываются Сlojure, CoffeeScript, Stylus; tmux + vim + vim-slime + Clojure REPL. Под катом я расскажу об трех сетапах для трех окружений.
Читать дальше →
Всего голосов 24: ↑21 и ↓3 +18
Комментарии 18

CodeNotes — победитель Clojure Cup 2013

Время на прочтение 2 мин
Количество просмотров 23K
Мы сделали это.
Российский проект CodeNotes за авторством Грошева Дмитрия (si14) и Пантюхова Александра (alwxndr) из Санкт-Петербурга, Дину Александра (zloy_alu) из Тюмени и Сорокоумова Александра из Мюнхена занял первое место на хакатоне Clojure Cup 2013.

Мы хотели бы поблагодарить всех тех, кто голосовал за нас и немного рассказать о нашем проекте и о том, что мы хотим из него получить.
image
Читать дальше →
Всего голосов 80: ↑74 и ↓6 +68
Комментарии 18

ClojureCup 2013 — отчет команды («unmatched

Время на прочтение 4 мин
Количество просмотров 7.2K
В минувшие выходные Clojure-сообщество испытывало огромные волнения в силе. За 48 часов требовалось ни много ни мало написать любое веб-приложение. Команды вплоть до 4-х человек, весь код (помимо библиотек, конечно), дизайн и ассеты должны создаваться с нуля в течение соревнования.

Страница соревнования: http://clojurecup.com/



Читать дальше →
Всего голосов 37: ↑37 и ↓0 +37
Комментарии 12

Clojure Cup — опыт участия в хакатоне по написанию веб-приложения на Clojure

Время на прочтение 5 мин
Количество просмотров 7.5K

На этих выходных прошёл Clojure Cup — 48 часовый хакатон на Clojure. Это будет относительно длинный пост про то, как он проходил в нашей команде, с техническими деталями и прочим. Ну, и в конце поста, куда уж без этого, расскажем совсем немного о нашем проекте. А те, кому лень читать, могу сразу перейти на CodeNotes и даже проголосовать за нас на странице Clojure Cup.
Читать дальше →
Всего голосов 35: ↑35 и ↓0 +35
Комментарии 7

Почему стоит изучить Clojure?

Время на прочтение 17 мин
Количество просмотров 149K

Что такое хороший язык программирования? Какими качествами и характеристиками он должен обладать? Ответ дать сложно. Вот одно из возможных определений: хороший ЯП должен хорошо решать возложенные на него задачи. Ведь ЯП — лишь инструмент в руках программиста. А инструмент обязан помогать нам в работе. В конце концов, это же и есть причина его создания. Разные ЯП стараются решать разные проблемы (с переменным успехом). Цель, которая ставилась при проектировании Clojure — сделать написанные нами программы простыми. И, как следствие, ускорить их создание, тестирование. А главное, уменьшить время на их понимание, изменение и сопровождение.
Читать дальше →
Всего голосов 112: ↑108 и ↓4 +104
Комментарии 55

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн

Интегрируем clojure-библиотеку в java-приложение

Время на прочтение 5 мин
Количество просмотров 7.2K
Язык Clojure отличается очень тесной интеграцией с Java. Прямое использование Java-библиотеки в приложении на Clojure — дело совершенно простое и обыденное. Обратная интеграция несколько сложнее. В этой статье указаны некоторые варианты интеграции кода на Clojure в Java-приложение.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Комментарии 5

Clojure в Белорусском ГУ

Время на прочтение 5 мин
Количество просмотров 11K
БГУ лого
Clojure logo
В этом семестре (осенью 2012) был проведён факультатив по языку Clojure в Белорусском ГУ. В посте будет описан факультатив: причины, программа, задания, результаты, впечатления.
Читать дальше →
Всего голосов 39: ↑38 и ↓1 +37
Комментарии 15

Неофициальный путеводитель по мозгу Рича Хики

Время на прочтение 5 мин
Количество просмотров 29K
Блог Flying Machine Studios
6 декабря 2012 года
перевод статьи The Unofficial Guide to Rich Hickey's Brain



Частично, мое удовольствие от изучения Clojure возникло благодаря знакомству с мыслями Рича Хики о программировании. У Рича есть свой взгляд на фундаментальные концепции программирования, ясный и последовательный, и я думаю, что каждый программист смог бы выиграть, используя его. Каждый раз, когда я смотрю одно из его выступлений, у меня складывается ощущение, что кто-то взял и привел мой ум в порядок.

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

Весь последующий текст основан на выступлении Рича Хики «Are we there yet?»
Читать дальше →
Всего голосов 57: ↑51 и ↓6 +45
Комментарии 46

Clojure — последовательности (sequences)

Время на прочтение 7 мин
Количество просмотров 7.6K
Clojure является диалектом Lisp, поэтому совершенно не удивительно, что работе со списками отводится ключевое место в языке. Правда, в отличии от традиционных диалектов (CL или Scheme), вместо классических двухслотовых списков в Clojure используется абстракция Sequence — «логический список». Фактически, это интерфейс, предоставляющий методы для работы с неизменяемыми, ленивыми и, возможно, бесконечными последовательностями. Данная статья описывает внутреннее устройство этих сущностей.
Читать дальше →
Всего голосов 24: ↑24 и ↓0 +24
Комментарии 2

Релиз Clojure 1.4

Время на прочтение 2 мин
Количество просмотров 1.8K
image
После нескольких месяцев разработки вышла новая версия языка Clojure — 1.4. Clojure — Lisp'образный язык программирования общего назначения, работающий на платформах JVM и CLR, известный специальными средствами для упрощения разработки concurrency кода.

Среди изменений стоит отметить:
Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 12

Коды возврата vs исключения: взгляд с колокольни

Время на прочтение 4 мин
Количество просмотров 2.4K
Просмотрев пост Коды возврата vs исключения и комментарии к нему, я заметил, что в обсуждении упущена одна нить, краткий тезис которой следующий: в некоторых языках такая проблема даже не стоИт, т.к. вопрос «что выбрать, коды возврата или исключения» в таком языке является низкоуровневым. Как, например, не стоит вопрос, каким образом реализовать конструкцию «foreach». Т.к. для программиста, использующего тот же «foreach», нет никакой разницы, использовали ли создатели языка while или for или что-то еще в имплементации данного оператора. Главное это паттерн, который представляет собой этот самый оператор.

Хватит рассуждать про foreach. Покажу непосредственно на примере два очень похожих друг на друга оператора, один из которых использует в качестве реализации «исключения», другой — «коды возврата».
Читать дальше →
Всего голосов 40: ↑29 и ↓11 +18
Комментарии 23

Есть ли жизнь без ORM?

Время на прочтение 3 мин
Количество просмотров 2.5K
После перехода в наших проектах с java на clojure нам необходимо было найти замену привычным средствам работы с базами данных.

В clojure есть стандартная библиотека работы с бд clojure.java.jdbc и несколько библиотек, основанных на ней и позволяющих писать запросы в предоставляемом ими eDSL. Но для «ежедневного пользования» нам хотелось что-то по удобству напоминающее jpa и работу с ним в IDE.

Мы подумали, почему бы не написать свою библиотеку, которая бы идеально подходила нашим требованиям. А требования были следующие:

  • автодополнение таблиц, полей;
  • автодополнение констант из определенных таблиц (более позднее);
  • удобный eDSL запросов;
  • возможность без ручного запроса получать значения из таблиц, связанные по внешнему ключу (более позднее).
Читать дальше →
Всего голосов 18: ↑11 и ↓7 +4
Комментарии 13

Вклад авторов