CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?

1,821 views

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,821
On SlideShare
0
From Embeds
0
Number of Embeds
570
Actions
Shares
0
Downloads
15
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?

  1. 1. Зачем вам нужнаClojureНикита Прокоповtonsky.livejournal.comecho
  2. 2. # Кто мы?AboutEcho.comРиалтаймовый веб:комментарии, потоки, запросы...Калифорния/Ульяновск/Новосибирскecho
  3. 3. # Кто мы?
  4. 4. # Кто мы?Erlang, OCaml, C:~15 программистов45 000 rps в пике450 серверов
  5. 5. # Кто мы?Javascript:8 программистов500 кб кода300 кб тестов~200M запросов на CDN в день
  6. 6. # Кто мы?Clojure:1..5 программистов9 месяцевпродакшн уже ч/з 3 месяцаClojure никто не знал
  7. 7. # Как случилась Clojure?Новый проект, нет кода дляпереиспользованияTwitter StormДвухнедельный proof of conceptErlang vs Clojure
  8. 8. # Почему Clojure?Явные сильные стороны:Скорость разработкиПроизводительностьConcurrencyВысокая культура разработки
  9. 9. # Что такое Clojure?JVM-based языкОбщего назначенияСовременный LISPФункциональныйПрагматичный
  10. 10. # Скобочки? Фу?fun(x, y)obj.method()if (x < y) {foo();} else {bar();}Map<String, Integer>m = new HashMap<>() {{put(“x”, 1);put(“y”, 2);}}(fun x y)(.method obj)(if (< x y)(foo)(bar))(let [m {:x 1:y 2}])Java ()Java ,.;Clojure ()Clojure ,.;
  11. 11. # Сильные стороны Clojure## ConcurrencyИммутабельные персистентныеструктуры данныхЯвная модель изменений,высокоуровневые примитивы,транзакционная памятьПроще, предсказуемее, компонуемее
  12. 12. # Сильные стороны Clojure## Обработка данныхДата-центричная философияУдобная стандартная библиотекаФП — композиция кусковExtensible Data Notation
  13. 13. # Сильные стороны Clojure## Язык общего назначенияНебольшой, выразительныйКомпактный синтаксисДинамический полиморфизм, без ООПКомпонуемые абстракции,открытость, расширяемостьКодогенерация (порой)
  14. 14. # Сильные стороны Clojurepublic class StringUtils {public static boolean isBlank(String str) {int strLen;if (str == null || (strLen = str.length()) == 0) {return true;}for (int i = 0; i < strLen; i++) {if ((Character.isWhitespace(str.charAt(i)) == false)) {return false;}}return true;}} [](){} ×28
  15. 15. # Сильные стороны Clojure(defn blank? [s](every? #(Character/isWhitespace %) s))[](){} ×8
  16. 16. # Анатомия Clojure(defn blank? [s](every? #(Character/isWhitespace %) s))стандартнаябиблиотекафункциональноепрограммированиеjava interopкомпактныйсинтаксисмакрос! вопросик видентификаторе!
  17. 17. # Анатомия Clojure(defn blank? [s](every? #(Character/isWhitespace %) s))спискивекторкодкак данные
  18. 18. # Clojure как JavaУважает платформуПрямой interop в JavaГенерация .class =>дергаем Clojure из Java-проектаLein работает прямос Maven-репозиториями
  19. 19. # Clojure как JavaПисать Java на Clojure проще, чемна самой JavaРазгоняется до скорости Java
  20. 20. # Clojure как PythonДинамическая компиляцияБыстрое прототипированиеБыстрее, чем в Питоне (REPL)Компактнее и лаконичнее,чем в Питоне (ФП)Потенциал для оптимизации
  21. 21. # Clojure как Bash*Удобный перочинный ножОсобенно если запущен REPLОсобенно хорошо — разбор,анализ и трансформация данных* Обобщенный
  22. 22. # Clojure как JavaScript## ClojureScriptClojure в браузере
  23. 23. # ClojureScript## Зачем?Писать web и не сойти с умаТрудно масштабировать JS проект:нужна хорошая архитектуранужна жесткая дисциплинанужна согласованность по тулзамПроблема не в синтаксисе
  24. 24. # JavaScriptТипыСтруктуры данныхЗависимостиНеймспейсыПолиморфизмТиповые операции
  25. 25. # JavaScriptТипыСтруктуры данныхЗависимостиНеймспейсыПолиморфизмТиповые операции
  26. 26. # CoffeeScript?ТипыСтруктуры данныхЗависимостиНеймспейсыПолиморфизмТиповые операцииМеньше кнопок нажимать
  27. 27. # ClojureScriptПравильная семантическая модель:модулейданныхвычисленийсостояния
  28. 28. # ClojureScriptСтандартные решения стандартных проблемреализаций import: 0ООП-фреймворков: 0альтерн. синтаксисов: 0альтерн. коллекций: 0monad tutorials: 0
  29. 29. Google Closure-совместимСжимаетГенерирует кроссбраузерный кодОптимизирует лучше человека*Ужасная отладка*** Потенциально** Уже почти нет# ClojureScript## Компиляция
  30. 30. Не надо ждать стандартов 2 годаНе надо ждать смерти IE 7..10 летНе надо ждать библиотек 0..∞Уже сегодня, уже сейчас# ClojureScript## КомпиляцияDestucturingCompact function syntaxVararg parametersModules/importsLexical scopeReal data structuresArray comprehensionsMaps with non-string keysFor-ofMultiline strings
  31. 31. # ClojureScript## ДовесокИммутабельностьПерсистентные структуры данныхФПМакросыСтрогая типизацияПротоколы...в браузере! уже сегодня!
  32. 32. 1,5 годаДостаточно быстр и легокСтабильное APIProduction-ready# ClojureScript
  33. 33. # Clojure сообщество,## или зачем интересоваться ClojureClojure сделает из вас болеелучшего инженераМного хорошего кодаПравильные ценностиПравильная философия
  34. 34. # Clojure сообщество,## или зачем интересоваться ClojureПлощадка для экспериментовКрайне полезные лекции!Мало сил — приходится искатьхорошие решения
  35. 35. # Clojure сообщество## Доклады Rich Hickey про CSHammock-driven developmentAre we there yet?Simple made easyTBD (так вот называется,о дизайне систем)
  36. 36. Clojure ConcurrencyRH Unveils ClojureScriptRH on Datomic# Clojure сообщество## Доклады Rich Hickey про Clojure
  37. 37. # Clojure в жизни
  38. 38. Опрошено 5 разработчиков1..5 мес. работы на ClojureДо этого никто Clojure не знал# Clojure в Echo
  39. 39. — несложно, дело привычки— читать сложнее Erlang-а— Python (2,3)Java, Erlang (4)Clojure(6,7)— примерно Ruby (без Rails)— очень зависит от автора# Clojure в Echo## Насколько сложно читать?
  40. 40. — очень легко— легче, чем в ООП языках— меньше кода, только суть— упирается в понимание кода— Проблем с отладкой нет(отладочная печать она и в Африкеотладочная печать)# Clojure в Echo## Насколько сложно писать?
  41. 41. — неделя— от недели и больше— недели две— с учетом, что есть опыт в ФП# Clojure в Echo## Когда начинает получаться?
  42. 42. — concurrency примитивы— двухсторонний interop— meta параметры— идеология# Clojure в Echo## Наиболее сложные области
  43. 43. — гибкость, лаконичность— особенно чувствуется припереключении на другой язык— скорость написания кода(«опа—опа и готово»)— java—библиотеки— удобна для файлов конфигурации# Clojure в Echo## Полезно
  44. 44. — скобки (1 чел.)— привязанность к Java (2 чел.)— непрозрачность кода из—замакросов (2 чел.)— медленный старт, тяжеловесностьплатформы (2 чел.)# Clojure в Echo## Что раздражает?
  45. 45. — Большая неограниченная свобода.Можно писать как угодно, в любомстиле. Зеркало разработчика.— Идеальна для соло проектов иплоха для командной разработки.— Писать на Clojure очень легко,поэтому мы так много пишем ипереписываем то, что пишем.# Clojure в Echo## Общее впечатление
  46. 46. # Clojure в Echo## Twitter StormНачиналось всё хорошо
  47. 47. # Clojure в Echo## Twitter StormФреймворк, не библиотекаВсё делает самНужно интегрировать с ним тулзыНужно специальное тестирование
  48. 48. # Clojure в Echo## Twitter StormНе переконфигурируется на летуБаги в реализации (leaks, deploy)Фиксирует версии библиотек(zookeeper, clojure, логгинг, вебстек?)Заменили на plain old functions+ систему управления кластером(скоро)
  49. 49. # Clojure в Echo## Midje: unit-testingНачиналось всё хорошо
  50. 50. # Clojure в Echo## Midje: unit-testingПростые тесты писать проще*(is (= (:peer res) :p1))(factres => (contains {:peer :p1}))* Ну не сложнее точно
  51. 51. # Clojure в Echo## Midje: unit-testingПростые тесты писать проще*(is (= (:peer res) :p1))(factres => (contains {:peer :p1}))* Ну не сложнее точно
  52. 52. # Clojure в Echo## Midje: unit-testing(factres => (contains {:peer :p1}))Поведение неконсистентноОбычная clojure не подходитСвои checkers писать нереальноАдское макропрограммированиеНет junit.xml выводаи даже автор не представляет, как его добавить
  53. 53. # Clojure в Echo## Midje clojure.test: unit-testing(is (= (:peer res) :p1))Прямой, тупой, бесхитростныйРасширяется во все стороныЧистая дистилированная clojureНет mocking, только bindings :(
  54. 54. # Clojure в Echo## Положительный опытclojure.data.*clojure.tools.*http.async.clientriemannclj-redisclj-oauthamotoennippyringcompojureclojurescriptenfocusjayqshoreleave
  55. 55. # Success stories## Riemann
  56. 56. # Success stories## Datomic — БД нового типа
  57. 57. # Success stories## Prismatic — crawling, ML
  58. 58. # Success stories## Prismatic — crawling, ML
  59. 59. # Преимущества ClojureОбработка данныхConcurrencyБыстрая разработкаДоступ к JVM
  60. 60. # Когда использовать?Параллельная обработка общего stateОбработка больших массивов данных(анализ, обучение)Большие приложения в браузере
  61. 61. — clojure.org— clojuredocs.org— tonsky.livejournal.com— The Joy of Clojure— Clojure Programming— Programming Clojure# Полезные ресурсы
  62. 62. Спасибо за внимание!tonsky.livejournal.comjobs@aboutecho.comНовосибирск, март 2013

×