Разница между 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
структура, которая позволяет устанавливать более продвинутые параметры для упаковки:
- Марк / свободные функции, как и раньше, но также
- внутренняя метка для идентификации упакованного типа
- функция для расчета потребления памяти
- произвольные данные (в основном позволяющие оборачивать данные на уровне класса)
- дополнительные флаги для оптимизации сборки мусора