История изменений
Исправление monk, (текущая версия) :
@nogc
И в чём тогда преимущество перед С++? В Racket (или Python) обвязка всегда нормально интегрирует библиотеку и GC.
(define-curses newwin (_fun _int _int _int _int
-> _WINDOW-pointer)
#:wrap (allocator delwin))
гарантирует, что GC автоматически вызовет delwin. В D придётся помнить, какие объекты свои, а какие пришли из сишной библиотеки.
И auto a = «abc» не даст тебе char*. Надо явно писать toStringz(...). И, судя по всему, передать эту строку внутрь сишной библиотеки вообще никак, так как
«When passing a char* to a C function, and the C function keeps it around for any reason, make sure that you keep a reference to it in your D code. Otherwise, it may become invalid during a garbage collection cycle and cause a nasty bug when the C code tries to use it.» (с) https://dlang.org/phobos/std_string.html
В Racket я могу явно указать, что объект будет храниться не в GC:
(define cstring (malloc _byte 6 #"Hello" 'raw))
Исходная версия monk, :
@nogc
И в чём тогда преимущество перед С++? В Racket (или Python) обвязка всегда нормально интегрирует библиотеку и GC.
(define-curses newwin (_fun _int _int _int _int
-> _WINDOW-pointer)
#:wrap (allocator delwin))
гарантирует, что GC автоматически вызовет delwin. В D придётся помнить, какие объекты свои, а какие пришли из сишной библиотеки.
И auto a = «abc» не даст тебе char*. Надо явно писать toStringz(...). И судя по всему передать эту строку внутрь сишной библиотеки вообще никак, так как
«When passing a char* to a C function, and the C function keeps it around for any reason, make sure that you keep a reference to it in your D code. Otherwise, it may become invalid during a garbage collection cycle and cause a nasty bug when the C code tries to use it.» (с) https://dlang.org/phobos/std_string.html
В Racket я могу явно указать, что объект будет храниться не в GC:
(define cstring (malloc _byte 6 #"Hello" 'raw))