Re[2]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 06.12.21 03:01
Оценка:
Здравствуйте, vaa, Вы писали:

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


Нагляднее.
Re[3]: Индексы и прочие новшества - умеют ли...
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 06.12.21 06:32
Оценка:
Здравствуйте, Shmj, Вы писали:

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


S>Нагляднее.


Субъективно.

(+ a b)
(add a b)


let c = (+) a b;
let c =  a + b;
let c =  a |> ((+) b);



Вопросов масса. Тут даже нет у участников какой-то четкой позиции по поводу нужности.
что насчет удобства работы с кодом? будет ли код обобщеннее, легче рефакторится, чем код на функциях или методах?
Вдруг захочется пооптимизировать '+', не проще ли это будет с методом?

вот кстати еще один вариант (из пхп), и это не сложение:

$a + $b Объединение

так что, + это сложение или объединение массивов?
Re[4]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 06.12.21 12:01
Оценка:
Здравствуйте, vaa, Вы писали:

S>>Нагляднее.

vaa>Субъективно.

Ну уберите тогда операторы из языка — оставьте только функции. А вместо {} — пишите begin|end.

vaa>[/q]

vaa>так что, + это сложение или объединение массивов?

Только конкатенация как в python не вызывает проблем.
Re[5]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 06.12.21 12:31
Оценка: 3 (1)
Здравствуйте, Shmj, Вы писали:

S>Ну уберите тогда операторы из языка — оставьте только функции. А вместо {} — пишите begin|end.

У меня для вас хорошие новости — помимо по сю пору платного Дельфи, есть ещё и FreePascal. Там всё ровно так, как вы заказываете — и begin/end, и отсутствие перегрузки операторов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[5]: Индексы и прочие новшества - умеют ли...
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 07.12.21 02:36
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Ну уберите тогда операторы из языка — оставьте только функции. А вместо {} — пишите begin|end.

Ну так это Виртом и его Oberon доказано уже, что чем проще ЯП тем он более надежный.
C++ почему ругают потому что там столько правил, что не нарушить хотя бы одно не может ни один джедай.
если же принять единственную возможную форму (Функция аргументы), то это освоит любой.
Где-то читал эссэ про лисп, там есть фраза "если бы скобки были единственной проблемой..."
Как-то так.
Эту же мысль можно и объединению массивов можно применить. Неужели это проблема которая не дает делать простые и надежные программы?
Re[6]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 07.12.21 03:33
Оценка:
Здравствуйте, vaa, Вы писали:

S>>Ну уберите тогда операторы из языка — оставьте только функции. А вместо {} — пишите begin|end.

vaa>Ну так это Виртом и его Oberon доказано уже, что чем проще ЯП тем он более надежный.

Тут не надежность а наглядность важна. К спец. символам мозг привыкает и как бы выхватывает из общего текста. Слова еще прочесть нужно — а спец. символ сразу распознается.
Re[7]: Индексы и прочие новшества - умеют ли...
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 07.12.21 07:00
Оценка:
Здравствуйте, Shmj, Вы писали:

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


Гомоиконичность наглядее же, плюс ко всему функцию '+' можно компоузить, передавать и .т.д. первоклассная сущность, а операторы это "деревянные игрущки прибитые гвоздями к потолку"

(let ((f #'+))
   (funcall f 1 1))
;; => 2
Re[15]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 07.12.21 11:12
Оценка: 3 (1) +2 :)
Здравствуйте, Shmj, Вы писали:
S>Если число не вмещается в 8 байт, вестимо. Для этого ведь предлагают реализовать оператор + как сложение чисел?
Давайте всё же отложим в сторону чайную ложку, соду, зажигалку, и пакетик с порошком, похожим на муку.

Массив — это очень низкоуровневая конструкция. Она может использоваться для большого количества разных применений.
Использование его в качестве "целого числа большой разрядности" — изрядная экзотика. Очень странно, что именно она первой пришла вам в голову.
Гораздо более частым случаем является использование массива для воплощение алгебраической концепции вектора.
И сложение векторов в алгебре традиционно является поэлементной суммой. Применимо оно, естественно, только к векторам одинакового размера.
Никакого little-endian или big-endian там нет, как нет и "переноса переполнения".
Если в алгебре у нас встречается сумма разноразмерных векторов, то обычно подразумевается наличие операции повышения размерности — то есть двумерный вектор (4, 5) эквивалентен трёхмерному вектору (4, 5, 0) и четырёхмерному (4, 5, 0, 0).
Именно такое векторное сложение реализует предлагаемое выше по треду поэлементное сложение.

Мы можем использовать вектора-поверх-массивов и для других задач — например, i-й элемент массива соответствует количеству объектов i-го класса в нашей выборке (см. задачи классификации, ML и прочий data science).
В таком случае поэлементная сумма по-прежнему является корректным результатом для, к примеру, агрегации векторов, построенных по двум разным выборкам.

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

Опять-таки, встраивать такое поведение прямо в базовую конструкцию "массив однотипных элементов" — оверкилл.
Мы ожидаем подобного поведения от более высокоуровневых конструкций типа https://docs.microsoft.com/en-us/dotnet/api/system.numerics.vector3.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[16]: Индексы и прочие новшества - умеют ли...
От: vaa https://www.youtube.com/playlist?list=PLtrvASfI1KW7VOYRKjglcagQzWLoxlncl
Дата: 07.12.21 12:24
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Мы ожидаем подобного поведения от более высокоуровневых конструкций типа https://docs.microsoft.com/en-us/dotnet/api/system.numerics.vector3.


или как в ДИ особый синтаксис, впрочем в ди массивы более универсальны чем в шарпе:
    auto a = [1,2,3];
    auto b = [3,4,5];
    auto c = new int[3];
    c[] = a[] + b[]; // сложение => [4, 6, 8]
    auto d = a ~ b; // сцепление => [1, 2, 3, 3, 4, 5]
Re[7]: Индексы и прочие новшества - умеют ли...
От: karbofos42 Россия  
Дата: 07.12.21 14:29
Оценка:
Здравствуйте, Shmj, Вы писали:

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


S>>>Ну уберите тогда операторы из языка — оставьте только функции. А вместо {} — пишите begin|end.

vaa>>Ну так это Виртом и его Oberon доказано уже, что чем проще ЯП тем он более надежный.

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


Прикол в том, что кому нужна будет эта операция, всё равно будет использовать свои обёртки.
Потому что вот эти пересоздания массивов — такое себе решение.
Для всяких префиксов и прочей фигни я скорее всего напрямую в Stream буду данные пихать, а не пересобирать сотню массивов и копировать элементы туда-сюда.
Для строк StringBuilder не просто так придумали, хоть и есть оператор +.
Наглядность записи типа var e = a + b + c + d всё равно поделится на ноль тем фактом, то там будет создано 3 массива и куча лишних копирований элементов,
что нормальные разработчики это использовать не будут и будут на форумах писать, что в майкрософте наркоманы, добавляют в язык всякий хлам, а не какие-то нужные вещи.
Re[8]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 07.12.21 16:45
Оценка:
Здравствуйте, karbofos42, Вы писали:

K>Наглядность записи типа var e = a + b + c + d всё равно поделится на ноль тем фактом, то там будет создано 3 массива и куча лишних копирований элементов,


Вот, хотел привести пример строк. Тоже вроде как + на практике редко где применим, когда необходима именно работа со строками, однако он есть. И таки используете для второстепенных целей, когда нет требования к ресурсам (к примеру для быстрого тестового приложения — когда нужно быстро запустить и посмотреть как отработает). Добавить + в StringBuilder — было бы красивее, кста.

Для массивов и списков та же идея. Если хочешь экономии ресурсов — то не применяй.
Отредактировано 07.12.2021 16:47 Shmj . Предыдущая версия . Еще …
Отредактировано 07.12.2021 16:47 Shmj . Предыдущая версия .
Re[9]: Индексы и прочие новшества - умеют ли...
От: samius Россия http://sams-tricks.blogspot.com
Дата: 07.12.21 16:56
Оценка: +2
Здравствуйте, Shmj, Вы писали:

S>Добавить + в StringBuilder — было бы красивее, кста.

Применение + к StringBuilder-у отвратительно, т.к. оператор не должен изменять операнды. Но если (+) не будет изменять StringBuilder, то в чем тогда смысл?
Re[10]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 07.12.21 21:15
Оценка:
Здравствуйте, samius, Вы писали:

S>Применение + к StringBuilder-у отвратительно, т.к. оператор не должен изменять операнды. Но если (+) не будет изменять StringBuilder, то в чем тогда смысл?


Можно += перегрузить.
Re[11]: Индексы и прочие новшества - умеют ли...
От: samius Россия http://sams-tricks.blogspot.com
Дата: 08.12.21 04:49
Оценка: 18 (1)
Здравствуйте, Shmj, Вы писали:

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


S>>Применение + к StringBuilder-у отвратительно, т.к. оператор не должен изменять операнды. Но если (+) не будет изменять StringBuilder, то в чем тогда смысл?


S>Можно += перегрузить.


Составные операторы присваивания не могут быть перегружены явным образом. Однако при перегрузке бинарного оператора соответствующий составной оператор присваивания (если таковой имеется) также неявно перегружается. Например, += вычисляется с помощью +, который может быть перегружен.

https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/operators/operator-overloading
Re[16]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 09.12.21 01:43
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Гораздо более частым случаем является использование массива для воплощение алгебраической концепции вектора.


Что насчет списков?
Re[17]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 09.12.21 02:41
Оценка:
Здравствуйте, Shmj, Вы писали:
S>Что насчет списков?
Списки достаточно плохо годятся для воплощения алгебраической концепции вектора.
Что конкретно вас интересует?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re[18]: Индексы и прочие новшества - умеют ли...
От: Shmj Ниоткуда  
Дата: 09.12.21 03:51
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>Что насчет списков?

S>Списки достаточно плохо годятся для воплощения алгебраической концепции вектора.
S>Что конкретно вас интересует?

Знак + для списков вестимо, об этом же говорим.
Re[19]: Индексы и прочие новшества - умеют ли...
От: Sinclair Россия http://corp.ingrammicro.com/Solutions/Cloud.aspx
Дата: 09.12.21 06:32
Оценка:
Здравствуйте, Shmj, Вы писали:
S>Знак + для списков вестимо, об этом же говорим.
Для каких именно списков?
Тут возникает масса малоприятных нюансов.
Смотрите: оператор резолвится статически на основе формальных типов параметров. Нормального способа сделать оператор виртуальным не существует, по крайней мере в рамках привычного нам ООП с полиморфизмом по нулевому аргументу.

Это означает, что при наследовании типов у вас могут получаться совершенно контринтуитивные результаты.
Например, если у вас определён оператор + для аргументов List<T>, то к List<T> можно будет прибавлять экземпляры не только List<T>, но и его потомков.
Результат, правда, окажется всё того же типа List<T>. Ну, это вроде бы ладно — прибавили мы к List<System.Data.Services.ExpandSegment> какой-нибудь System.Data.Services.ExpandSegmentCollection, получили List<System.Data.Services.ExpandSegment>. Вроде норм. Но вот забавно — мы можем попробовать сложить два экземпляра System.Data.Services.ExpandSegmentCollection, но получим вовсе не System.Data.Services.ExpandSegmentCollection, а по-прежнему List<System.Data.Services.ExpandSegment>.

Исправить это не так-то легко. Если вы попробуете напилить непротиворечивую реализацию "оператора сложения для списков", вы поймёте причину.

Для класса string эти соображения не действуют, т.к. он sealed.
Но у нас нет sealed-класса для списков.

Даже для массивов у нас возникнут затруднения при описании оператора сложения.

В той реализации, которую я предлагал, b + d превращается в b.Concat(d).
Прикол в том, что это будет работать и для случаев
b = new Base[1];
d = new Derived[1];

Результатом у нас, очевидно, должен быть массив Base[2].
Попробуйте написать такое определение и реализацию метода Concat, чтобы (d + b) давало не ошибку компиляции, а по-прежнему Base[2].
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
http://rsdn.org/File/5743/rsdnaddict.GIF
Re: Индексы и прочие новшества - умеют ли...
От: Vladek Россия Github
Дата: 09.12.21 14:02
Оценка:
Здравствуйте, Shmj, Вы писали:

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


S>byte[] array1 = ...

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

S>?


Это будет уже другой тип данных. Надо смотреть в сторону ArrayBufferWriter<T> и других типов из пространства System.Buffers.
http://files.rsdn.org/43395/hr-kyle-theisen-04.png
Re[3]: Индексы и прочие новшества - умеют ли...
От: Ночной Смотрящий Россия  
Дата: 11.01.22 06:38
Оценка:
Здравствуйте, fk0, Вы писали:

fk0> Вот поэтому C# -- кривая паделка микрософта, а C++ -- язык будущего.

fk0>Куда в .NET не ткни -- прибито гвоздями и компиляторная магия.
fk0>Всё здорово и замечательно только в проектах уровня хелло-ворлд, как до дела
fk0>доходит, сразу проблемы.

Спасибо что пришел сюда рассказать нам об этом.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.