По поводу 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
Здравствуйте, 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 будет:
Здравствуйте, Sinix, Вы писали:
S>Надо чтоб обои были — надо определять константу AggressiveInlining и дефайном её в 0 определять, если платформа 4.0.
+1
Я бы еще добавил этот атрибут к инфиксным расширениям (чтобы с точки зрения используюшего их кода не было лишних косвенностей) или хотя бы для типа Char так как последний часто может использоваться в циклах.
Здравствуйте, rameel, Вы писали:
S>>Надо чтоб обои были — надо определять константу AggressiveInlining и дефайном её в 0 определять, если платформа 4.0.
R>+1
В общем самое сложное — объявить conditional symbols по аналогии с DebugCode.DebugCondition и прописать их в батниках.
Не, в теории я знаю как это делается, но если у кого есть опыт — с радостью уступаю
Здравствуйте, Sinix, Вы писали:
S>В общем самое сложное — объявить conditional symbols по аналогии с DebugCode.DebugCondition и прописать их в батниках. S>Не, в теории я знаю как это делается, но если у кого есть опыт — с радостью уступаю
Для версии фреймоворка уже определены соответствуюшие символы, для четвертого это FW40. Это если я правильно тебя понял
Здравствуйте, 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>>
Здравствуйте, rameel, Вы писали:
R>Я бы еще добавил этот атрибут к инфиксным расширениям (чтобы с точки зрения используюшего их кода не было лишних косвенностей)
Там есть вероятность что не заинлайнится по дефолту разве? Когда то давно, когда я проверял, еще на 2.0 рантайме такие вещи инлайнились всегда.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, Sinix, Вы писали:
S>В общем самое сложное — объявить conditional symbols по аналогии с DebugCode.DebugCondition и прописать их в батниках. S>Не, в теории я знаю как это делается, но если у кого есть опыт — с радостью уступаю
Такое ощущение, что меня никто не читает Все уже давно задефайнено: Поддержка фреймворков
Здравствуйте, AndrewVK, Вы писали:
R>>Я бы еще добавил этот атрибут к инфиксным расширениям (чтобы с точки зрения используюшего их кода не было лишних косвенностей) AVK>Там есть вероятность что не заинлайнится по дефолту разве? Когда то давно, когда я проверял, еще на 2.0 рантайме такие вещи инлайнились всегда.
В теории быть не должно, на практике на ryujit стабильная разница в 5-7% на двух машинах. Asm-выхлоп не смотрел пока, вполне может быть эффект веника.
Но всё равно надо бы явно намерения обозначать, если есть возможность.
P.S. Код можно красивее записать — через дефайн заполнять константу MethodImplOptions, в атрибутах использовать константу. Завтра сделаю.
Здравствуйте, Sinix, Вы писали:
S>P.S. Код можно красивее записать — через дефайн заполнять константу MethodImplOptions, в атрибутах использовать константу. Завтра сделаю.
Согласен, меньше мусора. Только что в 4.0 туда указывать? 0?
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Предложения:
1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе
2. Константы FW6/FW61 — в FW46/FW461 соответственно
3. Если будем делать кроссплатформенную версию — надо сразу менять имена констант на NET_STANDARD_10, NET_STANDARD_11 или что-то в этом духе.
4. Нам нужны conditional-константы для платформ? По аналогии с DebugCode.DebugCondition. По-моему нет, констант для отдельных фич в PlatformDependent достаточно будет.
Здравствуйте, 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>>
Здравствуйте, AndrewVK, Вы писали:
S>>1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе AVK>Пофигу.
Ок, переименуем, как понадобится. Я просто не нашёл куда PlatformDependent ещё приткнуть.
S>>Спецификация тут, nuget 3.4 уже поддерживает. AVK>Я читал. Крайне мутно. Да еще и на текущем билде странные мысли звучат, так что еще может все поменяться.
Ок, откладываем. Как решим кросплатформенную версию делать — надо будет определяться. А то с PCL profiles аццкий ад получается (взято отсюда).
AVK>Я читал. Крайне мутно. Да еще и на текущем билде странные мысли звучат, так что еще может все поменяться.
А что там на озвучивалось? Краем глаза смотрю, ничего нового вроде нет
Ну, кроме идеи ".net core + xamarin — наше кросплатформенное всё". Это вообще непонятно когда будет.
Здравствуйте, 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>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Там постоянно говорят про Standard .NET Library, которая rule them all. А еще совсем недавно была CoreFx, с которой планировалось портировать в коммерческий .NET. Вобщем, там пока явно все плавает и концепция не устаканилась.
А, это терминология кривая, никаких революций, насколько знаю.
Standard .NET Library — это не сам код, а задокументированный набор API. Ну, как api levels в андроиде.
+ ещё добавляются расширенные наборы API, как минимум netstandardapp для консольных приложений, но 99.9% библиотек они никак не затрагивают.
Бэкпорты с CoreFx в дотнет точно будут и есть уже. Иначе "взрослый" дотнет не сможет соответствовать .net platform standard.
Здравствуйте, 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>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Да нет, судя по слайдам это именно библиотека, а не API.
А, значит я до этого доклада ещё не добрался.
AVK>Думаю, в итоге весь фреймворк кроме разве что CoreCLR в общие универсальные пакеты уедет.
Ну это если и будет, то не в этом и не в следующем релизе точно.
Здравствуйте, IT, Вы писали:
S>>1. Папку FW40 надо бы переименовать в Targeting или что-то в этом духе
IT>Compatibility
Не-не-не, это именно targeting, в нюгете/PCL оно так зовётся.