усы2

Стой под стрелой

Поступки и мысли, о которых могу вспомнить не краснея

Previous Entry Поделиться Next Entry
Зачем вам нужна Clojure?
усы2
tonsky
Слайды доклада на Codefest: https://speakerdeck.com/tonsky/clojure-at-codefest-2013 (там же и pdf)

Картинки для привлечения внимания:





Спасибо lionet и моей жене Юле за помощь в подготовке доклада.

  • 1
глядя на эти картинки мне почему-то лисп вспомнился :)

Хорошие слайды! Надеюсь, участникам будет любопытно узнать о Clojure и они зададут интересные вопросы.
Видео будет? :)

def isBlank(s: String) = s forall Character.isWhitespace

Шах и мат, скобочники.

слушай, я не знаю что это за говнофонт но не используй его больше. ну тот где "(" треугольная - выглядит 101% уеблански.

Вопрос, вопрос. "Иммутабельные персистентные структуры данных" - что это значит?

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

ой, там в конце есть.

Заменили на plain old functions
+ систему управления кластером
(скоро)


Собственно примерно так и казалось, что этого монстра лучше заменить на собственную маленькую библиотечку.

isBlank в качестве примера - фуу. Даже не потому, что на скале пример компактнее вышел, а потому что кому это нужно? Такого добра уже понаписано, и его надо использовать, а не переписывать в сотый раз.

Вообще не надо на игрушечных примерах ничего показывать. Сразу напрашиваются вопросы, причем ненужные и нехорошие. Ну например, замена Map
[Error: Irreparable invalid markup ('<string,>') in entry. Owner must fix manually. Raw contents below.]

isBlank в качестве примера - фуу. Даже не потому, что на скале пример компактнее вышел, а потому что кому это нужно? Такого добра уже понаписано, и его надо использовать, а не переписывать в сотый раз.

Вообще не надо на игрушечных примерах ничего показывать. Сразу напрашиваются вопросы, причем ненужные и нехорошие. Ну например, замена Map<String, Integer> на {:x 1 :y 2} наводит на некие мысли - а куда дели типы?

Насчет компактнее это ваши какие-то умозрения, на самом деле символ в символ:

def isBlank(s: String) = s forall Character.isWhitespace
(defn blank? [s] (every? #(Character/isWhitespace %) s))


Типы на месте. Даже лучше стало — вместо медленных строковых ключей быстрые keywords.

А насчет того, что всё уже написано — ну, был бы другой аналогичной сложности алгоритм, с тем же самым соотношением. Потратил бы лишнюю минуту, объясняя контекст. И?

Спасибо, интересная презентация.

Вопрос - на одном из слайдов вы пишете: "... Много хорошего кода Правильные ценности Правильная философия". Вы могли бы привести примеры конкретных проектов на Clojure которые по вашему мнению хорошо/грамотно сделаны изнутри (это к тому пунктику про "Много хорошего кода")? Только кроме clojure.core пожалуйста.

Хочется посмотреть как должен выглядеть правильный real-world Clojure код - брать просто первый попавшийся случайный проект не хочется т.к. есть риск нарваться на что-нить криво сделанное, и я даже не уверен что смогу это сразу понять.

http://github.com/iron-io/iron_mq_clojure - единственное моё например выложенное в паблик, но там реально почти нет кода (но то что есть - оно ок :])

Спасибо за хороший и интересный доклад, сразу захотелось попробовать ClojureScript. (Это я про Scala спрашивал. :)

Расскажи про базовые вещи, с которых можно начать.

Какие, например, тулы маст хэв? Я сделал brew install clojure, запустил репл, а он не поддерживает историю. Сделал lein repl, а он не выходит по ^C. Наверняка, я упускаю какой-то ultimate repl, который настолько хорош, что все остальное не очень актуально, поэтому это остальное не особо и допиливают.

Мне кажется вполне возможным, что у разработки на кложуре есть интересные особенности, о которых сразу не догадаешься, поэтому лучше я сразу спрошу как оно обычно работает. Открываешь редактор, открываешь репл и колбасишь себе или есть что-то еще интересное? Есть ли live reload в репле? Какие у него ограничения?

Ты говорил, что кложура тебе заменяет баш и питон. Какие либы ты в этом контексте используешь (например, для файловой системы, для удобных http запросов, для парсинга джейсона - я так понимаю, стандартные средства джавы юзать для этих целей получится слишком многословно)? Про репл я уже выше спрашивал.

Edited at 2013-03-31 19:33 (UTC)

Хотелось бы узнать почему предпочли Clojure Erlangу?

без темы (Анонимно) Развернуть
(Анонимно)
У меня код на джаве для мапы выглядит так:

Map
[Error: Irreparable invalid markup ('<string,>') in entry. Owner must fix manually. Raw contents below.]

У меня код на джаве для мапы выглядит так:

Map<String, Integer> m = map("x", 1, "y", 2);

Длиннее, конечно, но в кложуре нет статической типизации, так что:

Map m = map("x", 1, "y", 2);

  • 1
?

Log in