Отсутствие сторонних библиотек мешает вам использовать Scala? - PullRequest
3 голосов
/ 02 сентября 2010

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

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

1) открытия соединения - java.net.URL

2) парсинга HTML (TagSoup - потому что обычный парсер XML не будет обрабатыватьнаиболее плохо сформированный HTML)

3) Индексировать текст (Lucene)

Учитывая, что мне пришлось полагаться на библиотеки Java, чтобы выполнить большую часть тяжелой работы, мне было интересно, если этостоило мне использовать Scala для начала, кроме как в качестве учебного упражнения.Отчасти это было связано с тем, что для отображения между ними потребовалось дополнительное умственное усилие, например, неясно интуитивно понятно, что такое тип байта Scala [], поскольку в Scala все является объектом.Именно эта дополнительная интеллектуальная обработка может сделать процесс немного неуклюжим.

Кто-нибудь еще считает, что меньшее количество сторонних библиотек (по сравнению с Java) является препятствием для использования Scala в коммерческих проектах?

если вы можете вызывать существующие библиотеки Java, имеет ли это какое-то значение или затрудняет необходимость охватить два разных языка в кодовой базе?

Ответы [ 3 ]

12 голосов
/ 02 сентября 2010

Я не совсем понимаю вашу озабоченность. Библиотека Java обычно представляет собой файл .jar (сжатый набор файлов .class). Что вы ожидаете от библиотеки Scala? Ну, это будет сжатый набор файлов .class. Оба языка скомпилированы в байт-код Java! Итак, чтобы ответить на ваши вопросы:

Кто-нибудь еще считает, что меньшее количество сторонних библиотек (по сравнению с Java) является препятствием для использования Scala в коммерческих проектах?

Нет, не совсем.

если вы можете вызывать существующие библиотеки Java, имеет ли это значение, или необходимость охватить два разных языка в кодовой базе усложняет задачу?

Если вы рассматриваете java-библиотеку как скомпилированный файл .jar, вам не придется использовать два разных языка.


Редактировать: Конечно, в Scala очень богатая система типов, которая не позволяет в полной мере использовать скомпилированные файлы классов. Напротив, огромное количество полезных библиотек, доступных в формате байт-кода Java, вероятно, делает Scala более привлекательной, чем другие новые (читайте современные) языки.

5 голосов
/ 02 сентября 2010

Я рекомендую эту статью (и шаблон):

Pimp my Library

Всякий раз, когда библиотека Java имеет интерфейс, который немного сложен в Scala,это отличный способ сделать его более удобным и сделать ваш код более элегантным.Вот очень простой пример.Я хочу все время использовать в своем коде симпатичный принтер Scala XML для возврата красиво отформатированного XML.Это нормальный способ сделать это:

class Service {
val pp = new scala.xml.PrettyPrinter(80,2)
def content = 
  pp.format(<foo><bar>{something()}</bar></foo>)
}

однако, так как я делаю это все время, я добавляю это в свой пакет

import scala.xml.Elem

object PrettyXml {
  val pp = new scala.xml.PrettyPrinter(80,2)
}

trait PrettyXml {
  case class Formatted(xml:Elem) { 
    def pretty = PrettyXml.pp.format(xml) 
  }
  implicit def toFormatted(xml:Elem) = Formatted(xml)
}

и теперь я могу заменить свой исходный код на

class Service extends PrettyXML {
  val pp = new scala.xml.PrettyPrinter(80,2)
  def content = 
    <foo><bar>{something()}</bar></foo> pretty
}

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

4 голосов
/ 02 сентября 2010

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

  1. Без обширной инфраструктуры библиотек Java у большинства людей было бы очень мало практических причин использовать Scala.Scala - прекрасный язык с некоторыми удивительными функциями, но если бы вам приходилось изобретать велосипед каждый раз, когда вам нужно было сделать что-то большое, никто бы не стал беспокоиться.
  2. Доступ к нативным библиотекам Java из Scala немного более приятен, чем доступ к библиотекам Java из Java, но незначительно.Проблема здесь в том, что нативные библиотеки Java являются значительно более низкоуровневыми, чем либо библиотеки, написанные изначально в Scala, либо хорошие оболочки Java-библиотек Scala.Нативные библиотеки Java, как правило, завалены интерфейсами с одним методом (которые должны были быть функциями), слегка документированными обнуляемыми аргументами или возвратами (что должно было быть Option), ненужными конструкциями параллельных классов или «помощниками» (которые должны были быть признаками),Свернутые вручную не совсем стандартные итераторы, управление ресурсами, требующими попробовать блок (из-за отсутствия замыканий) и сигнатуры типов (особенно с библиотеками до Java-1.5), которые выглядят довольно грубо.Неудивительно, что программисты Scala считают библиотеки Java «необходимыми для выполнения работы», а не тем, чем вы действительно хотите манипулировать.
  3. С помощью обертывания или сутенерства на самом деле довольно легко взять нативную библиотеку Java исделать его почти таким же радостным для использования как нативная библиотека Scala.Я ожидаю, что в ближайшем будущем станут доступны просто великолепные адаптеры Scala для большинства крупных корпоративных библиотек.
...