В каких случаях лучше использовать Clojure?[закрыто]

StackOverflow https://stackoverflow.com/questions/1800896

  •  05-07-2019
  •  | 
  •  

Вопрос

Я разрабатываю на Lisp и Scheme, но я читал о Clojure и потом хочу знать, в каких случаях лучше использовать его, чем использовать Lisp или Scheme?Спасибо

Это было полезно?

Решение

" Clojure работает на JVM " означает, что вы получаете всю доступную библиотеку Java. Вы можете создавать красивые графические интерфейсы в Swing, использовать веб-клиент Apache или код сервера, подключать готовый решатель судоку ... все, что вам нравится.

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

Обновление: еще один аргумент. Clojure довольно сильно функционален, поэтому это плюс, если вы хотите заставить себя думать и писать функционально.

Другие советы

На этот вопрос невозможно ответить. Я должен сказать, что вы должны использовать Clojure почти 100% времени по сравнению с CL и Scheme. Но это не значит, что вы должны слушать меня. Другие могут привести хороший аргумент, что дело обстоит иначе.

Для меня синтаксис и имена функций в Clojure эстетичны. Некоторые библиотеки Java неоценимы для того, что я делаю для сбора данных, веб-программирования и графического интерфейса. Функциональное программирование является сложным и приятным. Недостатки Clojure не важны и перевешивают его преимущества в моих глазах. Некоторые недопустимые недостатки в других Лиспах являются "исправленными" в Clojure, потому что он новый и может игнорировать обратную совместимость. У этого есть новый и возможно мощный подход к параллелизму. Сообщество Clojure является ярким, гостеприимным и потрясающим. Все это говорит обо мне и о том, что я ценю, и о Clojure или других Лиспах.

Существуют библиотеки для CL и Scheme, которых нет в Clojure или Java. Есть люди, которым не нравится, как Clojure использует слишком много синтаксиса, таких как [] и {} , и они хотят использовать парены везде. Если вам нужен ООП в стиле CLOS или множество изменяемых структур данных, возможно, лучше использовать другой Лисп. JVM является тяжеловесом, может быть, слишком тяжелым и слишком большим багажом для некоторых людей. Большая часть Java просачивается в Clojure (по замыслу), и это оскорбляет чувства некоторых людей. STM и неизменяемые структуры данных имеют издержки, которые делают определенные вещи (например, сокращение числа) медленнее или менее элегантными. Clojure является новым и все еще грубым в некоторых областях, все еще быстро изменяющимся и развивающимся в других. Clojure еще не прошел испытание временем, в то время как другие Lisps уже прошли. Clojure не является «стандартным» и некоторые люди находят язык, определенный реализацией, непривлекательным. И так далее. Ничто из этого не имеет значения для меня, но может для вас.

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

По сути, все, что заставляет вас чувствовать себя тепло и нечетко. Изучите их все, а затем сделайте осознанный выбор, исходя из своих собственных вкусов, и используйте тот, который вам больше нравится. Они все хороши.

Когда?Как можно больше.Почему?Неизменяемые структуры данных — они действительно хороши.Есть много другие причины слишком.

Clojure следует использовать, когда

  • вам нужно работать с существующим Java-кодом.
  • вы работаете с людьми, у которых аллергия на lisp («босс, я бы хотел использовать Java-библиотеку параллелизма под названием Clojue vs.Я хотел бы переписать это в схеме» [1]
  • вы будете программировать для многопроцессорной системы.

Схема будет лучше, если:

  • вам нужно доказать, что ваш код верен.Clojures (вызов Java) препятствует, но не предотвращает это.
  • вы работаете с людьми, у которых аллергия на Java.
  • вы разрабатываете платформу без (достаточно новой) JVM

[1] да, это плохая, плохая, плохая причина.таков мир, в котором мы живём...

ABCL (Armed Bear Common Lisp) и несколько реализаций Схемы (KAWA, SISC) , ...) также работают на JVM.

Обычно Common Lisp доступен в разных вариантах - ABCL является одним из них. Другие компилируются из C в собственный код, имеют обширные среды разработки или специализированные расширения, такие как логические языки или базы данных.

Clojure OTOH - новый диалект Lisp с акцентом на ленивое функциональное программирование и параллельное программирование. Его автор (Rich Hickey) - очень опытный разработчик программного обеспечения (он также написал интерфейсы Java и .net для Common Lisp) и отлично справился с Clojure. Несмотря на некоторую ажиотаж вокруг языка, стоит проверить - это определенно один из лучших диалектов Лиспа, разработанный в последние годы (по сравнению, скажем, с Newlisp или Arc).

Есть много причин, некоторые упомянутые выше. Мое мнение:

<Ол>
  • Существующие библиотеки. Это такая выгода. Я просто не могу похвалить эту функцию достаточно.
  • Язык более адаптирован к аппаратное обеспечение в настоящее время доступно (многоядерный) и развитие парадигмы в использовании сегодня. Намного проще рассуждать о параллелизме. Функциональные аспекты тоже приятнее. Очевидно, что вы можете заниматься функциональным программированием на Лиспе, но разбить парадигму очень просто, невольно, невольно и непреднамеренно.
  • Кроссплатформенная. Я бегу идентично программы для Linux, Windows и Макинтош Есть много родных Лисп которые работают на разных платформах, но поддержка всех функций на всех платформы немного пятнистый и вы постоянно должны быть начеку за вещи, которые отсутствуют на одном Платформа или другой. Аналогичным образом, библиотеки, которые вам нужны, не всегда последовательно поддерживается через платформ. ABCL и некоторые из Реализации Схемы JVM имеют это последовательная поддержка, но я все еще предпочитаю Clojure из-за пункт 2.
  • Природа языка сообщества. Посмотрим правде в глаза, много время сообщества Common Lisp просто противно иметь дело с То есть дело не в Clojure. Легко получить полезную помощь без снисходительность и подлость часто приходит с ответом от Сообщество Common Lisp. Как у меня узнал для себя несколько раз, нет такой глупости, что вы не получите вежливую и услужливую ответ от сообщества Clojure.
  • Если бы мне пришлось искать одну вещь, на которую можно пожаловаться, это была бы поддержка IDE. Может быть, это вопрос изучения новых привычек, но мне все еще легче справиться с механикой разработки Java, чем Clojure. Я пробовал и использую Clojure Box, Enclojure в NetBeas, La Clojure в Intellij IDEA и против часовой стрелки в Eclipse. Все они работают нормально, если вы работаете в основном из REPL, но для компиляции и выполнения файлов классов они все еще чувствуют себя немного неуклюже.

    Подмножество Clojure также можно скомпилировать в javascript

    Clojure работает на JVM (и на CLR), так что есть.

    Конструкция Clojure связана с безопасным размещением нескольких стилей параллельного программирования, сознательно затрудняя ошибочно писать опасный, шаткий и часто ломающийся код, допускающий параллелизм, на других языках. Если ваша проблемная область связана с параллельным программированием, массив интегрированных инструментов Clojure для управления параллелизмом может оказаться более подходящим, чем библиотеки для конкретных реализаций или библиотеки с наименьшим общим знаменателем, доступные в других Лиспах и Схемах.

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

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

    Clojure пород.

    Я всегда стараюсь изучать новые языки, поэтому мне интересно изучать Clojure. Но разве SBCL и некоторые другие реализации Common Lisp не намного, намного быстрее, чем Clojure? Разве вам не нужно значительно больше 4 процессоров (и разумно распараллеливаемая задача), чтобы компенсировать разницу в производительности между приложением Clojure и даже однопоточной версией SBCL того же приложения?

    Как правило, я предпочитаю использовать Clojure по сравнению с другими языками в тех случаях, когда любой из них отвечает всем требованиям: (1). Модель предметной области имеет тенденцию выглядеть очень рекурсивно и / или графически. (2). Существует возможность использовать многоядерную среду JVM (например, Elastic Beanstalk) (3). Между данными и кодом существует нечеткий барьер (вспомните RPN калькулятор, где узлы могут быть операторами или числами)

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top