Постоянные структуры данных в Scala - PullRequest
23 голосов
/ 24 июня 2010

Все ли неизменяемые структуры данных в Scala сохраняются?Если нет, то какие из них, а какие нет?Каковы поведенческие характеристики тех, которые являются стойкими?Кроме того, как они сравниваются с постоянными структурами данных в Clojure?

Ответы [ 4 ]

53 голосов
/ 24 июня 2010

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

Две из 2.8 неизменяемых структур данных Scala представляют собой векторы и хэш-попытки, представленные в виде 32-разрядных деревьев. Первоначально они были разработаны Филом Багвеллом, который работал с моей командой в EPFL, затем был адаптирован для Clojure, а теперь окончательно принят для Scala 2.8. Реализация Scala имеет общий корень с реализацией Clojure, но, безусловно, не является ее портом.

9 голосов
/ 24 июня 2010

Пожалуйста, посмотрите на эти прекрасные статьи Даниэля Спивака:http://www.codecommit.com/blog/scala/implementing-persistent-vectors-in-scala
http://www.codecommit.com/blog/scala/more-persistent-vectors-performance-analysis

Он также имеет в виду реализацию Clojure.

6 голосов
/ 24 июня 2010

List, Vector, HashMap и HashSet все сохраняются в Scala 2.8. Существуют и другие постоянные структуры данных, но они охватывают все основные области применения, и я не уверен, что есть смысл перечислять их все.

4 голосов
/ 24 июня 2010

В последней части вашего вопроса я помню, как Рич Хики упоминал в презентации, что структуры данных Clojure были перенесены в Scala. Кроме того, Майкл Фогус упоминает о планах Scala 2.8 принять некоторые структуры данных Clojure в этом интервью .

Извините, что так мало подробностей ... Я не уверен, какой статус у вышеупомянутых планов Scala 2.8, но я вспомнил, что Рич и Майкл упоминали об этом, и подумал, что это может быть интересно для вас, чтобы Google ибо если тебе интересно.

...