Re[11]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 05.12.21 11:05
Оценка:
R>>Что будет выведено на экран в LE/BE системах?

S>В данном случае разницы не будет, очевидно.


Ты же сам комментом выше писал что разница будет. Давай ты сперва сам определишься?
Re[2]: Индексы и прочие новшества - умеют ли...
От: fk0 Россия  
Дата: 05.12.21 13:38
Оценка: +1 :)))
Здравствуйте, Sinclair, Вы писали:

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

S>А для массивов придётся пилить компилятор — способа приделать оператор + к встроенному типу нет.

Вот поэтому C# -- кривая паделка микрософта, а C++ -- язык будущего.
Куда в .NET не ткни -- прибито гвоздями и компиляторная магия.
Всё здорово и замечательно только в проектах уровня хелло-ворлд, как до дела
доходит, сразу проблемы.
Re[24]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 15:50
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>>С чего вы взяли что потребность низкая?

S>С того, что подобная штука даже не обсуждается в https://github.com/dotnet/csharplang.

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

Ну ок. Что вы делаете с массивами вообще? Для чего они вам?
Re[12]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 15:53
Оценка:
Здравствуйте, Muxa, Вы писали:

S>>В данном случае разницы не будет, очевидно.

M>Ты же сам комментом выше писал что разница будет. Давай ты сперва сам определишься?

Бро, прежде чем обвинить кого-то в тупости, убедись что у тебя хватило мозгов его понять.

Есть системные типы — порядок байт в них зависит от системы. .Net на данный момент не используется ни на одной системе с BigEndian, к слову.

Если же ты сам записываешь некое число, представляешь его в массиве байт — то ты сам и решаешь с какой стороны будет наиболее высокий разряд. Обычно выбирают LittleEndian, когда 0 элемент массива младший. Но это никак не определятся системой — ты сам решаешь.
Re[13]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 05.12.21 16:17
Оценка:
Зачем мне записывать число как байты? Чем не подходит int a = 1234?
Re[14]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 16:58
Оценка:
Здравствуйте, Muxa, Вы писали:

M>Зачем мне записывать число как байты? Чем не подходит int a = 1234?


Если число не вмещается в 8 байт, вестимо. Для этого ведь предлагают реализовать оператор + как сложение чисел?

Мое мнение — сложение массивов как чисел — не просто вызывает неоднозначность с Big/Little -Endian, но и как раз менее применимо, чем конкатенация. Сложение нужно только для математики длинных чисел — это отдельный класс типа BigInteger. А вот конкатенация нужна намного чаще и для всех типов массивов она актуальная.
Отредактировано 05.12.2021 17:02 Shmj . Предыдущая версия .
Re[15]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 05.12.21 17:37
Оценка: +2
Что за бред ты несешь?
Сложение векторов это операция, которую применяют миллионы раз в каждой компьютерной игре при расчете графики.
Открой любую библиотеку линейной алгебры, там сложение векторов в каждой функции.
Re[16]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 18:03
Оценка: :)))
Здравствуйте, Muxa, Вы писали:

M>Что за бред ты несешь?

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

Это специализированные преобразования. Как вы будете вычислять сумму массивов строк? Или сумму списков неких Item? Никак. Это подходит только для целых чисел (и даже там есть неоднозначность Little-Big). Даже сложить два массива float — это уже не однозначное преобразование.

А конкатенация — актуальна для всего.
Отредактировано 05.12.2021 18:03 Shmj . Предыдущая версия .
Re[17]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 05.12.21 18:41
Оценка:
M>>Что за бред ты несешь?
M>>Сложение векторов это операция, которую применяют миллионы раз в каждой компьютерной игре при расчете графики.
M>>Открой любую библиотеку линейной алгебры, там сложение векторов в каждой функции.

S>Это специализированные преобразования. Как вы будете вычислять сумму массивов строк?

Применить оператор "+" поэлементно.

S>Или сумму списков неких Item? Никак.

Применить оператор "+" поэлементно.

S>Это подходит только для целых чисел (и даже там есть неоднозначность Little-Big).


S>Даже сложить два массива float — это уже не однозначное преобразование.
надо коллегам в геймдеве рассказать, а то они не в курсе.

S>А конкатенация — актуальна для всего.

И как же нам скантатенировать два элемента struct { int x; void* y; }?
Re[17]: Индексы и прочие новшества - умеют ли...
От: samius Россия http://sams-tricks.blogspot.com
Дата: 05.12.21 18:50
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>А конкатенация — актуальна для всего.

Слишком сильное заявление. С моей колокольни она не нужна примерно для всего, за редким исключением. Например, подсунуть склеенный массив в какой-нибудь JSON форматтер. Т.е. там, где единицей обмена информации является именно массив. Но это единичные случаи, т.к. базой для ввода/вывода являются потоки, работа с которыми не требует конкатенации массивов, более того, она там избыточна. Даже обмен с неуправляемой памятью конкатенации не требует.
Re[18]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 19:06
Оценка:
Здравствуйте, Muxa, Вы писали:

S>>Это специализированные преобразования. Как вы будете вычислять сумму массивов строк?

M>Применить оператор "+" поэлементно.

А в случае с целыми числами — вы просто поэлементно складываете или же учитываете переполнение и переносите в новый разряд?

S>>Или сумму списков неких Item? Никак.

M>Применить оператор "+" поэлементно.

А если оператор не определен для Item?

S>>Это подходит только для целых чисел (и даже там есть неоднозначность Little-Big).

M>
S>>Даже сложить два массива float — это уже не однозначное преобразование.
M> надо коллегам в геймдеве рассказать, а то они не в курсе.

А причем тут геймдев?

S>>А конкатенация — актуальна для всего.

M>И как же нам скантатенировать два элемента struct { int x; void* y; }?

Конкатенация массивов/списков — просто создаете новый массив, который по длине равен двум — и копируете ссылки на элементы.
Re[18]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 19:08
Оценка:
Здравствуйте, samius, Вы писали:

S>>А конкатенация — актуальна для всего.

S>Слишком сильное заявление. С моей колокольни она не нужна примерно для всего, за редким исключением. Например, подсунуть склеенный массив в какой-нибудь JSON форматтер. Т.е. там, где единицей обмена информации является именно массив. Но это единичные случаи, т.к. базой для ввода/вывода являются потоки, работа с которыми не требует конкатенации массивов, более того, она там избыточна. Даже обмен с неуправляемой памятью конкатенации не требует.

Для чего вы вообще используете массивы/списки?

Вообще мешать не будет. Кроме как однозначная конкатенация — других разумных вариантов нет. Если поэлементное складывание — то как быть с переполнением, как складывать типы, отличные от целых чисел?

+ можно добавить — как для строк. Кто не хочет — можно не использовать.
Отредактировано 05.12.2021 19:15 Shmj . Предыдущая версия .
Re: Индексы и прочие новшества - умеют ли...
От: graniar  
Дата: 05.12.21 19:17
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Особо не смотрел. Но просто для поддержания беседы — вроде так и не сделали, чтобы можно было конкатенацию массивов (или там Span) простым знаком +?


S>byte[] array1 = ...

S>byte[] array2 = ...
S>byte[] array3 = array1 + array2;

S>?


#define array1 "Hello"
#define array2 "world
#define array3 array1 " " array2

:P
Re[19]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 05.12.21 19:37
Оценка:
S>>>Это специализированные преобразования. Как вы будете вычислять сумму массивов строк?
M>>Применить оператор "+" поэлементно.
S>А в случае с целыми числами — вы просто поэлементно складываете или же учитываете переполнение и переносите в новый разряд?
В какой еще новый разряд?
math24.ru/сложение-и-вычитание-векторов.html

S>>>Или сумму списков неких Item? Никак.

M>>Применить оператор "+" поэлементно.
S>А если оператор не определен для Item?
Не скомпилируется пока не определишь.

S>>>Это подходит только для целых чисел (и даже там есть неоднозначность Little-Big).

M>>
S>>>Даже сложить два массива float — это уже не однозначное преобразование.
M>> надо коллегам в геймдеве рассказать, а то они не в курсе.
S>А причем тут геймдев?
Сложение векторов это одна из основных операций в компьютерной графике.

S>>>А конкатенация — актуальна для всего.

M>>И как же нам скантатенировать два элемента struct { int x; void* y; }?
S>Конкатенация массивов/списков — просто создаете новый массив, который по длине равен двум — и копируете ссылки на элементы.
Ну, если конкатенация актуальна для всего как сконкатенировать два объекта этой структуры?
Re[20]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 19:48
Оценка:
Здравствуйте, Muxa, Вы писали:

S>>А причем тут геймдев?

M>Сложение векторов это одна из основных операций в компьютерной графике.

И? C# — это что, язык исключительно для компьютерной графики? Это язык общего значения.

S>>>>А конкатенация — актуальна для всего.

M>>>И как же нам скантатенировать два элемента struct { int x; void* y; }?
S>>Конкатенация массивов/списков — просто создаете новый массив, который по длине равен двум — и копируете ссылки на элементы.
M>Ну, если конкатенация актуальна для всего как сконкатенировать два объекта этой структуры?

Мы о конкатенации СПИСКОВ!!! А элементы невозможно конкатенировать, за редким исключением.
Re[21]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 05.12.21 19:52
Оценка:
S>>>А причем тут геймдев?
M>>Сложение векторов это одна из основных операций в компьютерной графике.
S>И? C# — это что, язык исключительно для компьютерной графики? Это язык общего значения.
Так и сложение векторов используется не только в графике.

S>>>>>А конкатенация — актуальна для всего.

M>>>>И как же нам скантатенировать два элемента struct { int x; void* y; }?
S>>>Конкатенация массивов/списков — просто создаете новый массив, который по длине равен двум — и копируете ссылки на элементы.
M>>Ну, если конкатенация актуальна для всего как сконкатенировать два объекта этой структуры?
S> Мы о конкатенации СПИСКОВ!!! А элементы невозможно конкатенировать, за редким исключением.
А, я просто думал что "конкатенация — актуальна для всего". Ошибался видимо.
Re[19]: Индексы и прочие новшества - умеют ли...
От: samius Россия http://sams-tricks.blogspot.com
Дата: 05.12.21 20:12
Оценка:
Здравствуйте, Shmj, Вы писали:

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


S>Для чего вы вообще используете массивы/списки?

Чаще всего для того, что бы пробежать по последовательности более одного раза внутри одного метода. Но даже если в своей двоичной сериализации данных, не помню, что бы мне нужна была конкатенация массивов. Может быть она кажется простым решением в некоторых случаях, но это шикарный способ заскочить в LOH лишний раз.
S>Вообще мешать не будет. Кроме как однозначная конкатенация — других разумных вариантов нет. Если поэлементное складывание — то как быть с переполнением, как складывать типы, отличные от целых чисел?
Мешать-то не будет. Для чего она нужна?
Ну да ладно, допустим, интероп. Но как часто вообще нужен интероп и тем более, конкатенация массивов для него? В моей практике не каждые 5 лет такое бывает.

S>+ можно добавить — как для строк. Кто не хочет — можно не использовать.

Ну да строки-то мы складываем каждый день не по разу, однако, чем дальше, тем реже. Благодаря интерполяции.
Re[22]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 05.12.21 20:16
Оценка:
Здравствуйте, Muxa, Вы писали:

S>>И? C# — это что, язык исключительно для компьютерной графики? Это язык общего значения.

M>Так и сложение векторов используется не только в графике.

Я ни разу не сталкивался — ни в какой области.

S>>>>>>А конкатенация — актуальна для всего.

M>>>>>И как же нам скантатенировать два элемента struct { int x; void* y; }?
S>>>>Конкатенация массивов/списков — просто создаете новый массив, который по длине равен двум — и копируете ссылки на элементы.
M>>>Ну, если конкатенация актуальна для всего как сконкатенировать два объекта этой структуры?
S>> Мы о конкатенации СПИСКОВ!!! А элементы невозможно конкатенировать, за редким исключением.
M>А, я просто думал что "конкатенация — актуальна для всего". Ошибался видимо.

Умейте читать в контексте — конкатенация списка актуальна для любого типа элемента списка. Не нужно реализовывать + для отдельных элементов.
Re[23]: Индексы и прочие новшества - умеют ли...
От: Muxa  
Дата: 05.12.21 20:59
Оценка:
S>Умейте читать в контексте — конкатенация списка актуальна для любого типа элемента списка.
Даже если список с циклом?

S> Не нужно реализовывать + для отдельных элементов.

Погоди, погоди, это что получается если мне нужно поэлементно применить некоторую операцию к элементам контейнера, то я должен реализовать эту операцию для этих элементов?
Прям вечер откровений какой-то.
Отредактировано 05.12.2021 21:00 Muxa . Предыдущая версия .
Re: Индексы и прочие новшества - умеют ли...
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 06.12.21 02:15
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Особо не смотрел.


using System;
using System.Linq;
using static ArrayFunctions;

var a = new[] { 1, 2, 3 }; 
var b = new[] { 4, 5, 6 };
var c = a.Concat(b).ToArray();
var d = a.Union(b).ToArray();
var e = a.Plus(b);
var j = plus(a,b);// <= забавно, функция занимает столько же символов сколько и метод.


Чем '+' семантически лучше метода?

public static class ArrayExt {
    public static T[] Plus<T>(this T[] array,T[] add) => array.Union(add).ToArray();
}

public static class ArrayFunctions {
    public static T[] plus<T>(T[] array,T[] add) => array.Plus(add); 
}
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.