Открыть сервисСервис

Рант — термин программирования

Рант (англ. runt) — наименьший объект в системе объектно-ориентированного программирования Smalltalk, реализующий модель «всё есть объект». В оригинальной реализации Smalltalk-80 рант являлся единственным объектом в системе, не имевшим предка, и служил корнем иерархии классов. Термин также применяется в контексте виртуальных машин Java (JVM), где «runt» обозначает минимальный объект или структуру данных, используемую при инициализации среды выполнения.

Происхождение термина

Слово «runt» в английском языке означает «карлик», «маленькая особь». В контексте программирования термин закрепился в сообществе Smalltalk в конце 1970-х — начале 1980-х годов, когда команда Xerox PARC разрабатывала первые версии среды Smalltalk. Рант описывался как «самый маленький объект» — объект, который не имел внутреннего состояния в привычном смысле и служил базовой точкой отсчёта для системы типов.

Рант в Smalltalk

В архитектуре Smalltalk-80 рант (в реализациях — класс ProtoObject либо корневой класс Object в зависимости от версии) занимает вершину иерархии классов. Все остальные классы прямо или косвенно наследуются от него. Рант обеспечивает минимальный набор протоколов (сообщений), доступных любому объекту без исключения: сравнение (==, ~~), получение класса (class), проверка вида (isKindOf:), копирование (basicCopy) и отладочные операции.

Особенностью ранта является то, что он существует до полной инициализации системы: при загрузке образа Smalltalk рант создаётся одним из первых объектов, поскольку без него невозможно создать ни один другой класс. В силу этого его реализация минимальна и не зависит от остальной инфраструктуры.

В современных диалектах Smalltalk (Squeak, Pharo, GNU Smalltalk) корневой класс часто называется ProtoObject — подчёркивается, что это «прото-объект», существующий до построения полноценной объектной системы. Сообщения, которые понимает рант, реализуются напрямую в виртуальной машине, без обращения к таблицам методов в привычном виде.

Рант в контексте JVM

В среде Java Virtual Machine под термином «runt» иногда описывают минимальные внутренние объекты, используемые при начальной загрузке виртуальной машины — например, корневые структуры класса java.lang.Object и java.lang.Class, которые создаются до полной инициализации стандартной библиотеки. В отличие от Smalltalk, в Java этот термин не является устоявшимся техническим понятием и чаще встречается в учебной и обзорной литературе.

Связь с концепцией минимального объекта

Идея «минимального объекта» или «нулевого объекта» восходит к работам исследователей Xerox PARC и нашла отражение в ряде объектно-ориентированных языков:

  • в Smalltalk рант — корень иерархии;
  • в Objective-C корневым классом является NSObject;
  • в Ruby корневым классом является Object, а выше него стоит BasicObject, содержащий минимальный набор методов;
  • в JavaScript все объекты прямо или косвенно связаны с Object.prototype.

Концепция ранта важна для понимания модели динамической диспетчеризации сообщений: даже если объект не наследует ни от одного пользовательского класса, он обязан понимать хотя бы минимальный протокол, определённый рантом.

Критика и альтернативы

Некоторые исследователи отмечают, что жёсткая привязка к единому корневому классу ограничивает гибкость систем: не все объекты естественно наследуют общий интерфейс. В языках, ориентированных на протоколы и типы (например, в Go с его неявными интерфейсами), идея единого ранта отсутствует. Тем не менее в Smalltalk-сообществе рант остаётся фундаментальным элементом модели, обеспечивающим целостность системы типов.

Примечания

Термин «runt» не следует путать с понятием «runt-time» (время выполнения) — это ошибка калькирования английского слова runtime.

Источники

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru