Связь между безопасностью типов и практичностью сбора мусора - PullRequest
2 голосов
/ 11 января 2011

Какие функции языка программирования C нарушают безопасность типов и запрещают добавление практического сбора мусора в язык? Объясните. Во-первых, я не понимаю взаимосвязи между безопасностью типов и сборкой мусора. Буду признателен, если кто-нибудь сможет мне помочь с этим.

Ответы [ 2 ]

1 голос
/ 11 января 2011

Вы можете делать сборку мусора в C. Это называется консервативная сборка мусора . Хитрость заключается в том, чтобы обрабатывать любые данные, которые выглядят как указатель, как если бы это был фактически указатель, а не восстанавливать память, доступную через них. Есть две проблемы: во-первых, вы не можете перемещать данные (т. Е. Сжатие) из-за неопределенности того, является ли что-то, что похоже на указатель, фактически указателем (поэтому его обновление для указания нового местоположения может привести к повреждению данных ).

Проблема безопасности типов заключается в том, что программист C может сохранить указатель на int, выполнить математические операции с ним, а затем восстановить указатель (как в: ptrdiff_t d = (ptrdiff_t) ptr; ptr = NULL; d += 42; /* GC here would be bad */ d -= 42;). Это скрытие указателя может привести к консервативному сборщик мусора для преждевременного восстановления памяти, которая была доступна только через этот указатель.

0 голосов
/ 11 января 2011

Нет никакой связи между безопасностью типов и сборкой мусора. Например, есть язык Ada (не очень популярный в наши дни), который очень безопасен для типов, но не имеет сборщика мусора. В то же время Javascript является динамическим языком (то есть вообще не обеспечивает безопасность типов), но в большинстве реализаций имеет сборщик мусора.

...