?

Log in

No account? Create an account

Стой под стрелой

Поступки и мысли, о которых могу вспомнить не краснея

Previous Entry Поделиться Пожаловаться Next Entry
Баттл
усы2
tonsky
Тут недавно возник такой вопрос — а чем, собственно, по существу отличаются Scala и Clojure?

У меня такие соображения:

  • static vs dynamic typing
  • компилятор найдет больше ошибок
  • но зато писать дольше — за это время можно и юнит-тест наговнякать
  • ориентированность на concurrency (иммутабельные структуры, STM) — в Clojure из коробки, в Scala через Akka
  • ленивые вычисления vs ?
  • большой, сложный язык (классы, объекты, типы, наследование, микс ФП и ООП, сидит сразу на всех стульях — Scala) vs маленький, компактный, открытый, композабельный (данные, функции, неймспейсы, только ФП — Clojure)
  • принципиальная академичность (Scala) vs прагматичность (Clojure)
  • расширяемость — макросы в Clojure, в Scala что есть, то есть
  • примат данных (Clojure) vs примат системы типов (Scala)
  • единый семантически богатый формат обмена данными (edn) vs выбери сам
  • eval и там, и там (в Scala используется редко)
  • REPL и там, и там
  • долгая промышленная разработка, большая команда vs быстрое прототипирование
  • ни то, ни то не отдать [junior] developers в энтерпрайз.
  • многоплатформенность (Clojure переносится на js, .net, python) vs только jvm
  • оба потихоньку где-то используются, но killer apps ни у кого нет
  • interop в clojure хороший, в скале вроде неплохой (но коллекции надо конвертировать)
  • про производительность Scala я слышал много хорошего by default, а в Clojure надо спускаться к java-примитивам в узких местах

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

А вообще Clojure побеждает по всем фронтам.


  • 1
Типизация и скобочки — главные различия.

Concurrency есть и в скале (причём куча разных — не только STM, но и экторы, и комбинаторы, да хоть ручная синхронизация, для извращенцев).

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

Макросы щас будут, xeno_by почти доделал.

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

Eval теоретически существует (Interpreter), на практике используется редко.

REPL, конечно, есть, arguably лучше чем в Clojure, используется активно.

Быстрого прототипирования скале не хватает, это да. Хотя, опять же, как наловчиться.

Многоплатформенность в скале планируется (есть экспериментальные компиляторы в JS и дотнет). В питон нет, конечно, упаси б-же.

Interop прекрасен, Мартин молодец.

Scala, как правило, не уступает в производительности джаве, даже если пихать иммутабельность во все поля (что меня немало удивляет — какие же монстры писали компилятор).

Спасибо!

> Типизация и скобочки — главные различия.

А скобочки что? На что это влияет по существу?

> Interop прекрасен, Мартин молодец.

Что-то я почитал, Скала-коллекции надо гонять ч/з .toScala/.toJava чтобы в Яве использовать, это правда? В Кложе коллекции, например, все базовые ява-интерфейсы реализуют.

> Формат обмена данными какой угодно.

Ну т.е. чего-то единого нету.

без темы (Анонимно) Развернуть
(Удалённый комментарий)
У них в .Net же есть какие-то прикольные F# и Nemerle?

(Удалённый комментарий)
Реквестирую баттл erlang vs clojure. Вот эта задачка то потруднее будет.

Это скорее взаимодоплняющие языки. Мне бы наверное очень хотелось Clojure на EVM.

В той табличке "this language has a high-quality implementation" - думаю не особо правильно говорить такое про кложурь, у которой в компиляторе даже тестов нету (и патчи они принимают убирая оттуда тесты). Просто кложурь маленькая и поэтому багов меньше.

Наверное, это их способ борьбы с багами — делать ее маленькой, разве нет? Отличный способ, один из лучших.

Не, кложура тоже хороший язык, я люблю такое. Меня смущают только скобочки (мозг никак не может к этому привыкнуть) и плохой REPL (sic! по сравнению со скаловским кложуровский REPL — хтоничное говно, а емакс я не люблю жгучей нелюбовью).

без темы (Анонимно) Развернуть
(Анонимно)
Существует .NET порт clojure, правда он еще сырой.

(Анонимно)
tonsky А какую IDE ты используешь для Clojure? Я тут тоже недавно решил посмотреть на этот язык, с виду все нравится, хочется какой-нибудь аналог среды разработки для Java, чтобы с Javadoc, code completition и т.д. Смотрел плагин для Intellij Idea - La Clojure, но там видимо совсем все печально.

Sublime Text 2, но мне как раз не хочется автодополнения, доки в браузере.

Но в конечном итоге все всё равно приходят к Емаксу.

без темы (Анонимно) Развернуть
без темы (Анонимно) Развернуть
>static vs dynamic typing
>компилятор найдет больше ошибок
>но зато писать дольше — за это время можно и юнит-тест наговнякать
"но зато писать дольше" - имхо миф, типы дают хоть какую-то документацию, разбираться в коде гораздо проще, из моего опыта в пару месяцев на лиспе и на руби не заметил никакого ускорения относительно жабы с нормальным иде и тем более скалы
"за это время можно и юнит-тест наговнякать" - вот интересное исследование http://evanfarrer.blogspot.com/2012/06/unit-testing-isnt-enough-you-need.html

  • 1