Scala как новая Java? - PullRequest
       20

Scala как новая Java?

34 голосов
/ 09 июля 2009

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

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

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

Ответы [ 8 ]

26 голосов
/ 09 июля 2009

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

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

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

Тем не менее, Я не думаю, что вы оглянетесь назад ! Мой опыт в целом положительный; IDE полезны, вы привыкаете к тому, что означают загадочные ошибки компилятора, и, хотя ваша кодовая база Scala мала, разрыв с обратной совместимостью не является большой проблемой.

Оно того стоит для Option, функциональности монады коллекций, замыканий , актеров модели, экстракторов, ковариантных типов и т. Д. Это классный язык.

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

16 голосов
/ 09 июля 2009

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

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

  • Отсутствие подробных уроков
  • Низкое качество документации
  • Несуществующая локализация документации
  • Собственные библиотеки (Scala использует библиотеки Java или .NET для своих собственных баз)

Другое важное отличие связано с тем, как Sun видит Java, а EPFL видит Scala. Sun рассматривала Java как продукт для привлечения корпоративных клиентов. EPFL рассматривает Scala как язык, предназначенный для того, чтобы быть лучшим языком, чем существующие, в некоторых конкретных аспектах (в основном OOxFunctional интеграция и проектирование системы типов).

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

Наконец, из-за всего вышеперечисленного, поддержка Scala сторонней организацией начальная . Но важно отметить, что JetBrains , который делает деньги от продажи IntelliJ IDEA IDE, поддерживает Scala в течение некоторого времени и сохраняет улучшая свою поддержку. Для меня это означает, что существует потребность в поддержке третьей стороны, и поддержка обязательно возрастет.

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

Бьюсь об заклад, мы увидим книгу о ESME не слишком далеко в будущем, а также книги о Scala и параллелизме. Издательский рынок, очевидно, достиг переломного момента. Как только это произойдет, предприятия будут следовать.

15 голосов
/ 10 июля 2009

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

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

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

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

Комбинация книг "Программирование в Scala" и книг Дэвида Поллака "Beginning 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, но в настоящее время у меня есть мой голос.

3 голосов
/ 22 февраля 2012

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

Мышление, мышление, мышление ..... Нет, их нет: -)

3 голосов
/ 09 июля 2009

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

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

  • Класс Matrix не предоставляет конструктор по умолчанию (без аргументов)
  • Класс Scala нуждается в одном первичном конструкторе
  • Я думал, что одним хорошим первичным конструктором может быть тот, который принимает Array [Array [Double]] (первое, что отстой, это то, что синтаксис гораздо более многословен и труден для чтения, чем Double [] [])
  • Насколько я знаю, читая руководства, параметры первичного конструктора также неявно являются полями класса, поэтому я бы закончил одним Array [Array [Double]] в подклассе Scala и другим double [] [ ] в суперклассе Java, который довольно избыточен.

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

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

3 голосов
/ 09 июля 2009

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

2 голосов
/ 09 июля 2009

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

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

1 голос
/ 31 декабря 2011

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

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

  • Интеграция с СУБД все еще не совсем корректна. Множество решений, но ничто, что действительно не выделяется как становление стандартом. Хотя для меня это может быть преимуществом, а не недостатком. JPA2 - беспорядок и вызывает больше проблем, чем проблем, которые он решает. Запросы критериев гибернации не намного лучше.

  • Поддержка IDE все еще отстает, но в основном на данный момент в области отладки. Проверка кода работает довольно хорошо (по крайней мере, в IntelliJ).

  • Вам больше никогда не захочется писать еще одну строку Java! Скорее всего, вы захотите пробить стену или сломать что-нибудь, когда вернетесь в неловкий синтаксис Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...