Pull to refresh

Comments 13

нет, а почему так решили?
Видимо потому что большая часть статей с глубоким капанием — заморские.
Я думаю всё проще: название и заголовки на английском написаны.
Я правильно понял, что без динамика эта рекурсия будет отрезовлена и выбросится исключение?

Выглядит страшно, фиг так сообразишь, чего он повис.
Спасибо за статью!
Но у меня осталась пара вопросов:
  1. DLR и CLR используют один и тот же TypeLoader?
  2. Почему DLR не использует рекурсию? Это какое-то фундаментальное ограничение, или команда DLR планирует реализовать эту функциональность в будущем?
  1. TypeLoader один и тот же
  2. На самом деле это не ограничение. Нерекурсивный (почти) алгоритм, используемый в DLR дает одновременно и плюс, и минус в виде отсутствии переполнения стека. К сожалению, разработка непосредственно DLR идет неактивно и только в ветке IronPython. По данному вопросу новостей нет
А не подскажите где можно найти исходный код собственно самого TypeLoader'a?

Я полазил по проекту coreclr и исходникам .NET'a, но нашел, только вот это:

Но оно все как-то мало подходит под то, о чем вы говорите.

Код загрузки типов в основном сосредоточен в секции vm. Несколько размазан, но конкретно по теме: загрузка generics. Вместо метода CheckInstantiationForRecursion из проекта Rotor (sscli20) код стал более ООП-шным и теперь используется граф (RecursionGraph).

кстати, по архитектуре загрузчика типов более подробно.
Здравствуйте. Спасибо за интересную статью.
А не могли бы вы поподробнее объяснить вот эти слова:
Type loader (он же загрузчик типов) сканирует каждый generic-тип на наличие циклической зависимости и присваивает очередность (т.н. LoadLevel для класса). Хотя все специализации для ref-types имеют System.__Canon как аргумент типа — это следствие, а не причина.
Когда я писал кодогенерацию на Mono.Cecil с использованием generic'ов — ни с чем таким не сталкивался.
Тип System.__Canon никогда не виден ни при написании MSIL'a, ни при приведении типов. Данная особенность является внутренней оптимизацией CLR и может не применяться др. реализациями. так это позволяет упростить сам процесс выявления зависимостей между типами загрузчиком, т.к. происходит трекинг лишь System.__Canon.

p.s.
Это никак не влияет на кодогенерацию MSIL будь то Mono.Cecil, либо Reflection.Emit и т.п.
UFO just landed and posted this here
Sign up to leave a comment.

Articles