Являются ли все неизменные структуры данных в Scala постоянными? Если нет, то какие из них, а какие нет? Каковы поведенческие характеристики тех, которые являются постоянными? Кроме того, как они сравниваются с постоянными структурами данных в Clojure?
Стойкие структуры данных в Scala
Ответ 1
Scala неизменяемые структуры данных являются постоянными, в том смысле, что старое значение поддерживается операцией "update". На самом деле, я не знаю разницы между неизменными и стойкими; для меня два термина - псевдонимы.
Две из Scala 2.8 неизменяемых структур данных - это векторы и хэш-попытки, представленные как 32-арные деревья. Они были первоначально разработаны Филом Багвелл, который работал с моей командой в EPFL, затем был принят для Clojure и теперь, наконец, принят для Scala 2.8. Реализация Scala разделяет общий корень с реализацией Clojure, но, конечно, не является его портом.
Ответ 2
Пожалуйста, взгляните на эти превосходные статьи Даниэля Спивака:
http://www.codecommit.com/blog/scala/implementing-persistent-vectors-in-scala
http://www.codecommit.com/blog/scala/more-persistent-vectors-performance-analysis
Он также ссылается на реализацию Clojure.
Ответ 3
Список, вектор, HashMap и HashSet сохраняются на Scala 2.8. Существуют и другие постоянные структуры данных, но они охватывают все основные виды использования, я не уверен, что есть какие-то моменты для перечисления их всех.
Ответ 4
В последней части вашего вопроса я помню, как Rich Hickey упоминал в презентации, что структуры данных Clojure перенесены на Scala. Кроме того, Майкл Фогус упоминает о планах Scala 2.8 принять некоторые из структур данных Clojure в это интервью.
Извините, это так мало деталей... Я не уверен, что такое статус на вышеупомянутых планах Scala 2.8, но я вспомнил, что Рич и Майкл упоминали об этом и подумали, что это может быть интересно для вас для google, если вы заинтересованы.