Clojure или Scala для биоинформатики / биостатистики / медицинских исследований [закрыто]

Я не эксперт Lisp, heck я даже не программист Lisp, но после небольшого количества экспериментирования с языком я пришел к выводу, что через некоторое время круглая скобка начинает становиться 'невидимой', и Вы начинаете видеть код, поскольку Вы хотите, чтобы он был. Вы начинаете уделять больше внимания синтаксическим конструкциям, которые Вы создаете через s-exprs и макросы, и меньше к лексической форме текста списков и круглой скобки.

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

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

я знаю, что это - просто эмпирическое наблюдение, но я думаю, что у меня был один из тех моментов просвещения Lisp, когда я понял это.

28
задан Peter Mortensen 26 January 2016 в 23:05
поделиться

7 ответов

Я не уверен в биоинформатике и биостатистике как таковой, но я часто занимаюсь анализом научных данных, и я ценю, что Scala позволяет мне писать код так же быстро, как и Java, с относительной легкостью. Я полагаю, что сейчас это часто возможно в Clojure, но я не видел критериев, подтверждающих это. В настоящее время, я думаю, разумно предположить, что они не работают одинаково хорошо. См., Например, Сравнительную игру по компьютерным языкам , где Scala быстрее, чем Clojure в каждом отдельном тесте. (Игнорируйте ужасный результат "pidigits" для Clojure - Scala (и Java) вызывают библиотеку GMP, написанную на C, что может сделать Clojure, но из-за технических деталей, требующих другой обертки для библиотеки, в настоящее время не допускается в игра). Рассмотрение многоядерных сравнений не улучшает показ Clojure, и обратите внимание, что код Clojure не короче для такого рода алгоритмических задач низкого уровня.

Clojure пока впереди с параллельными коллекциями, хотя грядущий релиз Scala версии 2.9 должен сильно изменить ситуацию. Ни один из них не имеет слабой кривой обучения при переходе с C ++; Scala, возможно, немного легче, учитывая, что синтаксис внешне выглядит немного более знакомым. Я считаю, что есть хорошие материалы для изучения каждого из них.


Правка: П.С. Вы можете вызывать R из Java (и, следовательно, из Clojure или Scala), используя rJava (в частности, интерфейс JRI). Редактировать, чтобы редактировать: и, в эти дни, rScala .

Правка № 2: Scala был быстрее, чем Clojure во всем на момент написания; на момент этого редактирования Clojure немного впереди (за счет огромного количества кода) - но в любом случае, общая точка зрения остается неизменной. (И реализация Scala в этом тесте может быть ускорена.)

22
ответ дан 28 November 2019 в 02:17
поделиться

Если вам нравится R, попробуйте Incanter ! Это R для Clojure .

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

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

На самом деле, эти вещи в значительной степени являются личным вкусом, поэтому попробуйте и то, и другое, и вы увидите, что делает вас счастливыми:)

Если вы хотите почувствовать Clojure без особых «интеллектуальных накладных расходов», могу я предложить использовать leiningen, чтобы быстро запустить тестовый проект?

17
ответ дан 28 November 2019 в 02:17
поделиться

Я не знаю Scala, поэтому не могу предложить сравнение, но я активно использую Clojure в проектах по биоинформатике.

Интеграция с Java превосходна, и у меня не было проблем с использованием библиотек BioJava .

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

В моей биоинформационной работе я очень часто сталкиваюсь с большим количеством входных данных (например, последовательностей генов), которые необходимо подвергнуть такому же анализу. Как только у меня появится функция анализа, я смогу map применить ее к последовательности входных данных (с ленивым результатом). Я получил полное использование большого 48-ядерного сервера, просто изменив map на pmap .

Трудно превзойти крупномасштабное распараллеливание с одним изменением символа!

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

9
ответ дан 28 November 2019 в 02:17
поделиться

Вы должны спросить себя, насколько важно функциональное программирование для вас. Вы знаете C ++, поэтому, вероятно, знаете OO. Я бы сказал, что проще сделать FP в Clojure (потому что вы не можете вернуться к OO-стилю), в Scala вы, вероятно, в конечном итоге сбросите FP и сделаете больше OO-стиля.

Я не могу ничего сказать о вашем пространстве приложений.

Поскольку вы упомянули R, существует R-подобная библиотека Clojure для статистики, которая называется Incanter . Я не знаю о других существующих проектах в вашем прикладном пространстве.

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

Оба языка имеют отличные модели параллелизма, и вы, вероятно, будете счастливы с обоими.

5
ответ дан 28 November 2019 в 02:17
поделиться

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

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

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

У Scala больше шансов стать основным языком, так как это более полный язык. Боюсь, что Clojure слишком похож на Lisp (но переопределён на JVM). Мне очень понравился Lisp, но у него было слишком много недостатков для реальных программ. Со Scala я думаю, что у нас есть лучшее из обоих миров (ОО и функциональное) в чистом браке. Кроме того, кажется, что Scala действительно завоевывает популярность на рынке.

3
ответ дан 28 November 2019 в 02:17
поделиться

Мы работали над экспериментальным кодом в проекте Rudolf / BioClojure на GitHub. Кроме того, посмотрите на проект BioClojure Яна Аерта, который более структурирован.

Кроме того, в работе находится проект BioCaml ...

1
ответ дан 28 November 2019 в 02:17
поделиться

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

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

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

Лисп не идеальный язык для любой программы. Но это идеальный язык для построения идеального языка для каждой программы.

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

7
ответ дан 28 November 2019 в 02:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: