Какие преимущества у Scala перед Java8?
=========================================

 Здравствуйте!  

  

Вопрос к специалистам по Java и Scala. Меня интересует, есть ли у Scala ощутимые преимущества перед анонсированной Java8? Я 8 лет работал в основном с C/C++, сейчас хочу выучить новый для себя язык программирования. Основная цель — разминка для мозга и освоение функционального программирования, вторичная цель — использование полученных знаний для разработки серверной части приложения (pet project). Очень заинтересовала Scala, но возник вопрос — будет ли Scala актуальна после выхода Java8? Не хотелось бы вкладывать силы в изучение технологии, которая может потерять свои преимущества через несколько лет.  

  

Спасибо за ваши ответы. 

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

Scala — язык с сильной ФП-составляющей, в Java никогда этого не будет, и лямбды тут не помогут. 

 если вас интересует чисто разминка мозга и изучение новой парадигмы (ФП), то лучше освойте Хаскел. Правда, при этом придётся забыть про вашу вторичную цель.   

Освоение чисто Джавы не очень приблизит вас к пониманию ФП, но зато в работе применить вы сможете с большим успехом. 

 Java 8 не будет являться функциональным ЯП, изменения происходят очень консервативно (наверно это в чём то неплохо). Одно из нововведений J8 это функциональный стиль работы с коллекциями (и некоторыми другими элементами стандартной библиотеки) и более удобный синтаксис записи лямба функций.  

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

Если решите изучать scala, то рекомендую лекции по scala на coursera, которые читает Мартин Одерски, автор scala: <https://www.coursera.org/course/progfun> 

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

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

Краткое введение в Erlang [www.insight-it.ru/programmirovanie/erlang/osnovy-erlang-sintaksis-i-punktuaciya/](http://www.insight-it.ru/programmirovanie/erlang/osnovy-erlang-sintaksis-i-punktuaciya/) 

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

 В некоторых вещах компилятор scala правильнее работает, избавляя от костылей java байткод.  

А еще, когда нибудь scala начнет компилиться в CLR.  

Java это хорошо, но мне больше нравится scala. Переехать со scala на java можно будет достаточно легко (Синтаксис у java ближе к c++) 

 В clojure гуглогруппе ежедневно по +\- 100 сообщений. Судя по этому можно отметить, что он Очень активно развивается…  

+ куча появляющихся видео туториалов. + emacs, в котором предполагается разработка и его emacs lisp(который очень д.быть похож на clojure) — что само по себе преимущество. :) Есть ещё [такая вот фенечка](http://clojurescriptone.com/), которая возможно в перспективе будет удобнее того же coffee-script'а, для работы с JS. Ну и это — полностью функциональный я\п. 

 Я бы предложил вам добавить в список для рассмотрения Ocaml или F# (по сути это почти один язык)  

- оба этих языка похожи на Scala, тем, что совмещают FP и OOP да и в целом сильно похожи, есть даже вот такое сравнение вместе с haskell: [Languages with Type Inference: OCaml, F#, Scala, H...](http://hyperpolyglot.org/ml#var-expr)  

- оба в неплохо развиваются в последнее время.  
  

Но в отличии от скалы эти языки намного более лаконичны и просты, а в отличии от хаскела там при необходимости можно применять привычные методы работы.  
  

Про тягости выбора рекомендую почитать вот это:  
[Replacing Python: Candidates](http://roscidus.com/blog/blog/2013/06/09/choosing-a-python-replacement-for-0install/)  
 [Replacing Python: Second Round](http://roscidus.com/blog/blog/2013/06/20/replacing-python-round-2/)  
  

Clojure, Common Lisp, Scheme - я бы предложил оставить на потом тк в них нет мощной системы типов, разве, что можно вскользь познакомится с общими принципами лиспов тк не мало статей где базовые принципы FP рассматриваются на примере scheme.  

Если судить по irc каналам Clojure сейчас дико популярна, больше чем скала примерно на уровне Haskell. 

 Pattern matching, лучшая работа с коллекциями, REPL, развитая система типов, компактный синтаксис, отсутствие необходимости лишний раз писать 'return'.  

Из недостатков - более сложный рефакторинг кода (паттерны еще не очень проработаны).