Re[13]: «Собаку съел»
От: vdimas Россия  
Дата: 23.01.17 22:36
Оценка: 3 (1)
Здравствуйте, Serginio1, Вы писали:

V>>Это то, что должен был генерить компилятор.

V>>Но приходится тебе.
S> А я уже в 1000 раз привожу ссылки где это делается
S>Optimising LINQ

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


S>Сейчас с развитием Рослина много оптимизаций на уровне Кода в CIL.


Я даже уверен, что с использованием Рослина можно накрутить свой собственный диалект C#, в котором попытаться порешать некоторые обсуждаемые вопросы. ))


S>Кроме того есть Net Native и там намного проще делать оптимизации из-за ограничения в рефлексии.


Оптимизации проще делать при отсутствии какой-либо рефлексии и конкретно нейтивность тут не при чём.
Просто не надо было тащить систему типов в VM, как это топорно сделала Java.

По-сути, Net Native — это совсем другая философия, это НЕ дотнет в его привычном понимании. ))

А в дотнет проблема была заложена изначально, ИМХО.
Он был разработан в то время, когда рост вычислительных мощностей удваивался каждые полтора года.
Отсюда такие случились такие акценты — на простоту инфраструктуры на основе топорной системы типов, типа джавистской.

Почему топорной? Потому что рефлексируется всё и вся, включая приватные члены. Т.е., "как слышится, так и пишется" и ничего не "сокращается в уме". То бишь, система типов не позволяет никакой их редукции и никакого "стирания" артефактов типов вплоть до аж рантайма. Нифига себе... ))

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

Например, в С++ есть т.н. "бинарная склейка" одинаковых участков кода. Ну вот пусть совершенно разные типы после компиляции создадут идентичный бинарный код некоей ф-ии или метода — такой код будет склеен в единственный экземпляр. Именно это позволяет бороться с распуханием кода после применения шаблонов.

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

В общем, генерики дотнета сделали такими, какие они есть в том числе по этой причине — чтобы не плодить дубликаты практически одинакового кода в ходе специализаций. Идёт размен статического ресолвинга точных типов на динамические вызовы интерфейсов.

В общем, положа руку на — кошмар.

===============
Я более чем уверен, что концепция дотнета будет серьёзно пересматриваться.
Собсно уже. Ты правильно напомнил про Net Native. В любом сложном процессе важно целеполагание, на сегодня это целеполагание уже оформилось — это эффективный кроссплатформенный код.

Раньше целеполагание было чуть другим — дать простой в изучении и применении инструмент. А "эффективный и кроссплатформенный" — когда-нибудь потом. Декларировалось, что достаточно будет запустить имеющиеся приложения на новых версиях фреймворков и всё само собой случится. ))

Вот как раз из-за топорности системы типов VM нифига так и не случилось.
15 лет прошло уже... Дотнет набрал неимоверный вес и инерцию.
И при этом активно ПЕРЕДЕЛЫВАЕТСЯ прямо сейчас.
Сколько это еще займёт лет, как думаешь?

Думаю, еще десяток лет запросто, пока не откажутся окончательно от современной модели VM. Текущую парадигму исполнения VM в лучшем случае оставят как эмулируемую для совместимости.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.