SlideShare a Scribd company logo
1 of 16
Download to read offline
Clojure
Личный взгляд
Срыв покровов
— Это не тот Common Lisp
— Разница культур
— Это очень мощный и выразительный язык...
— ...подкрепленный Лиспом
— Скобочки не только круглые )))
Основное
— Работа с коллекциями
— Неизменяемость
— Транзакционная память
— Типы там, где они нужны
Все, что есть в ООП
— Расширение протоколов
— Паттерн-матчинг
— Ссылочные объекты
ClojureScript
— Компилируется в JS
— Модульность, неймспейсы, макросы
— Повторное использование кода Clojure
— Om — биндинг к React
Свобода действий
— Макросы
— свой DSL, например, ORM
— работа с деревьями (XML, HTML)
— многопоточность
ORM DSL example
(-> (select :*)
(from :users)
(where '(= id 5)
'(= status "active"))
sql/format)
Еще о макросах
(/ (* 2 (+ 2 3)) 100)
(expr (2 + 3) * 2 / 100)
(for [item some-seq]
(* item 2))
(-> initial func1 func2 func3)
IDE
— Емакс (trollface)
— Light Table
— Idea plugin
— Cursive IDE
Гомогенность
— Ring — призводительный веб-фреймворк
— приложение это функция (app request)
— добавили роутинг — получили функцию
— добавили мидлварь — получили функцию
— и тд.
Разве можно ничего не менять?
(defn wrap-user [view]
(fn [request]
(view (assoc
request
:user (when-let [user-id
(-> request :session :user-id)]
(get-user-by-id user-id))))))
(def app (-> app-routes auth/wrap-user))
Не надо про скобочки!
— Они теперь разные
(function($){$('.foo').click(function()
{alert(123);})})(jQuery); — 18 шт
Лисп упрощает сам себя
(get (get (get response :data) :user) :name)
(getin response [:data :user :name])
(-> response :data :user :name)
Pros
— библиотеки
— простота
— uberjar: деплой, дистрибуция, кроссплатформенность
— свобода
— производительность
— Google for "awesome-clojure"
Cons
— непривычно!
— для серьезной разработки нужен Емакс
— (пока еще) мало вакансий
— ограничения Java-платформы
Спасибо!
Вопросы?

More Related Content

Similar to Личный взгляд на Clojure

Экосистема Common Lisp
Экосистема Common LispЭкосистема Common Lisp
Экосистема Common LispVsevolod Dyomkin
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Alex Ott
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Alex Ott
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)Alexander Gornik
 
!Predictive analytics part_3
!Predictive analytics part_3!Predictive analytics part_3
!Predictive analytics part_3Vladimir Krylov
 
архитектура новой почты рамблера
архитектура новой почты рамблераархитектура новой почты рамблера
архитектура новой почты рамблераHighLoad2009
 
Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"
Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"
Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"DataArt
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияSlach
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianMikhail Davydov
 
2013 09 21 языки программирования
2013 09 21 языки программирования 2013 09 21 языки программирования
2013 09 21 языки программирования Yandex
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветлениеMaxim Sokhatsky
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Ontico
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Yury Bushmelev
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
Design of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XMLDesign of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XMLAnton Moiseenko
 
Solaris OS
Solaris OSSolaris OS
Solaris OSSSA KPI
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 

Similar to Личный взгляд на Clojure (20)

Экосистема Common Lisp
Экосистема Common LispЭкосистема Common Lisp
Экосистема Common Lisp
 
Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)Clojure: Lisp for the modern world (русская версия)
Clojure: Lisp for the modern world (русская версия)
 
Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)Введение в Clojure (Margincon 2010)
Введение в Clojure (Margincon 2010)
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
!Predictive analytics part_3
!Predictive analytics part_3!Predictive analytics part_3
!Predictive analytics part_3
 
Ramail Arch
Ramail ArchRamail Arch
Ramail Arch
 
архитектура новой почты рамблера
архитектура новой почты рамблераархитектура новой почты рамблера
архитектура новой почты рамблера
 
Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"
Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"
Виктор Гунько "Трансфер данных: есть ли жизнь за пределами JSONa"
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
 
phpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем храненияphpConf 2010 Классификация систем хранения
phpConf 2010 Классификация систем хранения
 
JavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in RussianJavaScript on frontend and backend (in Russian
JavaScript on frontend and backend (in Russian
 
2013 09 21 языки программирования
2013 09 21 языки программирования 2013 09 21 языки программирования
2013 09 21 языки программирования
 
Erlang мгновенное просветление
Erlang  мгновенное просветлениеErlang  мгновенное просветление
Erlang мгновенное просветление
 
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
Карта граблей на поле сбора и доставки логов. Lazada-way / Юрий Бушмелев (Laz...
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
Design of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XMLDesign of Information Systems. Lecture #1. XML
Design of Information Systems. Lecture #1. XML
 
Solaris OS
Solaris OSSolaris OS
Solaris OS
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 

More from Ivan Grishaev

Основы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий СоболевОсновы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий СоболевIvan Grishaev
 
Что такое говнокод
Что такое говнокодЧто такое говнокод
Что такое говнокодIvan Grishaev
 
Why everyone like ruby
Why everyone like rubyWhy everyone like ruby
Why everyone like rubyIvan Grishaev
 
В поисках удаленной работы за рубежом
В поисках удаленной работы за рубежомВ поисках удаленной работы за рубежом
В поисках удаленной работы за рубежомIvan Grishaev
 
Еще раз про качество
Еще раз про качествоЕще раз про качество
Еще раз про качествоIvan Grishaev
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетяхЧек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетяхIvan Grishaev
 
10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателю10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателюIvan Grishaev
 
тесты с фикстурами
тесты с фикстурамитесты с фикстурами
тесты с фикстурамиIvan Grishaev
 
Project Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогикиProject Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогикиIvan Grishaev
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе dockerIvan Grishaev
 
Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потерялиIvan Grishaev
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Ivan Grishaev
 

More from Ivan Grishaev (16)

Основы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий СоболевОсновы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий Соболев
 
Docker
DockerDocker
Docker
 
NoSQL pain
NoSQL painNoSQL pain
NoSQL pain
 
Что такое говнокод
Что такое говнокодЧто такое говнокод
Что такое говнокод
 
Why everyone like ruby
Why everyone like rubyWhy everyone like ruby
Why everyone like ruby
 
В поисках удаленной работы за рубежом
В поисках удаленной работы за рубежомВ поисках удаленной работы за рубежом
В поисках удаленной работы за рубежом
 
Еще раз про качество
Еще раз про качествоЕще раз про качество
Еще раз про качество
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетяхЧек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
 
10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателю10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателю
 
тесты с фикстурами
тесты с фикстурамитесты с фикстурами
тесты с фикстурами
 
Project Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогикиProject Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогики
 
Agile or not agile
Agile or not agileAgile or not agile
Agile or not agile
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
 
Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потеряли
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП
 

Личный взгляд на Clojure