4.7Kпросмотров
84.1%от подписчиков
19 декабря 2025 г.
📷 ФотоScore: 5.2K
CoreCLR в Unity - это круто🫡 Ты написал программу на C#, скомпилировал, получил .exe. Запускаешь — а Windows говорит "requires .NET Runtime". Почему? Потому что C# компилируется не в машинный код, а в IL. Windows не умеет его исполнять напрямую. Нужен "движок исполнения" — runtime, который ты устанавливаешь отдельно (или он идёт bundled с приложением). Runtime берёт IL и превращает в работающую программу. Он определяет как каждый объект размещён в памяти, когда эта память освобождается, как вызываются виртуальные методы, как работают generics. 🔸Ключевые компоненты ▫️ Type System — хранит информацию о типах в памяти. Layout объекта: сначала Object Header (индекс SyncBlock для lock/hash), затем указатель на MethodTable. Пример: obj is IMyInterface. Runtime берёт MethodTable объекта (первое поле после header), смотрит в Interface Map — массив интерфейсов которые тип реализует. Если интерфейс в списке — true. Для классов ещё проще: проход по цепочке Parent MethodTable. Всё это O(1) или O(глубина наследования). ▫️ Virtual Machine (Execution Engine) — сердце runtime. Управляет потоками, загрузкой типов, виртуальными вызовами, координирует все подсистемы ▫️ JIT Compiler — компилирует IL в машинный код ▫️ Garbage Collector — управляет памятью, решает когда освобождать объекты ▫️ Interop — мост между managed и native кодом 🔸Почему это важно для Unity. Domain Reload. Меняешь скрипт — Unity перезагружает весь managed домен. Выгружает ВСЕ сборки, пересоздаёт ВСЕ типы. На большом проекте это десятки секунд после каждого изменения. CoreCLR предоставляет AssemblyLoadContext (ALC) — механизм изоляции сборок. Как это работает: 🔹Default ALC загружает framework и core assemblies — они живут всё время 🔹Custom ALC может загружать пользовательские сборки изолированно 🔹Collectible ALC позволяет выгружать сборки когда они больше не нужны Т.е. вместо "выгрузить всё и загрузить заново" можно: Cоздать новый ALC → загрузить изменённую сборку → переключить ссылки → выгрузить старый ALC. Framework, Unity assemblies, неизменённые скрипты остаются на месте. 🔻 Вот и 1 пункт почему переход на CoreCLR это круто - время Domain Reload может снизится в десятки или сотни раз, что == увеличению скорости итерации 😎 Дальше — как устроены Mono, IL2CPP и CoreCLR изнутри. Ставь 👍 если тебе заходит такого рода контент! Ты знаешь кому переслать эту статью 💪 #unite2025@UniArchitect #проект_в_разработке@UniArchitect
4.7K
просмотров
2431
символов
Да
эмодзи
Да
медиа

Другие посты @UniArchitect

Все посты канала →
CoreCLR в Unity - это круто🫡 Ты написал программу на C#, ск — @UniArchitect | PostSniper