Оптимизация кода с помощью Scala - PullRequest
5 голосов
/ 20 октября 2010

Какие структуры Scala можно использовать более эффективно, чем в Java, для увеличения скорости выполнения?Я не знаю, возможно ли это, но прояснить мои сомнения:)

Спасибо

Ответы [ 4 ]

9 голосов
/ 20 октября 2010

Аннотация scala @specialized может генерировать несколько версий класса, настроенных на конкретные примитивные типы. Вы можете написать все это на Java, но, вероятно, не хотите.

6 голосов
/ 20 октября 2010

Чтобы расширить ответ Росса, вы можете использовать @specialized для генерации определенных версий коллекции.Например, в Java вы обычно используете fastutil или Apache Primitives для коллекций примитивов.Scala @specialized сгенерирует эти варианты для вас и автоматически их спрячет, например:

class MyLinkedList[@specialized T] (args: T*) {
  // whatever it does
}

Кроме того, актеры облегчают написание параллельных приложений.В 2.9 появятся параллельные коллекции, которые могут применять функции более высокого порядка параллельно между коллекциями, ускоряя любое место, где у вас будет Scala-эквивалент цикла Java (fold, foreach и т. Д.).См. этот доклад ScalaDays , чтобы узнать подробности об этом.

6 голосов
/ 20 октября 2010

Начиная с версии 2.9, библиотека параллельных коллекций должна стать частью стандартного дистрибутива. Это позволит чрезвычайно просто распределить так называемые «неловко параллельные» задачи по нескольким ядрам. Для этого в Java требуется значительно больше усилий.

Как правило, тесты Scala варьируются от умеренно медленнее, чем Java, до немного быстрее, в зависимости от проблемы и методов кодирования.

2 голосов
/ 20 октября 2010

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

...