Загрузка...

Рихтер Дж. - CLR via C# Конспект

Тема в разделе C# создана пользователем Widness 7 ноя 2022. 332 просмотра

  1. Widness
    Widness Автор темы 7 ноя 2022 279 14 ноя 2017
    Начал перечитывать и конспектировать книгу, решил поделится что успел записать, мейби кому-то надо.

    CLR - Common Language Runtime (общеязыковая среда выполнения)

    Крч, это готовый набор механизмов (типо управлению памятью, исключения, потоки и пр.).

    Некоторые языки, к примеру, такие как C# или С++/CLI юзают ее, то есть код из своего говноситаксиса компилируют в богоудоный код. По сути не важно на чем ты пишешь свое приложение, в конечном итоге оно будет скомпилировано в IL код. Не во всех языках есть такая фича!!!

    Файлы, которые мы скармливаем CLR - PE32/PE32+ (portable executable) (managed module) - сборка assembly.

    Еще эта залупа оснащена (модули) оснащены Data Execution Prevention и Address Space Layout Optimization - че это такое хз? Но это для безопасности.

    Это крч херня, в которой может быть куча управляемых модулей. По сути это и есть управляемый модуль.

    В сборке также есть Манифест, в котором, описаны количество управляемых модулей, прочие файлы, экспортируемые типы.

    Суть ее в том что, можно использовать ее многократно, это вроде безопасно, можно версии разные делать).

    Clr сама найдет нужные зависимости и подянет их (не чудо ли это?).


    Заголовок PE32 - че за файл (Dll, Gui и прочее), временная метка сборки.

    Загаловок CLR - какая версия нужна, метод метаданных, точку входа в программу, расположение и размер: ресурсов, метаданных.

    Метаданные

    IL код

    Метаданные хранят информацию о типах данных, типах данных на которые ссылается код (библиотеки ебанные). Они неразрывно связаны с файлом IL кода (нашего говнокода).

    InteliSense (херня, которая дает подсказки во время написания кода) использует метаданные, чтобы читать, какой ты метод хочешь впихнуть и достает оттуда параметры, к примеру.

    Также верификация CLR на безопасные по отношению к типам операции использует метаданные (ну типо чтобы ты в коробку с яблоками не положил бананы, все это проверяется с помощью метаданных).

    Сборщик мусора юзает метаднные, чтобы узнать куда твой говнокласс ссылается еще.

    Крч это что-то типо файлика где написано что класс собака это собака, а не ебучий попугай. Можно не рыться в где-то в залупе, а в метаданных узнать что собака имеет имя, рост, вес, зарплату в долларах (?).

    Just in time преобразует IL код в машинный код. Когда мы обращаемся в коде к методу, он сначла компилируется JIT компилятором, после хранится в памяти, меняет в типах данных CLR адрес на блок памяти, в котором машинные команды.

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

    А еще он умеет оптимизировать код

    Крч, он убирает условия, которые никогда не выполнятся. Оптимизирует инструкции в зависимости от процессора.

    C# → IL code → Машинный код

    IL код легче, следовательно меньше весит EXE. Его не так сложно читать как машинный код

    IL код стековый язык. Все инструкции заносятся в исполнительный стек, после результаты можно получить из того же стека. IL коду похуй на ваши регистры или разрядность системы, он сам все разрулит. Тем самым ты можешь абстрагироваться и не думать че там под капотом.

    Также можно верефицировать IL код и получать ошибки во время компиляции (из C# в IL). Допустим проверять все ли параметры есть или return конструкции. Это дает безопасность. Также оно гарантирует что ты не сломаешь другое приложение, чтение или записью в другие участки памяти.

    Сначала CLR смотрит в точку входа (Метод Main допустим). Ищет куда мы ссылаемся в этом методе и выделяет структуры данных (допустим Console), дергает структуру методов (внутри есть записи с адресами на реализацию этого метода).

    Понятное дело что тут не все, мейби потом по мере наполнения моего конспекта - выложу.
     
  2. vtlstolyarov
    vtlstolyarov 7 ноя 2022 474 8 янв 2022
    Никому это не надо. Те кому надо сами читают книжку, а не чужие конспекты.
     
    1. Посмотреть предыдущие комментарии (1)
    2. vtlstolyarov
      Widness, вот ты сам же и написал что чужие конспекты никому не нужны. зачем тогда выложил свой?
    3. Widness Автор темы
      vtlstolyarov, чтобы критиковали и исправляли неточности)

      перед собеседованием можно быстро пройтись и там же козырнуть.

      да и позволит козырнуть перед переподом, зная хоть какую-то информацию.

      Раньше я тупо читал книги, а сейчас понял, что мне не хватает такой базы знаний. Поэтому и начал вести для себя, возможно кто-то будет юзать в своих целях.
      7 ноя 2022 Изменено
    4. vtlstolyarov
      Widness, Повторюсь - всё это поможет тебе, потому что это твой конспект. Всем остыльным твой поток мыслей не поможет от слова "совсем". Могу даже конкретным примером показать -
      IL код легче, следовательно меньше весит EXE. Его не так сложно читать как машинный код
      - никто никогда не поймёт что ты хотел сказать этим предложением, потому что отдельные слова имеют смысл, но сама фраза - полностью бессмыссленна.
Загрузка...
Top