Re[4]: Introducing .NET 5
От: okon  
Дата: 15.05.19 04:04
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>Здравствуйте, okon, Вы писали:

O>>а Winform и WPF остаются Windows specific, их исключат из .NET5 и будут отдельные сборки через nuget подключаться ?

QL>

QL>With the .NET Core 3.0 release in September 2019 we think that all *new* .NET applications should be based on .NET Core. The primary application types from .NET Framework are supported, and where we did not port something over there is a recommended modern replacement. All future investment in .NET will be in .NET Core. This includes: Runtime, JIT, AOT, GC, BCL (Base Class Library), C#, VB.NET, F#, ASP.NET, Entity Framework, ML.NET, WinForms, WPF and Xamarin.


Ответа тут нет, пока только известно что WPF например сильно зависим от платформы и не портабелен.
.NET Core же предполагает портабельность.

.NET Core is an open-source, general-purpose development platform maintained by Microsoft and the .NET community on GitHub. It's cross-platform (supporting Windows, macOS, and Linux) and can be used to build device, cloud, and IoT applications.

Поэтому крайне не понятно что означает WPF в .NET Core — отказ от "It's cross-platform" или же кроссплатформенную реализацию.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Re[19]: TryFormat
От: Ночной Смотрящий Россия  
Дата: 15.05.19 08:16
Оценка: 10 (1)
Здравствуйте, sergeya, Вы писали:

S>Но меня смущает не отсутсвие расчитанного размера, а двойная работа — если размера буфера не хватит, придется выполнять форматирование повторно с самого начала.


Вот смотри — для базовых типов размер буфера неизвестен заранее для чисел и енумов. В обоих случаях посчитать размер буфера сопроставимо по затратам с собственно форматированием.
С другой стороны, всегда можно сделать буфер с запасом, так чтобы его хватало либо с гарантией, либо в 99.99% случаев. Поэтому ничего страшного в повторном форматировании нет.

S>Поэтому рассчитанный размер мне тоже не очень нужен. Мне больше нравится дизайн System.Text.Decoder.Convert(), который позволяет продолжить конвертацию с предыдущей точки остановки.


Ключевое отличиче — в случае конвертера объемы могут быть очень большими, заранее непредсказуемого размера. А вот в случае с TryFormat это не так и смысла переусложнять API нет.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[20]: TryFormat
От: sergeya Ниоткуда http://blogtani.ru
Дата: 15.05.19 09:15
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Но меня смущает не отсутсвие расчитанного размера, а двойная работа — если размера буфера не хватит, придется выполнять форматирование повторно с самого начала.


НС>Вот смотри — для базовых типов размер буфера неизвестен заранее для чисел и енумов. В обоих случаях посчитать размер буфера сопроставимо по затратам с собственно форматированием.

НС>С другой стороны, всегда можно сделать буфер с запасом, так чтобы его хватало либо с гарантией, либо в 99.99% случаев. Поэтому ничего страшного в повторном форматировании нет.

Это если буфер для разовой операции. А если это буфер стрингбилдера, в который последовательно добавляются подстроки, буфер будет периодически исчерпываться.


S>>Поэтому рассчитанный размер мне тоже не очень нужен. Мне больше нравится дизайн System.Text.Decoder.Convert(), который позволяет продолжить конвертацию с предыдущей точки остановки.


НС>Ключевое отличиче — в случае конвертера объемы могут быть очень большими, заранее непредсказуемого размера.


Это вряд ли. Обычно конвертируют в цикле буферами конечной длины.


НС>А вот в случае с TryFormat это не так и смысла переусложнять API нет.


Что может быть проще decimal.FormatTo(stringBuilder)?
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[21]: FormatTo(stringBuilder)
От: Qbit86 Кипр
Дата: 15.05.19 09:55
Оценка:
Здравствуйте, sergeya, Вы писали:

НС>>А вот в случае с TryFormat это не так и смысла переусложнять API нет.


S>Что может быть проще decimal.FormatTo(stringBuilder)?


StringBuilder внутри аллоцирует чанки. Непубличный ValueStringBuilder хотя бы делает ротацию через ArraPool<char>.Shared.
Форматирование же в Span<T> не налагает никаких требований по выбору стратегии роста, это примитив, на основании которого можно реализовывать более высокоуровневые API по записи в StringBuilder или TextWriter.
Глаза у меня добрые, но рубашка — смирительная!
Re[4]: Introducing .NET 5
От: BlackEric http://black-eric.lj.ru
Дата: 15.05.19 10:25
Оценка:
Здравствуйте, QrystaL, Вы писали:

QL>

QL>With the .NET Core 3.0 release in September 2019 we think that all *new* .NET applications should be based on .NET Core. The primary application types from .NET Framework are supported, and where we did not port something over there is a recommended modern replacement. All future investment in .NET will be in .NET Core. This includes: Runtime, JIT, AOT, GC, BCL (Base Class Library), C#, VB.NET, F#, ASP.NET, Entity Framework, ML.NET, WinForms, WPF and Xamarin.


UWP все получается?
https://github.com/BlackEric001
Re[5]: Introducing .NET 5
От: Ночной Смотрящий Россия  
Дата: 15.05.19 10:47
Оценка:
Здравствуйте, BlackEric, Вы писали:

BE>UWP все получается?


У UWP свой рантайм с АОТ. А вот либы там от Core.
Поскольку в сабж добавляют АОТ, скорее всего UWP тоже на него переедет.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[21]: TryFormat
От: Ночной Смотрящий Россия  
Дата: 15.05.19 10:54
Оценка: 10 (1)
Здравствуйте, sergeya, Вы писали:

S>Это если буфер для разовой операции. А если это буфер стрингбилдера


У стрингбилдера свой алгоритм выделения буфера, не только под TryFormat. И никто не мешает этот алгоритм написать так, чтобы промахи на примитивных типах с размером буфера были редкими.

НС>>Ключевое отличиче — в случае конвертера объемы могут быть очень большими, заранее непредсказуемого размера.

S>Это вряд ли.

Это факт.

S> Обычно конвертируют в цикле буферами конечной длины.


Вопрос только в размере буфера. Одно дело полсотни байт под числеку, и другое дело мегабайты под текст.

НС>>А вот в случае с TryFormat это не так и смысла переусложнять API нет.

S>Что может быть проще decimal.FormatTo(stringBuilder)?

StringBuilder прибивает гвоздями к конкретной реализации со своими особенностями.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[22]: FormatTo(stringBuilder)
От: sergeya Ниоткуда http://blogtani.ru
Дата: 15.05.19 11:37
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>StringBuilder внутри аллоцирует чанки. Непубличный ValueStringBuilder хотя бы делает ротацию через ArraPool<char>.Shared.

Q>Форматирование же в Span<T> не налагает никаких требований по выбору стратегии роста, это примитив, на основании которого можно реализовывать более высокоуровневые API по записи в StringBuilder или TextWriter.

Да, хороший аргумент, но на моих (субьективных) весах двойное вычисление перевешивает эти плюсы.

Кстати, можно было бы сделали бы какой нибудь IStringBuilder, с возможностью выбора аллоцирующей или ротирующей реализации.
Тогда в пессимистичном сценарии будет дополнительное выделение памяти против выделения + перевычисления в исходном варианте.
Народ давно уже просить сделать ValueStringBuilder публичным.

Ну да ладно, тут можно придумывать до бесконечности ))
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re: И немного про гитхаб
От: VladCore  
Дата: 15.05.19 12:01
Оценка:
Здравствуйте, Jack128, Вы писали:

J>https://devblogs.microsoft.com/dotnet/introducing-net-5/


J>Основное:

J>Моно и коре унифицируют, оба будут юзать единый corefx.
J>Всерьез взялись за AOT.

Нет. Не только CoreFX. Майкрософтовец (Program Manager, .NET Team) пишет первым пунктом:

Produce a single .NET runtime...


И дальше он объясняет, дескать мы в microsoft не умеем AOT-оптимизацию с помощью LLVM. Без него нас и наш сбор телеметрии Apple не пустит (шутка). Украдем ка мы это у xamarin.

Может случиться как с гитхабом — сначала интегрировались чуть чуть, а для 2019й студии так и с потрохами купили
Re[22]: TryFormat
От: sergeya Ниоткуда http://blogtani.ru
Дата: 15.05.19 12:05
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>У стрингбилдера свой алгоритм выделения буфера, не только под TryFormat. И никто не мешает этот алгоритм написать так, чтобы промахи на примитивных типах с размером буфера были редкими.


Голословное утверждение. Я бы поверил, если бы ты привел ссылку на алгоритм или научное исследование.

НС>>>Ключевое отличиче — в случае конвертера объемы могут быть очень большими, заранее непредсказуемого размера.

S>>Это вряд ли.
НС>Это факт.
S>> Обычно конвертируют в цикле буферами конечной длины.
НС>Вопрос только в размере буфера. Одно дело полсотни байт под числеку, и другое дело мегабайты под текст.

Я конечно не знаю, какие у вас там размеры буферов, но в исходниках asp.net mvc при конвертации используется буферы в 1024 или 4096 символа.
Это всего лишь на полпорядка больше полусотни символов и на три порядка меньше упомянутых магабайтов.


НС>>>А вот в случае с TryFormat это не так и смысла переусложнять API нет.

S>>Что может быть проще decimal.FormatTo(stringBuilder)?

НС>StringBuilder прибивает гвоздями к конкретной реализации со своими особенностями.

Span тоже прибивает гвоздями.
Теперь классу, вызывающему чужой TryFormat надо знать детали реализации чужого класса, чтобы выделить буфер нужного размера.
Плюс не забыть реализовать фолбэк.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[9]: StringBuilder
От: Silver_S Ниоткуда  
Дата: 15.05.19 13:04
Оценка: :)
Здравствуйте, Sinclair, Вы писали:

Q>>https://github.com/dotnet/corefx/blob/master/src/Common/src/CoreLib/System/Text/StringBuilder.cs

S>Спасибо, я как-то так и предполагал, но хотел убедиться. То есть предполагается ровно один паттерн: пробуем втиснуться в буфер, какой бы он ни был; если не сработало — фоллбэкаемся на обычный метод с выделением.
S>Варианта "скорректировать размер буфера" у нас нету, т.к. TryFormat не даёт нам информации о том, сколько места надо.

Это что-то типа TrySort? Если программист допустил ошибку в более сложном алгоритме быстрой сортировки и он падает, тогда запускается алгоритм пузырьковой сортировки, в нем меньше вероятность бага?
Re[9]: StringBuilder
От: _NN_ www.nemerleweb.com
Дата: 15.05.19 13:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

Q>>https://github.com/dotnet/corefx/blob/master/src/Common/src/CoreLib/System/Text/StringBuilder.cs

S>Спасибо, я как-то так и предполагал, но хотел убедиться. То есть предполагается ровно один паттерн: пробуем втиснуться в буфер, какой бы он ни был; если не сработало — фоллбэкаемся на обычный метод с выделением.
S>Варианта "скорректировать размер буфера" у нас нету, т.к. TryFormat не даёт нам информации о том, сколько места надо.

Интересно, что никто на раннем этапе не указал на этот недочёт, кроме упоминания о тестах производительности.
https://github.com/dotnet/corefx/issues/22403
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[10]: StringBuilder
От: AlexRK  
Дата: 15.05.19 13:19
Оценка:
Здравствуйте, Silver_S, Вы писали:

S_S> Это что-то типа TrySort? Если программист допустил ошибку в более сложном алгоритме быстрой сортировки и он падает, тогда запускается алгоритм пузырьковой сортировки, в нем меньше вероятность бага?


Ну, кстати, подобное делают — сперва запускают квиксорт, и, если он не отработал за некоторое время, прерывают и запускают более стабильный алгоритм, типа мерж сорта.
Re[23]: FormatTo(stringBuilder)
От: Ночной Смотрящий Россия  
Дата: 15.05.19 13:37
Оценка:
Здравствуйте, sergeya, Вы писали:

S>Да, хороший аргумент, но на моих (субьективных) весах двойное вычисление перевешивает эти плюсы.


И? Предлагаешь обсудить твои внутренние весы?

S>Кстати, можно было бы сделали бы какой нибудь IStringBuilder, с возможностью выбора аллоцирующей или ротирующей реализации.


Ты в своих проектах тоже никогда не заморачиваешься сложностью полученного на ровном месте решения?

S>Тогда в пессимистичном сценарии будет дополнительное выделение памяти против выделения + перевычисления в исходном варианте.


А заодно двойная косвенность на вызове метода интерфейса вместо прямого вызова невиртуальных методов. Ну и боксинг, если про ValueStringBuilder.

S>Ну да ладно, тут можно придумывать до бесконечности ))


Не, не можно. В этом и проблема.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[23]: TryFormat
От: Ночной Смотрящий Россия  
Дата: 15.05.19 13:37
Оценка:
Здравствуйте, sergeya, Вы писали:

НС>>У стрингбилдера свой алгоритм выделения буфера, не только под TryFormat. И никто не мешает этот алгоритм написать так, чтобы промахи на примитивных типах с размером буфера были редкими.

S>Голословное утверждение. Я бы поверил, если бы ты привел ссылку на алгоритм или научное исследование.

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

НС>>Вопрос только в размере буфера. Одно дело полсотни байт под числеку, и другое дело мегабайты под текст.

S>Я конечно не знаю, какие у вас там размеры буферов
S>, но в исходниках asp.net mvc при конвертации используется буферы в 1024 или 4096 символа.

И? Я в том же asp.net видел буфера на 1-2М.

НС>>>>А вот в случае с TryFormat это не так и смысла переусложнять API нет.

S>>>Что может быть проще decimal.FormatTo(stringBuilder)?
НС>>StringBuilder прибивает гвоздями к конкретной реализации со своими особенностями.
S>Span тоже прибивает гвоздями.

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

S>Теперь классу, вызывающему чужой TryFormat надо знать детали реализации чужого класса, чтобы выделить буфер нужного размера.


Зачем? Тебе не детали реализации нужны, а размер результата.

S>Плюс не забыть реализовать фолбэк.


Это нормально для низкоуровнего API. Не хочешь возиться с микрооптимизациями — используй обычный Format.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[24]: FormatTo(stringBuilder)
От: sergeya Ниоткуда http://blogtani.ru
Дата: 15.05.19 14:04
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Да, хороший аргумент, но на моих (субьективных) весах двойное вычисление перевешивает эти плюсы.


НС>И? Предлагаешь обсудить твои внутренние весы?


Нет, предлагаю на этом остановиться. Потому что в отличии от тебя, предпочитаю в дискуссии опираться на конкретные факты и ссылки. А здесь у меня нет подкрепленного аргумента, кроме своего опыта, что я и подчеркнул.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[24]: TryFormat
От: Aquilaware  
Дата: 15.05.19 17:13
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Это нормально для низкоуровнего API. Не хочешь возиться с микрооптимизациями — используй обычный Format.


Тогда нужен новый атрибут:

[EditorBrowsable(EditorBrowsableState.SuperGeek)]
public bool TryFormat(...)
Re[25]: FormatTo(stringBuilder)
От: Ночной Смотрящий Россия  
Дата: 15.05.19 17:39
Оценка: -1
Здравствуйте, sergeya, Вы писали:

S> А здесь у меня нет подкрепленного аргумента, кроме своего опыта, что я и подчеркнул.


Т.е. аргументов нет, но ты все равно прав. ОК.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Performance Improvements in .NET Core 3.0
От: Qbit86 Кипр
Дата: 15.05.19 22:01
Оценка: 13 (2)

We just blogged about all the performance works we did in .NET Core 3.0


https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/
Глаза у меня добрые, но рубашка — смирительная!
.net core
Re[13]: StringBuilder
От: vdimas Россия  
Дата: 28.05.19 14:43
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>
s = new Span<char>(stackalloc char[t],t);


Можно просто:
Span<char> s = stackalloc char[t];
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.