Size: a a a

2021 February 16

G

Gabben in ru.nim.talks
да я не говорил, что это баг
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
Ну я просто
источник

G

Gabben in ru.nim.talks
мне уже автор очень доступно объяснил - "просто подумай"))
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
Просто начинай юзать arc :))
источник

VB

Vladimir Berezenko in ru.nim.talks
я не вдуплил почему второе ошибка
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
Vladimir Berezenko
я не вдуплил почему второе ошибка
Потому что старый gc не может безопасно переинициализировать object variant при изменении kind
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
arc/orc могут
источник

G

Gabben in ru.nim.talks
MIT/Yardanico (alt)
Просто начинай юзать arc :))
ну может когда я проект допилю, ORC уже станет стандартным, действительно)
источник

VB

Vladimir Berezenko in ru.nim.talks
Ну тут и нет переинициализации варианта. Вариант-то не меняется, лишь инициализируется переменная варианта. Или я что-то не понимаю?
источник

G

Gabben in ru.nim.talks
Vladimir Berezenko
Ну тут и нет переинициализации варианта. Вариант-то не меняется, лишь инициализируется переменная варианта. Или я что-то не понимаю?
есть переинициализация, так как неявно anotherKind задается дефолтное значение
источник

VB

Vladimir Berezenko in ru.nim.talks
И? В чём разница с присвоением значения в любую другую переменную?
источник

G

Gabben in ru.nim.talks
Vladimir Berezenko
Ну тут и нет переинициализации варианта. Вариант-то не меняется, лишь инициализируется переменная варианта. Или я что-то не понимаю?
вариант то меняется, точнее мы "не знаем", но должны учитывать
источник

VB

Vladimir Berezenko in ru.nim.talks
типа
type A = object
 x: int

type B = object
 case v: Variant
 of one:
    x: int
 of two:
   discard

var a  =A()
a.x = 1
var b = B(v: one)
b.x = 2

И вот что, оно внезапно начнёт валиться на b.x = 2? Схерали?
источник

G

Gabben in ru.nim.talks
Vladimir Berezenko
типа
type A = object
 x: int

type B = object
 case v: Variant
 of one:
    x: int
 of two:
   discard

var a  =A()
a.x = 1
var b = B(v: one)
b.x = 2

И вот что, оно внезапно начнёт валиться на b.x = 2? Схерали?
у меня твой условный x это другой вложенный вариант

type B = object
 case v: Variant
 of one:
   case x: Kind
   of ...
   ...
 of two:
   discard
источник

VB

Vladimir Berezenko in ru.nim.talks
а.. да, такое нельзя было.
источник

G

Gabben in ru.nim.talks
хотя я сейчас понял, что в своем случае могу инициализировать варианты литералами
но может вложенные кейсы действительно не нужны :)
источник

f

for(int c; (c = getc... in ru.nim.talks
Нормально и полностью обрабатывать вложенные кейсы в объектах - проще застрелится, и используются они крайне редко
источник

f

for(int c; (c = getc... in ru.nim.talks
Количество краевых случаев просто зашкаливает относительно структуры AST, особоенно если получать его в типизированном виде
источник

f

for(int c; (c = getc... in ru.nim.talks
Так что да, 99.9% случаев они не нужны
источник

G

Gabben in ru.nim.talks
Спасибо)
Осталось накостылить решение для дженериков в типах. Соответствующее RFC чёт не очень активное
источник