Clojure язык программирования для чего

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

Clojure (язык программирования)

Содержание

Введение

Clojure (произносится [ ˈkləʊ.ʒər ]) является диалектом языка программирования Lisp, созданный Rich Hickey. Clojure это язык программирования общего назначения с акцентом на функциональном программировании. Он работает в Java Virtual Machine, Common Language Runtime, и JavaScript engines. Как и другие Лиспы, Clojure рассматривает код как данные и имеет систему макросов. В настоящее время процесс развития community-driven, под контролем Rich Hickey как его основателя.

Статус

Последняя стабильная версия Clojure (на 11 декабря, 2015) 1.7, выпущенная 30 июня 2015 года. Первый стабильный релиз была версия 1.0, выпущенная 4 мая 2009 года. Clojure – это свободное программное обеспечение, распространяемое по лицензии Eclipse Public.

Особенности

Обзор

GUI «Hello world» через вызов библиотеки Java Swing:

Установка

Синтаксис и семантика

Clojure – это современный вариант Lisp-1.

Основные типы данных

Числа: Clojure имеет целые числа, числа с плавающей запятой, и коэффициенты.

Атомы (переменные): Имена для значений. Clojure допускает большую часть не алфавитно-цифровых символов в именях (но не круглые, квадратные или фигурные скобки).

Ключевые слова – это не зарезервированные слова (как while в Java), но как «атомы» в Прологе или Ерланге. Ключевое слово начинается с двоеточия ( :foo ) и обозначает само себя. Ключевые слова часто используются как ключи в хэшах.

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

Map или hash – это последовательность пар ключ/знчение, заключенные в фигурные скобки, например, <:ace 1, :deuce 2, "trey" 3>. Элементы разделены пробелами или запятыми. Полезно использовать запятые между парами.

Set – это знак ( # ) сопровождающийся последовательностью значений, залюченная в скобки, например # .

Комментарии начинаются с запятой и продолжаются до конца строки.

Арифметика

Логика

Эти функции обрабатывают nil и false как false, остальное (включая пустой список) расценивается как true.

Ввод/вывод

Определение макросов

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

Clojure macro имеет сходтсво с функцией, но с этими различиями:

Следующие примеры из Practical Clojure by Luke VanderHart and Stuart Sierra.

Взаимодействие с Java

Clojure может использовать объекты Java, методы и поля. Это включает в себя типы данных коллекции Java, хотя типы данных Clojure являются предпочтительными, поскольку они являются неизменными и постоянными. Возможно, лучшее использование Java в Clojure – это сделать Swing-GUI.

Только классы могут быть импортированы, а не целые пакеты; нет эквивалента import java.util.*;

Есть также функции для работы с массивами Java, а также для обработки методов Java как объектов первого класса. Они здесь не рассматриваются.

Руководство по стилю

Это Clojure руководство по стилю рекомендует лучшие практики написания кода, так что одни Clojure программисты смогут писать код, который сможет поддерживаться другими Clojure программистами. Руководство по стилю отражает мировые практики, и поддерживает идеалы, отвергнутые людьми, дабы помочь избежать риски вообще – независимо от того, насколько это хорошо. Еще: The Clojure Style Guide on Github

Источник

Мнение: Почему стоит изучать и использовать Clojure

Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего

Разработчики из американской компании Gaslight написали интересный материал о том, почему организация, известная своей любовью к Ruby и Ruby on Rails, решила инвестировать в освоение новых технологий — например, Clojure. Мы в «Латере» развиваем биллинг для операторов связи «Гидра» и тоже работаем с этим языком программирования, поэтому решили выделить главные тезисы команды Gaslight в отдельный материал.

Итак, почему стоит изучать Clojure и использовать его в реальных проектах?

Не только Ruby и RoR

По словам Джеффа Лэйна, написавшего пост в блоге Gaslight, с помощью Clojure его команде удается решать задачи, которые не по плечу Ruby. Он иллюстрирует этот тезис словами одного из основателей Gaslight Дуга Алкорна:

«Я уверен, что нельзя держаться за один язык программирования вечно. Придет время, когда Ruby уступит место новому языку. Потому что изменится сама среда. Я лишь надеюсь, что тот, кто займет этот трон, будет лучше и милосерднее».

Лэйн говорит, что в компании все еще трепетно относятся к Ruby. Здесь все еще считают Rails лучшим решением для написания веб-приложений. Но, как и у любого инструмента, у него есть свои ограничения:

Функциональное программирование как альтернатива

В свою очередь, функциональное программирование — это совершенно иной образ мышления. Заглянем в Википедию:

«Функциональное программирование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в математическом понимании последних».

Функциональные языки в отличие от объектно-ориентированных Ruby и JavaScript предлагают совершенно иной подход к решению задач. Изучение этого подхода позволяет приобрести новые знания, которые будут недоступны, если постоянно находиться в комфортных условиях уже знакомых языков программирования, убежден Лэйн.

Clojure работает на сервере
Возьмем описание работы языка с сайта Clojure.org:

«Clojure достигает своих целей, четко следуя стандартам индустрии и используя открытую платформу JVM. Это модернизация хорошо знакомого Lisp. Он обеспечивает функциональное программирование стабильными и устойчивыми структурами данных. Предоставляет встроенную поддержку многопоточного программирования с помощью софта для транзакционной памяти и асинхронных агентов. Clojure — это быстрые и надежные решения ваших задач».

Итак, Clojure работает на виртуальной машине Java (JVM), а значит, обладает несомненными преимуществами, которые предлагает этот инструмент:

Clojure работает в браузере
Еще одна цитата. Вот как описывает преимущества языка ClojureScript Wiki:

«Платформа для разработки с хорошей портативностью, широким охватом и мульти-вендорной поддержкой. Проработанный инструментарий для создания более качественных и надежных приложений, совместимый со всеми новыми устройствами».

ClojureScript легко компилируется в JavaScript и запускается в браузере. Все это обеспечивает совершенно новый подход к созданию клиентских приложений. В сообществе разработчиков JavaScript по многим причинам недолюбливают. Clojure же можно назвать вполне самостоятельным отпрыском Lisp, удобным, лаконичным языком с отличной асинхронной поддержкой, пишет Лэйн. Он может взаимодействовать с другими библиотеками JavaScript. Это позволяет использовать один и тот же язык для клиентской и серверной части, избегая ненужных жертв и потери времени.

Обеспечение полного сохранения текущих состояний (statefullness) в приложениях для клиентов – штука непростая. И пока JavaScript-фреймворки (например, React или Ember) только подступаются к этой проблеме, стоит задаться вопросом – а не сменить ли кардинально сам подход? Возможно, найдется язык в пару к одному из этих фреймворков, способный научить нас лучше управляться с подобными сложностями.

Безусловно, не существует универсального инструмента, который бы подходил для решения всех типов задач. Однако тот факт, что Clojure можно использовать «по обе стороны баррикад» клиент-серверного взаимодействия — его несомненное преимущество.

Игра на опережение

Лэйн цитирует также великого хоккеиста Уэйна Гретцки:

«Как у меня это получается? Я просто всегда стараюсь быть там, где в следующее мгновение окажется шайба, а не там, где она уже побывала».

Clojure позволяет заполнить некоторые пробелы в процессе создания специфических типов приложений. Тех из них, которые нуждаются в высокой скорости обработки больших объемов информации. Эра многоядерных процессоров уже давно началась, но большинство традиционных языков программирования до сих пор не приспособлено к такой архитектуре, убежден Лэйн. Функциональное программирование способно снять эту проблему при написании софта. Clojure обладает всем необходимым инструментарием, для того чтобы позволить программистам эффективно работать с большими массивами данных. Фактически, упорядочивать и преобразовывать данные можно в режиме реального времени.

Без лишней инновационности

В мире технологий иногда возникают вещи настолько передовые и новые, что польза от них не очевидна — хоть когда-то в будущем и может быть существенной — а применение несет в себе большие риски. Для обозначения таких технологий придумали специальный термин — «bleeding edge». Работать с ними комфортно только любителям всего нового.

Clojure нельзя отнести к технологиям переднего края, стабильность работы которых находится под вопросом. Релиз языка состоялся более 5 лет назад, и новый инструмент получил вполне доброжелательные отзывы в сообществе разработчиков. Поэтому самое время познакомиться с ним поближе, не опасаясь подвергнуть себя рискам первопроходцев, считает Лэйн.

Фундамент Clojure — хорошо знакомые технологии, например та же JVM, работа над которой ведется более 15 лет. Поэтому, работая с Clojure, можно использовать и все высококачественные библиотеки Java, существующие на данный момент.

Любопытство — двигатель прогресса

Ну, и самый последний аргумент «за» изучение Clojure — это любопытство и желание узнавать нечто новое. Всегда есть желание быть на передовой, владеть и уметь обращаться с лучшими технологиями на рынке. Clojure идеально подходит для этих целей. Всегда интересно ставить перед собой новые задачи. А находить для них решения – ни с чем не сравнимое удовольствие.

Сейчас в Латере мы используем Clojure выполнения команд по управлению оборудованием. Специфика задачи заключается в требованиях к одновременности при исполнении команд и гибких ограничениях. С одной стороны нельзя «завалить» одно устройство командами, с другой стороны — исполнять все команды последовательно неэффективно, потому что они могут параллельно исполняться на различном оборудовании. Эта задача с легкостью решается библиотекой core.async, которая добавляет поддержку go-блоков и каналов, знакомых по языку Go, где с помощью них реализованы взаимодействующие последовательные процессы (термин, больше известный как CSP).

При этом Сlojure — язык общего назначения, найти ему применение не составляет большого труда. Так как он базируется на JVM, то для него уже фактически существует огромный выбор библиотек, поэтому при его использовании не нужно писать все заново, что сильно снижает порог входа.

Даже если вы на дух не переносите Lisp, вам стоит ознакомиться с концепциями, которые заложены в язык, многие из них заставляют по-новому взглянуть на программирование.

Источник

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

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

В этой статье не будет сравнения Clojure с другими языками, так как отталкиваясь от скромного опыта сравнивать не с чем.

Основная информация о Clojure

Clojure — это мультипарадигмальный язык программирования общего назначения поощряющий функциональное программирование. Основой этого языка и его синтаксиса является Lisp и его S-expressions. В отличие от Lisp’a Clojure включает и другие типы данных (коллекции), такие как: векторы, ассоциативные массивы, множества и очень удобные в использовании ключевые-слова. Код Clojure компилируется в JVM байткод, что позволяет развертывать приложения на большом количестве платформ и само-собой использовать все доступные Java библиотеки.

В интернетах полно информации о структурах Clojure, поэтому я пропущу описание оных.

Комюнити

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

Leiningen

Альтернатива Maven. Используется для управления зависимостями проекта, настройками библиотек и глобальными настройками проекта. Предоставляет консольные команды для создания, тестирования, компиляции и запуска приложений.

Проекты на Clojure создаются с помощью команды: $ lein new
Это создает каталог с проектом Clojure, имеющую все необходимые файлы и каталоги. И конечно же создает файл project.clj в котором и подключаются все библиотеки и выставляются глобальные настройки: библиотек, проекта, компиляции, repl и т.п…

Ring — представляет из себя слой абстракции над HTTP, предоставляя взаимодействие с ним через простой API. Очень успешно применяется при создании модульных приложений.
Примеры использования, можно увидеть на их странице github (ссылка в конце статьи). Я же использую еще одну абстракцию над Ring, которая на мой взгляд более упрощает работу с маршрутами Ring и называется Compojure.

Compojure

Библиотека для маршрутизации Ring, с её помощью можно удобно упаковывать маршруты и использовать их в handler’e проекта.

Не стану приводить пример request’a так как вы все прекрасно понимаете как он выглядит. На этом о Compojure закончено.

Buddy

Библиотека для авторизации и аутентификации пользователей. Упаковывает сессии авторизованных пользователей в HTTP заголовок в свой backend, имеет функции для шифрования паролей и т.п…

Пример шифрования пароля:

Так-же Buddy позволяет настраивать доступ к страницам в middleware.

Selmer

HTML шаблонизатор, вдохновленный Django. Позволяет очень гибко работать с данными в HTML шаблонах.

Monger

Библиотека для работы с mongodb, вообще Clojure очень удобный инструмент для работы с базами данных, все благодаря его коллекциям. Monger это Clojure MongoDB клиент (суть библиотека), предоставляющий функции, высокого и низкого уровня для взаимодействия с API MongoDB. Библиотека написана весьма лаконично и в то же время предоставляет все необходимое для полноценного использования MongoDB в приложениях. Нельзя не заметить огромный плюс — это очень развернутая и подробная документация на официальном сайте.

Про обилие скобок

Скобок много, нужно привыкнуть, но внимательный человек обратит внимание, что их не больше чем фигурных скобок в том-же JavaScript.

Ссылки на описанные библиотеки
Дополнительные ссылки

На этом пожалуй все, в дальнейших статьях если к ним проявится интерес я расскажу про каждую библиотеку в отдельности, про замечательный веб-сервер immutant, ну и конечно же про ClojureScript который удобно использовать при разработке front-end приложений и компилируется он в javascript. Так-же хотелось бы осветить фреймфорк Luminus, который очень сильно помог мне разобраться с веб-разработкой на Clojure. Надеюсь моя, хоть и не всеобъемлющая статья заинтересует вас просмотреть возможности этого замечательного инструмента.

Источник

Clojure

Материал из Xgu.ru

Clojure — диалект языка программирования Lisp для JVM, функциональный язык программирования.

Clojure опирается на основные принципы функционального программирования:

В Clojure используется динамическая типизация, однако при необходимости переменным может быть явно задан определенный тип, чтобы обеспечить максимальную производительность критически важных фрагментов кода.

Содержание

[править] Общие сведения Clojure

Эти темы не раскрыты:

[править] Сильные стороны Clojure

Эти темы не раскрыты:

[править] Слабые стороны Clojure

Эти темы не раскрыты:

Clojure хорош всем. Но есть несколько спорных моментов, которые некоторым чаще других кажутся плохими. Нужно иметь их в виду, особенно, когда вы только начинаете знакомиться с языком. Большинство из них могут быть так же и плюсами языка, в зависимости от точки зрения.

Clojure работает на JVM (хотя не только) Clojure это Lisp (хотя и не совсем обычный Lisp) Clojure — язык с динамической типизацией (хотя есть попытки прикрутить к нему выведение типов, это всё не его) Изменение объектов в Clojure намеренно усложнено (но это намеренно!) Сообщения об ошибка в Clojure часто выглядят очень мутно (здесь сложно поспорить, хотя есть методы борьбы с этим)

[править] Сферы применения Clojure

Эти темы не раскрыты:

[править] Сравнение Clojure с другими языками

[править] clojure vs java

[править] clojure vs python

[править] clojure vs ruby

[править] clojure vs scala

[править] clojure vs erlang

[править] clojure vs haskell

[править] clojure vs common lisp

[править] clojure vs f#

[править] clojure vs racket

[править] Краткая история Clojure

[править] Основы

[править] С чего начать

Эти темы не раскрыты:

[править] Почему Clojure?

[править] Установка Clojure

Эти темы не раскрыты:

Если вы работаете под Windows, вы можете попробовать начать работу с Clojure с помощью Clojure Box. Это комплект из необходимых инструментов, включающих собственно Clojure, Emacs, SLIME и несколько других полезных вещей, оснащённый инсталлятором и инсталлирующийся и запускающийся в один клик.

[править] Запуск программ Clojure из командной строки

Есть два основных способа запуска программ Clojure из командной строки, которые используются в зависимости от того, используется leiningen или нет.

Программу на Clojure можно запустить так (предположим, прогрмма называется program.clj):

Если код структурирован с помощью файлов и пространств имён (namespaces), то при вызове программы следует указать, какое пространство имён должно использоваться:

Например, в src/foo.clj находится:

Вызов программы осуществляется таким образом:

Если для управления проектом используется Leiningen, подготовка к запуску из командной строки и использованию аргументов командной строки выполняется так.

В описании проекта, в файле project.clj нужно указать значение :main, которое указывает на то, в каком пространстве имён находится стартовая функция -main:

Потом в файле, соответствующем указанному пространству имён, находящемуся в подготологе каталога src/ в проекте, в данном случае в src/cmdline/core.clj нужно установить свойство :gen-class в описании пространства имён:

После этого нужно описать функцию -main:

Программу теперь можно выполнять командой

из каталога проекта. 1 2 3 в данном случае это аргументы командной строки программы.

Можно собрать из проекта uberjar, который использовать потом независимо:

Для полноценной обработки опций командной строки (короткие, длинные опции, обязательные и необязательные опции, аргументы опций) лучше всего использовать модуль tools.cli Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего.

[править] Структуры данных в Clojure

Эти темы не раскрыты:

[править] Символ

Эти темы не раскрыты:

[править] Ключевое слово

Эти темы не раскрыты:

[править] Список

[править] Вектор

Эти темы не раскрыты:

К вектору нельзя присоединить значение слева (insert), при выполнении conj значение автоматически добавляется в конец. Если значение обязательно должно быть сначала, то можно сделать

но стоимость этой операции не O(1), а O(n).

Естественно, можно использовать concat, но (в большинстве случаев) это ещё хуже, поскольку фактического добавления не происходит, а выполняется только ленивая операция конкатенации (но в простейших случая этого может быть достаточно).

Более обстоятельным решением может быть использование пальцевых деревьев (finger trees), специальной персистентной структуры данных, которая поддерживает добавление как слева, так и справа. В Clojure она доступна в виде отдельной библиотеки data.finger-tree Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего.

Подробнее об этой структуре данных и библиотеке:

[править] Ассоциативный массив

Эти темы не раскрыты:

[править] Управление последовательностью исполнения

Эти темы не раскрыты:

[править] Функции

Эти темы не раскрыты:

[править] Мемоизация

Мемоизация это одна из очень мощных техник, которая используется для автоматического сохранения результатов трудоёмких вычислений функций.

В Clojure эта техника особенно полезна и широкоприменяема, в силу того, что функции, как правило, являются чистыми и легкомемоизируемыми.

В простейшем случае мемоизированный аналог любой чистой функции можно сделать, выполнив:

Функция f1 уже мемоизирована.

Ситуация немного усложняется при мемоизации рекурсивных функций. Проблема в том, что мемоизированная функция, вызывающаяся рекурсивно, на этапе описания функции ещё не существует (в текущем пространстве имён).

Существует несколько способов решения данной проблемы:

Пример функции Фибоначчи, реализованной вторым способом [3] :

Подробнее о мемоизации в Clojure:

Более развитый подход к мемоизации реализован в модуле core.memoize:

[править] Локальная и динамическая область видимости

Эти темы не раскрыты:

[править] Работа с последовательностями

Эти темы не раскрыты:

Сюда же пока отнесём вот эти темы, хотя, наверное, их лучше выделить в отдельный раздел:

Эти темы не раскрыты: Работа с рекурсией/замена рекурсии:

Работа с циклами/замена циклов:

Эти темы не раскрыты:

[править] Деструктуризация

Эти темы не раскрыты:

[править] Выполнение действий с побочными эффектами

Эти темы не раскрыты:

[править] Важные возможности/особенности языка

[править] Последовательности и ленивые вычисления (lazy evaluations)

Эти темы не раскрыты:

[править] Рекурсия с помощью loop и recur

Эти темы не раскрыты:

[править] Протоколы (defrecord и protocols)

[править] Макросы

Эти темы не раскрыты:

[править] Механизмы одновременного исполнения

Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего

Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего

Эти темы не раскрыты:

[править] Ссылки и транзакционная память (references и transcational memory)

[править] Атомы (Atoms)

[править] Агенты (Agents)

[править] Фьючерсы (Futures)

[править] Состояние потока (Thread state)

[править] Метаданные (Metadata)

[править] Мультиметоды (Multimethods)

Эти темы не раскрыты:

В языке Clojure нет pattern matching'а, но он есть в дополнительном модуле core.match.

Эти темы не раскрыты:

[править] Записи

Эти темы не раскрыты:

[править] Интеграция с Java

В Clojure существует несколько различных механизмов интеграции с Java, обладающих различными свойствами и подходящими в различных ситуациях.

Какой именно тип подходит в каждом конкретном случае определяется условиями его использования.

Эти темы не раскрыты:

[править] Интеграция с бинарным кодом

Интеграция с бинарным (нативным) кодом осуществляется с использованием тех же механизмов, что традиционно используются в Java:

Кроме того в Clojure существует несколько приятных модулей, который делают использование интерфейсов очень простым, даже в некоторых случаях элементарным делом:

Например, с помощью clojure-jna Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего:

Вместо c/ может быть указана любая другая интересующая библиотека. Естественно, она должна быть доступна из JVM:

Использование JNA хотя и является очень простым, не всегда подходит. В частности, если необходимо использовать не чистые Си-библиотеки, а C++, то напрямую получить к ним доступ с помощью этих интерфейсов не получится (однако, можно написать Си-враппер).

При использовании SWIG таких проблем нет.

Эти темы не раскрыты: SWIG

[править] Пространства имён и модули

Эти темы не раскрыты: Модули, библиотеки, пространства-имён

[править] Работа с исключениями в Clojure

Эти темы не раскрыты:

[править] Типизация

Эти темы не раскрыты:

[править] Разработка на Clojure

[править] Leiningen

Эти темы не раскрыты:

Другая, очень интересная и многообещающая система сборки: Boot. Подробнее:

[править] REPL

[править] Среда разработки

Эти темы не раскрыты:

[править] Emacs + CIDER

В качестве примера полностью интерактивной разработки рассмотрим небольшой пример. В примере разрабатывается простейшее web-приложение (базирующееся на ring и compojure). Изменения в приложении выполняются с помощью REPL (nREPL если быть точным), напрямую, без его остановки и перезагрузки.

Скелет приложения создадим с помощью Leiningen (используя модуль compojure):

Затем в код src/handler.clj добавим строчки, которые запускают nrepl-сервер в приложении в момент его старта:

После этого можно запускать приложение:

Сервер отвечает на HTTP-запросы по порту 3000. Nrepl-сервер доступен на порту 7888.

Для того чтобы подключиться к нему из Emacs нужно запустить nREPL-клиент (CIDER) и подключиться к этому порту.

Стоит отметить, что к nREPL может подключаться не только Emacs, но и ряд других клиентов, в том числе:

Для того чтобы подключиться к удалённому nREPL из Emacs, используя CIDER, нужно выполнить:

и указать параметры подключения.

С этого момента CIDER подключен напрямую к работающему приложению и изменения, которые делаются в нём напрямую отражаются на исполняемом коде.

Для того чтобы убедиться в этом, добавим ещё один маршрут:

Страница /1 отвечает теперь Hello from page 1.

Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего

Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего

Автопродолжение в Emacs для Clojure (не только для Clojure, но для него в том числе) удобнее всего выполнять при помощи расширения company-mode. Фреймворк поддерживает большое количество различных источников (backend-ов) данных об автопродолжении.

При использовании CIDER достаточно проинсталлировать и активировать модуль company-mode.

Иногда набор кода Clojure может быть существенно ускорен с помощью системы шаблонов Yasnippet для Emacs. Расширения Yasnippet для Clojure:

[править] Vim

[править] Eclipse

[править] IDEA

[править] XCode

[править] Nightcode

[править] Тестирование

Эти темы не раскрыты:

[править] Качество кода

Эти темы не раскрыты:

[править] Логгинг и профайлинг

Эти темы не раскрыты:

[править] Поддерживаемые платформы

[править] JVM

Собственно основная платформа Clojure.

От JVM Clojure нужно многое, в частности:

Эти темы не раскрыты:

[править] CLR

Clojure на CLR отстаёт от Clojure на Java на некоторое время, на несколько недель обычно.

[править] JavaScript

Поддержка платформы JavaScript языком Clojure осуществляется в рамках проекта ClojureScript.

ClojureScript это модификация Clojure (фактически это компилятор Clojure), компилирующаяся в JavaScript.

Об использовании ClojureScript поверх Node.js (это возможно, но есть нюансы).

Смысл использования ClojureScript поверх Node.js может быть в нескольких случаях:

По поводу сравнения производительности Clojure и ClojureScript:

Эти темы не раскрыты:

[править] LLVM

Пока что Clojure не работает на LLVM. Заставить работать Clojure на LLVM будет непросто, хотя попытки предпринимаются постоянно.

[править] Native

В native-код Clojure напрямую не компилируется, однако Clojure можно скомпилировать в нечто, что потом будет скомпилировано в машинный код. Например, в Scheme.

Проект, который посвящён компиляции Clojure в Gambit Scheme:

Попытка компилировать Clojure в Objective C:

[править] Аспекты применения

[править] Работа с операционной системой

Эти темы не раскрыты:

[править] Работа с датой и временем

Эти темы не раскрыты:

[править] Работы с файлами

Эти темы не раскрыты:

[править] Работа с потоками ввода/вывода

Эти темы не раскрыты:

[править] Работа со строками

Эти темы не раскрыты:

[править] Работа с различными форматами данных

[править] XML

Эти темы не раскрыты:

[править] JSON

Эти темы не раскрыты:

[править] YAML

[править] EDN

[править] Лексический анализ, синтактический анализ и регулярные выражения

Эти темы не раскрыты:

[править] Работа с базами данных в Clojure

Эти темы не раскрыты:

[править] GUI и Clojure

Эти темы не раскрыты:

[править] Разработка игр в Clojure

Эти темы не раскрыты:

[править] Web

В мире Clojure есть несколько компонентов, которые чаще всего используются для построения web-приложений:

В прошлом был ещё популярен фреймворк Noir, который больше не развивается.

Кроме того, есть ещё более развитый фреймворк Conjure, который можно сравнить с Django или Rails.

Безопасность Web-приложений на Clojure:

Эти темы не раскрыты: Темы, которые пока не раскрыты, и которые надо раскрыть:

[править] Enlive

[править] ClojureScript

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

[править] Разработка на Clojure под Android

Эти темы не раскрыты:

Пока что не идеально, но уже кое что возможно.

Есть нескольсо свободных проектов, которые помогают вести разработку на Clojure под Android:

Следует иметь в виду, что Clojure есть Clojure и при всех очевидных плюсах, у разработки на Clojure под Android есть несколько минусов:

Александр Якушев, создатель lein-android:

[править] Математические вычисления в Clojure

Эти темы не раскрыты:

[править] BigData, Hadoop и Clojure

Эти темы не раскрыты:

[править] Высокопроизводительно программирование (high performance programming) в Clojure

[править] Расширенные вопрос одновременного исполнения (Advanced Concurrency Questions)

Эти темы не раскрыты:

Ещё нужно написать обязательно о распределённом состояние (distributed state) в Clojure, которое проще всего делается через avout.

[править] Асинхронное исполнение в Clojure

Эти темы не раскрыты:

Зачем нужен core.async?

[править] Редьюсеры и трансдьюсеры

Трансдьюсеры представляют собой удобные комбинируемые механизмы, позволяющие выражать сложные алгоритмические трансформации данных и совместимые с core.async.

Интеграция трансдьюсеров выполнена в язык настолько глубоко, что возможны такие конструкции:

[править] Известные алгоритмы на Clojure

[править] Быстрая сортировка (qsort)

[править] Ленивая реализация qsort

[править] Приложения на Clojure

Эти темы не раскрыты: Известные приложения на Clojure. Особенности их использования.

[править] Incanter

[править] Overtone

[править] Разное

[править] Конференции

Эти темы не раскрыты:

[править] Группы пользователей и известные тусовки

[править] Работа и вакансии

Эти темы не раскрыты:

Европейские стартапы, использующие Clojure:

[править] Дополнительная информация

[править] Неотсортированное

[править] Интересные заметки и статьи

[править] Прочие информационные источники

Эти темы не раскрыты:

[править] Блоги и микроблоги

Эти темы не раскрыты:

[править] Книги

Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего

Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего

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

Seven Languages in Seven Weeks Bruce Tate, 2010, The Pragmatic Programmers, http://pragprog.com/book/btlang/seven-languages-in-seven-weeks В этой книге Clojure посвящена только одна глава. Programming Clojure Stuart Dabbs Halloway, 2009, The Pragmatic Programmers, http://pragprog.com/book/shcloj2/programming-clojure Clojure Programming Chas Emerick, Brian Carper, Christophe Grand, 2012, O'Reilly Media, http://shop.oreilly.com/product/0636920013754.do Clojure CookbookO'Reilly Media Luke VanderHart, Ryan Neufeld, 2014.03, O'Reilly Media, http://shop.oreilly.com/product/0636920029786.do Книга доступна на github.com Clojure язык программирования для чего. Смотреть фото Clojure язык программирования для чего. Смотреть картинку Clojure язык программирования для чего. Картинка про Clojure язык программирования для чего. Фото Clojure язык программирования для чего. ClojureScript Up and Running Stuart Sierra, Luke VanderHart, O'Reilly Media, http://shop.oreilly.com/product/0636920025139.do Clojure in Action (Second Edition), Amit Rathore, January 2015, Manning Publications Co., http://www.manning.com/rathore2/ The Joy of Clojure Michael Fogus and Chris Houser, May 2014, Manning Publications Co., http://joyofclojure.com/ Clojure Data Analysis Cookbook Eric Rochester, March 2013, https://www.packtpub.com/big-data-and-business-intelligence/clojure-data-analysis-cookbook Clojure For Machine Learning Akhil Wali, April 2014, Packt Publishing, https://www.packtpub.com/big-data-and-business-intelligence/clojure-machine-learning Clojure High Performance Programming Shantanu Kumar, November 2013, Packt Publishing, https://www.packtpub.com/application-development/clojure-high-performance-programming Mastering Clojure Data Analysis Eric Rochester, May 2014, Packt Publishing, https://www.packtpub.com/big-data-and-business-intelligence/mastering-clojure-data-analysis Web Development with Clojure. Build Bulletproof Web Apps with Less Code Tomek Lipski, Januray 2014, The Pragmatic Programmers, https://pragprog.com/book/dswdcloj/web-development-with-clojure Building Web Applications with Clojure Dmitri Sotnikov, April 2014, Packt Publishing, https://www.packtpub.com/web-development/building-web-applications-clojure-video Mastering Clojure Macros Write Cleaner, Faster, Smarter Code Colin Jones, September 2014, The Pragmatic Programmers, https://pragprog.com/book/cjclojure/mastering-clojure-macros

Книги по Clojure в свободном доступе:

Эти темы не раскрыты:

[править] Видео

Эти темы не раскрыты:

[править] Конференции и тусовки

Остальной мир (США, Канада, Австралия)

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *