Информация об изменениях

Сообщение Re: принципиальные отличия module class от 16.07.2023 18:34

Изменено 16.07.2023 18:51 Эйнсток Файр

Re: принципиальные отличия module class
Р>значить любой класс это модуль?

К классу можно применить операцию "инстанциация", при этом в куче будет выделена память под переменные класса, инициализирована указателем на таблицу виртуальных методов и прочим RTTI, и возвращёт указатель на неё (и, возможно, будет вызыван "конструктор").
То, что получится, называется "объект". И самое главное, что таких объектов можно создать миллионы (если памяти хватит).

Разумеется ещё есть обратная операция "деструкция", про которую спрашивают в форуме "политика", но это неважно.

А у модуля нет операции "инстанциация".

Операция же "загрузка" есть и у класса и у модуля, это верно. В этот момент выполняемый код класса или модуля перемещается из внешней памяти в оперативную (и, возможно, происходит инициализация статических переменных, или вызов статического конструктора).

Таким образом, класс может обладать качествами модуля (например в Java, когда загружается по RMI). Но возможно у модулей есть что-то ещё, другие качества, которых нет у класса. В этом случае чтобы смоделировать это, надо будет ввести ещё одно понятие, базовое и для класса и для модуля.
Re: принципиальные отличия module class
Р>значить любой класс это модуль?

К классу можно применить операцию "инстанциация", при этом в куче будет выделена память под переменные класса, инициализирована указателем на таблицу виртуальных методов и прочим RTTI, и возвращёт указатель на неё (и, возможно, будет вызыван "конструктор").
То, что получится, называется "объект". И самое главное, что таких объектов можно создать миллионы (если памяти хватит).

Разумеется ещё есть обратная операция "деструкция", про которую спрашивают в форуме "политика", но это неважно.

А у модуля нет операции "инстанциация".

Операция же "загрузка" есть и у класса и у модуля, это верно. В этот момент выполняемый код класса или модуля перемещается из внешней памяти в оперативную (и, возможно, происходит инициализация статических переменных, или вызов статического конструктора).
(и, возможно, существует парная операция "выгрузка", но в core выгружать ассембли стало труднее, чем было в mono)

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