Информация об изменениях

Сообщение Re[7]: [Этюд] Минутка WTF от 27.03.2016 16:08

Изменено 27.03.2016 16:10 rameel

Здравствуйте, -n1l-, Вы писали:

N>Ок, круто, но раз поле — readonly, то значит его значение можно задать в статическом конструкторе.


Можно.

N>Тут мы видим задается значение не в статическом конструкторе.


И там и там.

N>Так в чем проблема?


Я обескуражен, если честно. Есть код, есть результат работы кода. Неужели не видно?

Проблема (проблема ли?) в том, что джит скомпилировал метод CaseB с ридонли-полем, обращаясь с ней как с константой, используя на момент компиляции значение присвоенное в статическом конструкторе. Соотвественно, когда значение поля изменяется, на результат работы метода это уже никак не сказывается.
// Выполнили...
A: Not set
B: Not set
C: Not set

// Поменяли значение
// Проверяем, что, то что нужно изменило свое значение
A/B/C set? False, True, True

// Еще раз вызываем методы...
A: Not set
B: Not set  <-- здесь видим, что метод никак не отреагировал на изменение поля
C: Set      <-- здесь обычное поле


Done
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[7]: [Этюд] Минутка WTF
Здравствуйте, -n1l-, Вы писали:

N>Ок, круто, но раз поле — readonly, то значит его значение можно задать в статическом конструкторе.


Можно.

N>Тут мы видим задается значение не в статическом конструкторе.


И там и там.

N>Так в чем проблема?


Я обескуражен, если честно. Есть код, есть результат работы кода. Неужели не видно?

Проблема (проблема ли?) в том, что джит скомпилировал метод CaseB с ридонли-полем, обращаясь с ней как с константой, используя на момент компиляции значение присвоенное в статическом конструкторе. Соответственно, когда значение поля изменяется, на результат работы метода это уже никак не сказывается.
// Выполнили...
A: Not set
B: Not set
C: Not set

// Поменяли значение
// Проверяем, что, то что нужно изменило свое значение
A/B/C set? False, True, True

// Еще раз вызываем методы...
A: Not set
B: Not set  <-- здесь видим, что метод никак не отреагировал на изменение поля
C: Set      <-- здесь обычное поле


Done
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>