Подтвердить что ты не робот

Scala как новая Java?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

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

Комбинация книг "Программирование в Scala" и Дэвида Поллака "Начало Scala" хороша для изучения языка, а вторая - менее академической.

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

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

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

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

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

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

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

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

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

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

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