MethodImpl(MethodImplOptions.AggressiveInlining)
От: rameel https://github.com/rsdn/CodeJam
Дата: 31.03.16 15:40
Оценка:
По поводу MethodImpl(MethodImplOptions.AggressiveInlining). К сожалению, MethodImplOptions.AggressiveInlining доступен только начиная .NET 4.5, а у нас проект компилируется еще в 4.0. Соответственно лезут ошибки:
Assertions\CodeExceptions.cs(27,33): error CS0117: 'MethodImplOptions' does not contain a definition for 'AggressiveInlining'


PS. В папке с проектом лежит батник с компиляции под платформы от 4.0 до 4.6.1
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 31.03.16 16:20
Оценка:
Здравствуйте, rameel, Вы писали:

R>По поводу MethodImpl(MethodImplOptions.AggressiveInlining). К сожалению, MethodImplOptions.AggressiveInlining доступен только начиная .NET 4.5, а у нас проект компилируется еще в 4.0. Соответственно лезут ошибки:

R>
R>Assertions\CodeExceptions.cs(27,33): error CS0117: 'MethodImplOptions' does not contain a definition for 'AggressiveInlining'
R>


Определяйтесь, что важнее — ассерты, работающие с 1.0 от варианта без ассертов, или совместимость с 4.0

* На десктопных процессорах, на ноутбуках 1.1-1.2 будет:
                                  Method | Scaled |    S95 |
---------------------------------------- |------- |------- |
               Test00RunWithoutAssertion |   1.00 |      1 |
               Test01RunDefaultAssertion |   1.13 |   1.11 |
                       Test02CodeNotNull |   1.12 |   1.11 |
                Test03CodeAssertArgument |   1.12 |   1.12 |
          Test04CodeAssertArgumentFormat |   8.53 |   9.78 |
 Test05CodeAssertArgumentInterpolateArgs | 161.70 | 164.69 |


Надо чтоб обои были — надо определять константу AggressiveInlining и дефайном её в 0 определять, если платформа 4.0.
Отредактировано 31.03.2016 16:24 Sinix . Предыдущая версия .
Re[2]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: rameel https://github.com/rsdn/CodeJam
Дата: 31.03.16 16:42
Оценка: +1
Здравствуйте, Sinix, Вы писали:

S>Надо чтоб обои были — надо определять константу AggressiveInlining и дефайном её в 0 определять, если платформа 4.0.


+1

Я бы еще добавил этот атрибут к инфиксным расширениям (чтобы с точки зрения используюшего их кода не было лишних косвенностей) или хотя бы для типа Char так как последний часто может использоваться в циклах.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[3]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 31.03.16 17:08
Оценка:
Здравствуйте, rameel, Вы писали:

S>>Надо чтоб обои были — надо определять константу AggressiveInlining и дефайном её в 0 определять, если платформа 4.0.


R>+1


В общем самое сложное — объявить conditional symbols по аналогии с DebugCode.DebugCondition и прописать их в батниках.
Не, в теории я знаю как это делается, но если у кого есть опыт — с радостью уступаю
Re[4]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: rameel https://github.com/rsdn/CodeJam
Дата: 31.03.16 17:24
Оценка: 42 (1)
Здравствуйте, Sinix, Вы писали:

S>В общем самое сложное — объявить conditional symbols по аналогии с DebugCode.DebugCondition и прописать их в батниках.

S>Не, в теории я знаю как это делается, но если у кого есть опыт — с радостью уступаю

Для версии фреймоворка уже определены соответствуюшие символы, для четвертого это FW40. Это если я правильно тебя понял
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re: MethodImpl(MethodImplOptions.AggressiveInlining)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.03.16 18:29
Оценка:
Здравствуйте, rameel, Вы писали:

R>По поводу MethodImpl(MethodImplOptions.AggressiveInlining). К сожалению, MethodImplOptions.AggressiveInlining доступен только начиная .NET 4.5, а у нас проект компилируется еще в 4.0. Соответственно лезут ошибки:


#if !FW40
...
#endif
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[3]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.03.16 18:29
Оценка:
Здравствуйте, rameel, Вы писали:

R>Я бы еще добавил этот атрибут к инфиксным расширениям (чтобы с точки зрения используюшего их кода не было лишних косвенностей)


Там есть вероятность что не заинлайнится по дефолту разве? Когда то давно, когда я проверял, еще на 2.0 рантайме такие вещи инлайнились всегда.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.03.16 18:29
Оценка: 2 (1) :)
Здравствуйте, Sinix, Вы писали:

S>В общем самое сложное — объявить conditional symbols по аналогии с DebugCode.DebugCondition и прописать их в батниках.

S>Не, в теории я знаю как это делается, но если у кого есть опыт — с радостью уступаю

Такое ощущение, что меня никто не читает Все уже давно задефайнено: Поддержка фреймворков
Автор: AndrewVK
Дата: 29.03.16
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[4]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 31.03.16 20:08
Оценка:
Здравствуйте, AndrewVK, Вы писали:

R>>Я бы еще добавил этот атрибут к инфиксным расширениям (чтобы с точки зрения используюшего их кода не было лишних косвенностей)

AVK>Там есть вероятность что не заинлайнится по дефолту разве? Когда то давно, когда я проверял, еще на 2.0 рантайме такие вещи инлайнились всегда.

В теории быть не должно, на практике на ryujit стабильная разница в 5-7% на двух машинах. Asm-выхлоп не смотрел пока, вполне может быть эффект веника.

Но всё равно надо бы явно намерения обозначать, если есть возможность.

P.S. Код можно красивее записать — через дефайн заполнять константу MethodImplOptions, в атрибутах использовать константу. Завтра сделаю.
Re[5]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 31.03.16 20:32
Оценка:
Здравствуйте, Sinix, Вы писали:

S>P.S. Код можно красивее записать — через дефайн заполнять константу MethodImplOptions, в атрибутах использовать константу. Завтра сделаю.


Согласен, меньше мусора. Только что в 4.0 туда указывать? 0?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[6]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 31.03.16 21:18
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Согласен, меньше мусора. Только что в 4.0 туда указывать? 0?

Ага. Проверено неоднократно, работает.
Re[5]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 01.04.16 07:00
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Такое ощущение, что меня никто не читает Все уже давно задефайнено: Поддержка фреймворков
Автор: AndrewVK
Дата: 29.03.16


Готово.

Предложения:
1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе
2. Константы FW6/FW61 — в FW46/FW461 соответственно
3. Если будем делать кроссплатформенную версию — надо сразу менять имена констант на NET_STANDARD_10, NET_STANDARD_11 или что-то в этом духе.
4. Нам нужны conditional-константы для платформ? По аналогии с DebugCode.DebugCondition. По-моему нет, констант для отдельных фич в PlatformDependent достаточно будет.

Спецификация тут, nuget 3.4 уже поддерживает.

Могу сделать, надо только определиться с именами
Если надо обсудить — выдели в отдельную ветку пожалуйста.
Re[6]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.04.16 08:43
Оценка:
Здравствуйте, Sinix, Вы писали:

S>1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе


Пофигу.

S>2. Константы FW6/FW61 — в FW46/FW461 соответственно


Переименуем.

S>3. Если будем делать кроссплатформенную версию — надо сразу менять имена констант на NET_STANDARD_10, NET_STANDARD_11 или что-то в этом духе.


Слтшком длинно и непонятно.

S>4. Нам нужны conditional-константы для платформ?


Пока нет. Надо будет — добавим.

S>Спецификация тут, nuget 3.4 уже поддерживает.


Я читал. Крайне мутно. Да еще и на текущем билде странные мысли звучат, так что еще может все поменяться.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[7]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 01.04.16 10:01
Оценка:
Здравствуйте, AndrewVK, Вы писали:

S>>1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе

AVK>Пофигу.
Ок, переименуем, как понадобится. Я просто не нашёл куда PlatformDependent ещё приткнуть.


S>>Спецификация тут, nuget 3.4 уже поддерживает.

AVK>Я читал. Крайне мутно. Да еще и на текущем билде странные мысли звучат, так что еще может все поменяться.

Ок, откладываем. Как решим кросплатформенную версию делать — надо будет определяться. А то с PCL profiles аццкий ад получается (взято отсюда).


AVK>Я читал. Крайне мутно. Да еще и на текущем билде странные мысли звучат, так что еще может все поменяться.

А что там на озвучивалось? Краем глаза смотрю, ничего нового вроде нет
Ну, кроме идеи ".net core + xamarin — наше кросплатформенное всё". Это вообще непонятно когда будет.
Re[8]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.04.16 10:52
Оценка:
Здравствуйте, Sinix, Вы писали:

AVK>>Я читал. Крайне мутно. Да еще и на текущем билде странные мысли звучат, так что еще может все поменяться.

S>А что там на озвучивалось? Краем глаза смотрю, ничего нового вроде нет

Там постоянно говорят про Standard .NET Library, которая rule them all. А еще совсем недавно была CoreFx, с которой планировалось портировать в коммерческий .NET. Вобщем, там пока явно все плавает и концепция не устаканилась.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[9]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 01.04.16 11:11
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Там постоянно говорят про Standard .NET Library, которая rule them all. А еще совсем недавно была CoreFx, с которой планировалось портировать в коммерческий .NET. Вобщем, там пока явно все плавает и концепция не устаканилась.


А, это терминология кривая, никаких революций, насколько знаю.
Standard .NET Library — это не сам код, а задокументированный набор API. Ну, как api levels в андроиде.

+ ещё добавляются расширенные наборы API, как минимум netstandardapp для консольных приложений, но 99.9% библиотек они никак не затрагивают.

Бэкпорты с CoreFx в дотнет точно будут и есть уже. Иначе "взрослый" дотнет не сможет соответствовать .net platform standard.
Re[10]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 01.04.16 11:23
Оценка:
Здравствуйте, Sinix, Вы писали:

S>А, это терминология кривая, никаких революций, насколько знаю.

S>Standard .NET Library — это не сам код, а задокументированный набор API. Ну, как api levels в андроиде.

Да нет, судя по слайдам это именно библиотека, а не API.

S>Бэкпорты с CoreFx в дотнет точно будут и есть уже. Иначе "взрослый" дотнет не сможет соответствовать .net platform standard.


Я так понял что от этой практики все же планируется отказаться. Вон глянь — в 4.6.2 те самые нумерики выкинули в пользу универсального nuget-пакета. ASP.NET тоже окончательно из дотнета выехал в отдельную квартиру, причем уже довольно давно, и возвращаться явно не собирается. Думаю, в итоге весь фреймворк кроме разве что CoreCLR в общие универсальные пакеты уедет.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
AVK Blog
Re[11]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 01.04.16 11:33
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Да нет, судя по слайдам это именно библиотека, а не API.

А, значит я до этого доклада ещё не добрался.

AVK>Думаю, в итоге весь фреймворк кроме разве что CoreCLR в общие универсальные пакеты уедет.

Ну это если и будет, то не в этом и не в следующем релизе точно.
Re[6]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: IT Россия linq2db.com
Дата: 01.04.16 15:24
Оценка:
Здравствуйте, Sinix, Вы писали:

S>1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе


Compatibility
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: MethodImpl(MethodImplOptions.AggressiveInlining)
От: Sinix  
Дата: 01.04.16 15:40
Оценка:
Здравствуйте, IT, Вы писали:

S>>1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе


IT>Compatibility

Не-не-не, это именно targeting, в нюгете/PCL оно так зовётся.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.