Разница между Data_Wrap_Struct и TypedData_Wrap_Struct?

Я оборачиваю структуру C в расширение Ruby C, но я не могу найти разницу между Data_Wrap_Struct и TypedData_Wrap_Struct в документах, в чем разница между этими двумя функциями?

1 ответ

Решение

Это очень хорошо описано в официальной документации.

Тл; др в том, что Data_Wrap_Struct устарела и позволяет устанавливать класс и функции mark/free для обернутых данных. TypedData_Wrap_Struct вместо этого позволяет установить класс, а затем берет указатель на rb_data_type_struct структура, которая позволяет устанавливать более продвинутые параметры для упаковки:

  • Марк / свободные функции, как и раньше, но также
  • внутренняя метка для идентификации упакованного типа
  • функция для расчета потребления памяти
  • произвольные данные (в основном позволяющие оборачивать данные на уровне класса)
  • дополнительные флаги для оптимизации сборки мусора
Другие вопросы по тегам