LINUX.ORG.RU

История изменений

Исправление 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))