Re[8]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 02.12.21 11:12
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Погодите. С этого места поподробнее. Что за ссылки, что за индексы?

S>Забегая вперёд: какого типа будет результат операции span1 + span2 + span1, и какие значения будут иметь его поля?

span1 + span2 дадут tempSpan (неявный), в котором ссылки на 2 этих спана. Результирующий span = tempSpan + span1, в котором ссылки уже на tempSpan + span1. Индексы пока даже не нужны — это при более сложных операциях.
Re[9]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 02.12.21 11:17
Оценка:
Здравствуйте, samius, Вы писали:

S>Кроме этого хотелось бы увидеть то, как это повлияет на операции чтения/записи, подразумевая что спан — это не один кусок памяти, а множество...


Можно сделать ReadOnlySpan для таких случаев, если смущает что запись в 1 ячейку приведет к изменению двух.
Re[9]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 11:26
Оценка:
Здравствуйте, samius, Вы писали:

S>Кроме этого хотелось бы увидеть то, как это повлияет на операции чтения/записи, подразумевая что спан — это не один кусок памяти, а множество...

Это будет следующий вопрос. Как будет выглядеть цикл сканирования такого спана после джита
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[9]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 11:28
Оценка:
Здравствуйте, Shmj, Вы писали:

S>span1 + span2 дадут tempSpan (неявный), в котором ссылки на 2 этих спана. Результирующий span = tempSpan + span1, в котором ссылки уже на tempSpan + span1. Индексы пока даже не нужны — это при более сложных операциях.

Что такое "ссылки на Span"? Боксинг ref struct запрещён.
Что значит "индексы не нужны"? Мы не можем произвольно отбрасывать и добавлять поля в struct типе.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[10]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 02.12.21 11:32
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Что такое "ссылки на Span"? Боксинг ref struct запрещён.

S>Что значит "индексы не нужны"? Мы не можем произвольно отбрасывать и добавлять поля в struct типе.

Т.е. сами себе создали проблему — сделали struct, чтобы усложнить себе жизнь.
Re[11]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 12:07
Оценка: +3
Здравствуйте, Shmj, Вы писали:

S>Т.е. сами себе создали проблему — сделали struct, чтобы усложнить себе жизнь.

Нет конечно. У struct есть масса преимуществ — в частности, можно делать инлайнинг и многие другие оптимизации, которые невозможны для reference-типов.
Вы вместо того, чтобы ворчать, постарайтесь разобраться с тем, как (и зачем) устроены [ReadOnly]Span<T>. Это весьма поучительно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[9]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 02.12.21 12:18
Оценка: +2
M>>Аргумент в стиле "на ассемблере тоже можно писать машин лернинг, только неудобно"
S>Что мешает добавить удобства в C#? Это же языки одного уровня.

Отсутствие препятствий недосточное условие вносить измения.
И профит от того что вместо z=concat(x,y) можно будет писать z=x+y (и нельзя будет писать z=concat(x,y,predicate)) кажется сомнительным.
Отредактировано 02.12.2021 16:28 Muxa . Предыдущая версия .
Re[10]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 12:20
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Можно сделать ReadOnlySpan для таких случаев, если смущает что запись в 1 ячейку приведет к изменению двух.

Нет. Смущает то, что вместо тривиального pointer[index]=x, что на интеле кодируется одной инструкцией mov, мы получаем
if(index < length1)
  pointer1[index] = x
else
  pointer2[index-length1] = x

Причём в отличие от проверок на границы, которые реализованы в настоящем Span, эту проверку выкинуть при джите будет невозможно.
Так как Span — структура, схитрить и разделить "одиночный" Span и "двойной" Span не получится.
То есть одиночный Span — это просто двойной Span, у которого pointer2 = length2 = 0.
При этом мы по-прежнему не можем склеить вместе три Span, т.к. возможности сослаться на Span нету.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[11]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 02.12.21 12:52
Оценка: -2 :)
Здравствуйте, Sinclair, Вы писали:

S>Так как Span — структура, схитрить и разделить "одиночный" Span и "двойной" Span не получится.

S>То есть одиночный Span — это просто двойной Span, у которого pointer2 = length2 = 0.
S>При этом мы по-прежнему не можем склеить вместе три Span, т.к. возможности сослаться на Span нету.

Просто не нужно было делать структурой — делали бы классом как строку Очевидная ошибка проектирования, которая лишает многих возможностей расширения.
Re[11]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 02.12.21 13:04
Оценка: -1 :)
Здравствуйте, Sinclair, Вы писали:

S>Причём в отличие от проверок на границы, которые реализованы в настоящем Span, эту проверку выкинуть при джите будет невозможно.


Это не существенно. Вместо 1000 слов:

byte[] b1 = {1, 2, 3};
byte[] b2 = {4, 5, 6};
byte[] b3 = {7, 8, 9, 10};
            
var span = (Span2<byte>)b1 + b2 + b3;

span[4] = 15;

string res = string.Join(", ", span);

Console.WriteLine(res); // 1, 2, 3, 4, 15, 6, 7, 8, 9, 10


  Набросал за 15 мин. с кофем
https://dotnetfiddle.net/zxURoa
Отредактировано 02.12.2021 13:12 Shmj . Предыдущая версия . Еще …
Отредактировано 02.12.2021 13:11 Shmj . Предыдущая версия .
Re[7]: Индексы и прочие новшества - умеют ли...
От: Sharov Россия  
Дата: 02.12.21 14:01
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Так C# же тоже умеет в Machine Learning. В Python немного глянул как удобно с данными работать — круть.


Язык-то тут причем, питон например, если речь идет о соотв. библиотеках?
Плюс инф-ра в виде jupyter notebook'ов, когда люди разбирающие в математике, но не очень
разбирающиеся в программировании могут сравнительно легко решать свои проблемы -- обучать модели,
готовить данные и т.п. Минимум второстепенной писанины, а в C# сразу загрузят ООП и понятием класс
(метод Main надо же где-то написать). Т.е. питон когнитивно проще.


S>А так же часто не хватает при работе с бинарными данными.


Чего не хватает?
Кодом людям нужно помогать!
Re[12]: Индексы и прочие новшества - умеют ли...
От: rameel https://github.com/rsdn/CodeJam
Дата: 02.12.21 14:20
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Набросал за 15 мин. с кофем

S>https://dotnetfiddle.net/zxURoa

И эффективность ниже плинтуса
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[12]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 14:23
Оценка: +6
Здравствуйте, Shmj, Вы писали:
S>Просто не нужно было делать структурой — делали бы классом как строку Очевидная ошибка проектирования, которая лишает многих возможностей расширения.
Если бы Span делали классом, а метод this[int index] — виртуальным, то он бы работал примерно на порядок медленнее того, как он работает сейчас.
С учётом того, что он разрабатывался как раз для тех задач, где выжимают каждый так, такое решение как раз было бы ошибкой проектирования.
А вы судите с позиций невежества. Так делать не надо.

Если в ваших задачах производительность неважна, то вы можете сделать свой класс Rope<T> с нужными вам операциями. Реализация всего семейства классов заняла бы меньше времени, чем эта дискуссия.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[7]: Парсинг бинарных сообщений
От: _FRED_ Россия
Дата: 02.12.21 14:34
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Span должен уметь принимать на вход 2 Span. Не обязательно при этом копировать все в новый массив — просто хранить 2 ссылки и 4 индекса.


Обязательно: Span&lt;T&gt; Struct

Provides a type- and memory-safe representation of a contiguous region of arbitrary memory.


А то, о чём вы спрашиваете — это ReadOnlySequence&lt;T&gt; Struct:

Represents a sequence that can read a sequential series of T.


P.S. Давно фоматер поломали? Угловые скобки внутри ссылок показываются не правильно.
Help will always be given at Hogwarts to those who ask for it.
Re[12]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 14:43
Оценка:
Здравствуйте, Shmj, Вы писали:


S>Это не существенно.

Это очень существенно.

Вместо 1000 слов:
S>
  Набросал за 15 мин. с кофем
S> https://dotnetfiddle.net/zxURoa

А то. Давайте теперь сделаем простейший замер производительности:

'Span' : Counted 49999995000000 in 381ms
'span'via foreach: Counted 49999995000000 in 292ms
System.Span<int> : Counted 49999995000000 in 58ms
int[] : Counted 49999995000000 in 24ms

Никто не будет пользоваться структурой, которая в 15 раз медленнее массива.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[8]: Парсинг бинарных сообщений
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 14:57
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>А то, о чём вы спрашиваете — это ReadOnlySequence&lt;T&gt; Struct:
_FR>

_FR>Represents a sequence that can read a sequential series of T.

И вдогонку: https://www.stevejgordon.co.uk/creating-a-readonlysequence-from-array-data-in-dotnet

_FR>P.S. Давно фоматер поломали? Угловые скобки внутри ссылок показываются не правильно.

ХЗ. А он работал?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[13]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 02.12.21 15:01
Оценка:
Здравствуйте, rameel, Вы писали:

R>И эффективность ниже плинтуса


За бесплатно — просто демо-вариант.
Re[14]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 02.12.21 15:06
Оценка: +3
Здравствуйте, Shmj, Вы писали:

S>За бесплатно — просто демо-вариант.

я бы порадовался, если бы существовал способ сделать ваш код существенно быстрее — хотя бы и за деньги. Но увы, не выйдет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[9]: Парсинг бинарных сообщений
От: _FRED_ Россия
Дата: 02.12.21 15:06
Оценка:
Здравствуйте, Sinclair, Вы писали:

_FR>>P.S. Давно фоматер поломали? Угловые скобки внутри ссылок показываются не правильно.

S>ХЗ. А он работал?

Вот теперь я засомневался Ну ладно, учтём.
Help will always be given at Hogwarts to those who ask for it.
Re[13]: Индексы и прочие новшества - умеют ли...
От: 4058  
Дата: 02.12.21 15:14
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Никто не будет пользоваться структурой, которая в 15 раз медленнее массива.


Некоторые пользуются Питоном, который сам по себе, раз в 15-50 медленнее C/C++/Java

https://miro.medium.com/max/1050/1*N4ns2d0oFaoN3EalxVd-CQ.png
здесь
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.