Size: a a a

2021 December 12

M(

MIT/Yardanico (alt) in ru.nim.talks
type
 SomeObjectObj = object
   data: ptr UncheckedArray[char]
 SomeObject = ref SomeObjectObj

proc `=destroy`(x: var SomeObjectObj) =
 if x.data != nil:
   dealloc(x.data)
   x.data = nil

proc newSomeObject: SomeObject =
 new(result)
 result.data = cast[ptr UncheckedArray[char]](alloc(256))

proc main =
 var test = newSomeObject()
 var other = test
 test.data[0] = 'a'
 echo other.data[0]

main()
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
т.е. когда счётчик ссылок = 0, вызывается деструктор
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
этот if нужен в деструкторе, потому что по текущей спеке и по текущей реализации он может вызываться более 1 раза для одного и того же объекта
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
источник

A

Alexander in ru.nim.talks
А с nim может есть способ делать "неполные" функции? забыл название.

Ну типа arr.map(split(,","))  а не писать mapIt(it.split(","))
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Неполные функции — это партиалы 🤔
И вроде чёт было для этого
источник
2021 December 13

З/

Зелёный /4Y/ in ru.nim.talks
Может кто кратко пояснить за написание собственных прагм? А то я ни черта не понял чего-то :с
источник

З/

Зелёный /4Y/ in ru.nim.talks
Точнее как.. вроде понял, но не понял
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Переслано от Денис 🐍 (жду резы эк...
В проке:

case obj.kind
of someKind:
 if obj.fieldA:
   ...
 else:
   ...
...
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Переслано от Денис 🐍 (жду резы эк...
The fields ... cannot be initialized together, because they are from conflicting branches in the case object.
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Переслано от Денис 🐍 (жду резы эк...
Прока создаёт объект
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Переслано от Денис 🐍 (жду резы эк...
Тип вариативный
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Переслано от Денис 🐍 (жду резы эк...
И в if/else создаются разные варианты
источник

f

for(int c; (c = getc... in ru.nim.talks
Все сложно, но если упростить то
- можно написать свою прагму в виде макроса, их можно вешать на типы и процедуры при объявлении, они будут работать как просто макросы, т.е. получать на вход АСТ
- можно объявить шаблон с .pragma., он используется как пометка на полях, потом можно кидать метаданные на типах
источник

f

for(int c; (c = getc... in ru.nim.talks
Модно сделать {.pragma foo: bar, Baz.}, и писать потом foo, это просто алиас для сокращённой формы записи
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Ток одно важное "но"
источник

f

for(int c; (c = getc... in ru.nim.talks
Для первого варианта ничего особенного делать не надо, любой макрос можно написать как proc test() {.mymacro.}
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
Я тут в примере сделал с кайндами, а у мя там проверка строки
источник

f

for(int c; (c = getc... in ru.nim.talks
Вопрос в том как исправить ошибку?
источник

Д🥶

Денис 🐍 (жду резы эк... in ru.nim.talks
+
источник