Scala и модель памяти Java

Модель памяти Java (начиная с 1.5) обработки final поля по-другому к не -final поля. В частности, обеспечил this ссылка не выходит во время конструкции, пишет в final поля в конструкторе, как гарантируют, будут видимы на других потоках, даже если объект будет сделан доступным для другого потока через гонку данных. (Записи к не -final поля, как гарантируют, не будут видимы, поэтому при неподходящей публикации их другой поток видел их в частично созданном состоянии.)

Есть ли любая документация относительно того, как/если компилятор Scala создает final (а не не -final) поддержка полей для классов? Я просмотрел спецификацию языка и искал сеть, но не могу найти категорические ответы. (В сравнении @scala.volatile аннотация документируется для маркировки поля как volatile)

13
задан Ben Lings 17 March 2010 в 12:55
поделиться

3 ответа

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

Проекция Scala в JVM не покрывается спецификацией языка.

4
ответ дан 2 December 2019 в 01:31
поделиться

Он создает поле final, когда вы объявляете что-то как val. Все, чьи ссылки могут быть изменены, например, var, не может (очевидно) быть окончательным ниже.

Это означает, что классы case также содержат конечные поля (поскольку аргументы конструктора класса case неявно vals)

3
ответ дан 2 December 2019 в 01:31
поделиться

Я зарегистрировал ошибку документации для этого в системе Scala bug .

2
ответ дан 2 December 2019 в 01:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: