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