Skip to content

Latest commit

 

History

History
92 lines (87 loc) · 15.7 KB

readme.md

File metadata and controls

92 lines (87 loc) · 15.7 KB

Введение

Эта книга задумана мной как максимально полное описание работы .NET CLR, и частично - .NET Framework и призвана в первую очередь заставить посмотреть читателя на его внутреннюю структуру под несколько другим углом: не так, как это делается обычно. Связано это в первую очередь с утверждением, которое может показаться многим очень спорным: любой разработчик обязан пройти школу C/C++. Почему? Да потому что из высокоуровневых эти языки наиболее близки к процессору, и программируя на них начинаешь чувствовать работу программы сильнее. Однако, понимая, что мир устроен несколько иначе и у нас зачастую нет никакого времени изучать то, чем мы не будем напрямую пользоваться, я и решил написать эту книгу, в которой объяснение всех вопросов идет с более глубокой чем обычно - позиции и с более сложными или же попросту альтернативными примерами. Которые, помимо своей стандартной миссии - на самом простом коде показать как работает тот или иной функционал, сделать реверанс в альтернативную реальность, показав что все сильно сложнее чем может показаться изначально. Зачем? Чтобы и у вас возникло чувство понимания работы CLR до последнего винтика

Содержание

  1. Часть 1. Память
    1. Раздел 1. Введение в управление памятью
      1. Общие слова
      2. Введение в управление памятью
        1. Пара слов перед стартом
        2. Введение в управление памятью
        3. Возможные классификации памяти исходя из логики
        4. Как это работает у нас. Обоснование выбора архитекторов
        5. Выводы
      3. Стек потока
        1. Базовая структура, платформа x86
        2. Немного про исключения на платформе x86
        3. Совсем немного про несовершенство стека потока
        4. Большой пример: клонирование потока на платформе х86
      4. Время жизни сущности
        1. Ссылочные типы
          1. Общий обзор
          2. В защиту текущего подхода
          3. Предварительные выводы
      5. RefTypes, ValueTypes, Boxing & Unboxing
        1. Ссылочные и значимые типы данных
        2. Копирование
        3. Переопределяемые методы и наследование
        4. Поведение при вызове экземплярных методов
        5. Возможность указать положение элементов
        6. Разница в аллокации
        7. Особенности выбора между class/struct
        8. Базовый тип - Object и возможность реализации интерфейсов. Boxing
        9. Nullable<T>
        10. Погружаемся в boxing ещё глубже
        11. Что если хочется лично посмотреть как работает boxing?
        12. Почему .NET CLR не делает пуллинга для боксинга самостоятельно?
        13. Почему при вызове метода, принимающего тип object, а по факту - значимый тип нет возможности сделать boxing на стеке, разгрузив кучу?
        14. Почему нельзя использовать в качестве поля Value Type его самого?
      6. Шаблон Disposable
        1. IDisposable
        2. Вариации реализации IDisposable
        3. SafeHandle / CriticalHandle / SafeBuffer / производные
          1. Срабатывание finalizer во время работы экземплярных методов
        4. Многопоточность
        5. Два уровня Disposable Design Principle
        6. Как ещё используется Dispose
          1. Делегаты, events
          2. Лямбды, замыкания
        7. Защита от ThreadAbort
        8. Итоги
      7. Финализация
      8. Выводы
    2. Раздел 2. Практическая
      1. Memory, Span
        1. Span<T>, ReadOnlySpan<T>
          1. Span<T> на примерах
          2. Правила и практика использования
          3. Как работает Span
          4. Span<T> как возвращаемое значение
        2. Memory<T> и ReadOnlyMemory<T>
          1. Memory<T>.Span
          2. Memory<T>.Pin
          3. MemoryManager, IMemoryOwner, MemoryPool
        3. Производительность
    3. Раздел 3. Подробности реализации GC
      1. Выделение памяти под объект (Только наговорен текст)
      2. Введение в сборку мусора (Только наговорен текст)
      3. Фаза маркировки (Только наговорен текст)
      4. Фаза планирования (Только наговорен текст)
      5. Фазы Sweep/Collect (Только наговорен текст)
      6. Выводы по менеджменту памяти и работе над производительностью (Только наговорен текст)
    4. Раздел 4. Структура объектов в памяти
      1. Структура объектов в памяти
    5. Раздел 5. Вне порядка повествования
      1. Шаблон Lifetime
  2. Часть 2. Поток исполнения команд
    1. Раздел 1. Потоки
      1. Введение в потоки
      2. Планирование потоков
      3. Thread и ThreadPool
      4. SynchronizationContext
    2. Раздел 2. Исключительные ситуации
      1. Введение в исключительные ситуации
      2. Архитектура исключительной ситуации
      3. События об исключительных ситуациях
      4. Виды исключительных ситуаций

Лицензия

Находится в файле LICENSE