Scala как новая Java?
=====================

Я только начал исследовать Scala в свободное время.

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

Помимо изучения нового языка, каковы недостатки перехода на Scala?

 что вы должны быть готовы к тому, что Scala будет немного грубоватой:

you'll get the odd cryptic Scala compiler internal error
the IDE support isn't quite as good as Java (neither is the debugging support) 
there will be breaks to backwards compatibility in future releases (although these will be limited) 

Вы также должны рискнуть, что Scala как язык потерпит неудачу.

Это сказало,**I don't think you'll look back**! Мой опыт в целом положительный; IDE пригодны для использования, вы привыкаете к тому, что означают загадочные ошибки компилятора, и, хотя ваша кодовая база Scala мала, разрыв с обратной совместимостью не является большой проблемой.

Это того стоит`Option`,monad функциональность коллекций,closures,actors модель, экстракторы, ковариантные типы и т. д. Это отличный язык.

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



Размер сообщества небольшой.
Поддержка IDE пока отсутствует.

В противном случае это хорошо.  

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



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

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

Groovy на Grails был моим следующим портом захода. Я должен сказать, что мне это нравится, но он страдает от тех же проблем динамической типизации, что и ROR. Не поймите меня неправильно, я не опускаю Grails, потому что это отличная структура, и я все равно буду ее использовать. У каждого свое место ИМО.

Затем я запрыгнул на Scala и теперь создал гибридное приложение на основе Scala и Spring MVC. Поначалу работать со Scala сложно, но это становится проще и продуктивнее, чем больше времени вы вкладываете в него. Я достиг переломного момента, когда теперь я хочу потратить время и на Лифт.

Сочетание «Программирование в Scala» и Дэвид Поллак "Начинающая Скала"; Книги хороши для изучения языка, последний с меньшей академической склонностью.

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

Я думаю, что дальнейшая работа по улучшению интеграции / упаковки Java API даст Scala импульс, необходимый для завоевания большего числа подписчиков. Базовая интеграция уже есть, но я думаю, что ее можно немного улучшить.

Да, поддержка IDE есть, но она является базовой на данный момент. Мощной рефакторинговой поддержки Intellij пока нет, и я очень по ней скучаю. Поддержка компилятора + IDE с набором других плагинов еще не закончена. Иногда я получаю очень странные внутренние ошибки компилятора, вызванные тем, как Scala работает с расширением JDO для механизма приложений Goggle. Однако это мелочи, которые можно легко исправить. Ранняя адаптация новых технологий и языков всегда сопровождается небольшой болью. Но эта боль может принести большое удовольствие в будущем.

Если посмотреть на возможности Scala по сравнению с ранней Java, то впереди ее. Когда я перешел с C ++ на Java, JVM еще не была готова в отношении масштабируемости. Раньше было много странных сбоев и прожогов дампов ядра JVM в разных ОС. Все это теперь исправлено в Java, и JVM отлично работает. Scals работает в JVM, поэтому он получил огромное преимущество в интеграции с родной платформой. Это стоит на плечах гигантов!

После многих лет создания и поддержки корпоративных приложений я голосую за язык, в котором компилятор может отлавливать большинство нефункциональных ошибок до того, как будут созданы даже модульные тесты. Мне нравится проверка типов в сочетании с мощью функционального программирования. Мне нравится тот факт, что я делаю OO ++.

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



 как я обнаружил, что интегрировать Scala с существующими библиотеками Java было не так просто:

Я хотел начать с чего-то более легкого, и, поскольку я думал, что Scala очень хорошо подходит для научных вычислений, я хотел сделать небольшую оболочку вокруг JAMA (библиотеки Java Matrix) ... Мой первоначальный подход заключался в расширении типа Matrix с помощью Класс Scala, а затем перегружаем арифметические операторы и вызываем нативные методы Java, но:

The Matrix class doesn't provide a default constructor (without arguments)
The Scala class needs one primary constructor
I thought one good primary constructor could be the one accepting an Array[Array[Double]] (first thing that sucks, that syntax is much more verbose and hard to read than Double[][])
As far as I know by reading the manuals, the parameters of the primary constructor are also implicitly fields of the class, so I would end with one Array[Array[Double]] in the Scala subclass and another double[][] in the Java superclass, which is pretty redundant.

Я думаю, я мог бы использовать пустой первичный конструктор, который инициализировал суперкласс с некоторыми значениями по умолчанию (например, [[0]]), или просто создать класс адаптера, который использовал бы Jama.Matrix в качестве делегата, но если язык должен быть элегантным и бесшовным, интегрированным с другим, такого не должно происходить.

Это мои два цента.



 что есть какие-либо недостатки. На самом деле изучение нового языка очень полезно для расширения ваших знаний в области программирования. Вы можете получить от Scala такие вещи, как универсальные классы, аннотации отклонений, верхние и нижние границы типов, внутренние классы и абстрактные типы в качестве членов объекта, составные типы, явно типизированные собственные ссылки, представления и полиморфные методы.



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

Many working as developers in the professional community aren't trained and are unwilling to learn how to use a functional language, they won't even give it a go so they can understand why it's a better approach. This means you'll always be fighting an uphill battle getting adoption until it's mandated at the corporate level.

RDBMS integration is still a bit spotty. Plenty of solutions, but nothing that really sticks out as becoming a standard. For me though, this might be an advantage rather than a disadvantage. JPA2 is a mess and causes more issues than problems it solves. Hibernate criteria queries aren't much better.

IDE support is still lagging, but mostly in the area of debugging at this point. Code inspection is doing pretty good (at least in IntelliJ).

You'll never want to write another line of Java again! Likely you'll want to punch a wall or break something when forced back into the awkward syntax of Java.



s the downside to switching over
 to Scala?

**Thinking, thinking, thinking..... nope, there is none :-)**



остью языка. В конце концов, Scala имеет около 5 лет, а Java 5 лет сильно отличалась от своей собственной продолжительности жизни.

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

Lack of extensive tutorials
Inferior quality of the documentation
Non-existing localization of documentation
Native libraries (Scala uses Java or .NET libraries as base for their own)

Другое важное отличие связано с тем, как Sun видел Java и[EPFL](https://en.wikipedia.org/wiki/%C3%89cole_Polytechnique_F%C3%A9d%C3%A9rale_de_Lausanne) видит Скала. Sun рассматривала Java как продукт для привлечения корпоративных клиентов. EPFL рассматривает Scala как язык, предназначенный для того, чтобы быть лучшим языком, чем существующие, в некоторых конкретных аспектах (в основном OOxFunctional интеграция и проектирование системы типов).

Как следствие, когда Sun сделала JVM ледяной стабильной, а Java - полностью обратно совместимой, с очень медленным устареванием и удалением функций (фактически, удалением?), JAR-файлы, созданные в одной версии Scala, вообще не будут работать с другими версиями. (серьезная проблема для сторонних библиотек), и язык постоянно получает новые функции, а также фактически удаляет устаревшие, как и библиотека Scala. История изменений для Scala 2.x, которой, как мне кажется, всего 3 года, впечатляет.

Наконец, из-за всего вышесказанного, поддержка Scala третьей стороной[зарождающийся](https://en.wiktionary.org/wiki/incipient), Но важно отметить, что[JetBrains](https://en.wikipedia.org/wiki/JetBrains), что делаетmoney из продажи[IntelliJ IDEA](https://en.wikipedia.org/wiki/IntelliJ_IDEA) IDE уже довольно давно поддерживает Scala и постоянно совершенствует свою поддержку. Для меня это означает, что существует потребность в поддержке третьей стороны, и поддержка обязательно возрастет.

Я указываю на книжную ситуацию. Год назад на рынке не было книги о Scala. Прямо сейчас есть две или три вводных книги Scalaon the marketпримерно столько же книг должно быть выпущено до конца года, и есть книга об очень важной веб-среде, основанной на Scala,[Лифт](https://en.wikipedia.org/wiki/Lift_%28web_framework%29).

Бьюсь об заклад, мы увидим книгу о[Эсме](https://incubator.apache.org/esme/) не так уж и далеко в будущем, а также книги о Scala и параллелизме. Издательский рынок, очевидно, достиг переломного момента. Как только это произойдет, предприятия будут следовать.