Size: a a a

2021 June 01

f

for(int c; (c = getc... in ru.nim.talks
template Attr() {.pragma.}
источник

G

Gabben in ru.nim.talks
я генерацию процедур планировал делать через ужасный
implSerializeFor(Kek, Lol, ...)
источник

f

for(int c; (c = getc... in ru.nim.talks
источник

G

Gabben in ru.nim.talks
да-да)
источник

f

for(int c; (c = getc... in ru.nim.talks
Абсолютно идентично. Потом я решил попробовать это все же сделать через дженериг который вызывает макрос с typed аргументом -- пока работает нормально но я постоянну жду какой-то непонятной боли когда оно начнет генерировать невменяемые ошибки изза типов
источник

f

for(int c; (c = getc... in ru.nim.talks
И общей извращенности конструкции
источник

f

for(int c; (c = getc... in ru.nim.talks
there are basically three corners to the triangle of pain.
concepts, statics, and generics.
you mix those together and you are in mratsim territory.  woe be the coder who trespasses therein.

so where does handling types in macros go, in your triangle?

okay, so it's a tetrahedron of pain, wise guy.
источник

G

Gabben in ru.nim.talks
с типами я уже помучался, они просто не выводились, пришлось делать так https://github.com/nim-lang/Nim/issues/16108#issuecomment-732638091
источник

f

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

storeTraits(DocEntry, dekAliasKinds, dekProcKinds, dekStructKinds)
источник

f

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

G

Gabben in ru.nim.talks
я два раза тип паршу, чтобы дженерик вывести :D
источник

VB

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

f

for(int c; (c = getc... in ru.nim.talks
Ну для простых случаев да, это работает, но когда начинаются всякие

enum E = a, b
const c = {a, b}

kind: E
 of c
источник

f

for(int c; (c = getc... in ru.nim.talks
Мне сказали что для типизированного AST пока нет спецификации так как это практически в чистом виде детали реализации
источник

VB

Vladimir Berezenko in ru.nim.talks
я такие успешно игнорирую. :) в моём понимании необходимости сериализации таких извращений - нет.
источник

f

for(int c; (c = getc... in ru.nim.talks
Самый крупный пользователь typed макросов это CPS и они какие-то вещи чистят постепенно
источник

f

for(int c; (c = getc... in ru.nim.talks
Ну конкретно это было

const dekStructKinds* = { dekObject, dekDefect, dekException, dekEffect }

type
 DocEntry* = ref object
   case kind*: DocEntryKind
     # ...
     of dekStructKinds:
       superTypes*: seq[DocId]

     of dekAliasKinds:
       baseType*: DocType


(и еще пять сетов), так что я бы не хотел иметь два места в коде где мне нужно постоянно обновлять эти наборы энумов
источник

f

for(int c; (c = getc... in ru.nim.talks
Т.е. да, можно чуть больше забить на эргономику (что я и хотел сделать в какой-то момент), но все же так лучше
источник

f

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

VB

Vladimir Berezenko in ru.nim.talks
ну я уже сказал что сериализовать юнионы - изврат по большому счёту + дикий перерасход по памяти.
источник