Комментарии 13
Это перевод?
0
Я правильно понял, что без динамика эта рекурсия будет отрезовлена и выбросится исключение?
Выглядит страшно, фиг так сообразишь, чего он повис.
Выглядит страшно, фиг так сообразишь, чего он повис.
+1
Спасибо за статью!
Но у меня осталась пара вопросов:
Но у меня осталась пара вопросов:
- DLR и CLR используют один и тот же TypeLoader?
- Почему DLR не использует рекурсию? Это какое-то фундаментальное ограничение, или команда DLR планирует реализовать эту функциональность в будущем?
0
- TypeLoader один и тот же
- На самом деле это не ограничение. Нерекурсивный (почти) алгоритм, используемый в DLR дает одновременно и плюс, и минус в виде отсутствии переполнения стека. К сожалению, разработка непосредственно DLR идет неактивно и только в ветке IronPython. По данному вопросу новостей нет
+1
Код загрузки типов в основном сосредоточен в секции vm. Несколько размазан, но конкретно по теме: загрузка generics. Вместо метода CheckInstantiationForRecursion из проекта Rotor (sscli20) код стал более ООП-шным и теперь используется граф (RecursionGraph).
кстати, по архитектуре загрузчика типов более подробно.
кстати, по архитектуре загрузчика типов более подробно.
+1
Здравствуйте. Спасибо за интересную статью.
А не могли бы вы поподробнее объяснить вот эти слова:
Type loader (он же загрузчик типов) сканирует каждый generic-тип на наличие циклической зависимости и присваивает очередность (т.н. LoadLevel для класса). Хотя все специализации для ref-types имеют System.__Canon как аргумент типа — это следствие, а не причина.
Когда я писал кодогенерацию на Mono.Cecil с использованием generic'ов — ни с чем таким не сталкивался.
А не могли бы вы поподробнее объяснить вот эти слова:
Type loader (он же загрузчик типов) сканирует каждый generic-тип на наличие циклической зависимости и присваивает очередность (т.н. LoadLevel для класса). Хотя все специализации для ref-types имеют System.__Canon как аргумент типа — это следствие, а не причина.
Когда я писал кодогенерацию на Mono.Cecil с использованием generic'ов — ни с чем таким не сталкивался.
0
Тип
p.s.
Это никак не влияет на кодогенерацию MSIL будь то Mono.Cecil, либо Reflection.Emit и т.п.
System.__Canon
никогда не виден ни при написании MSIL'a, ни при приведении типов. Данная особенность является внутренней оптимизацией CLR и может не применяться др. реализациями. так это позволяет упростить сам процесс выявления зависимостей между типами загрузчиком, т.к. происходит трекинг лишь System.__Canon
.p.s.
Это никак не влияет на кодогенерацию MSIL будь то Mono.Cecil, либо Reflection.Emit и т.п.
+2
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
The dangers of not looking ahead