Multiple dispatch и его полезность
От: Воронков Василий Россия  
Дата: 19.03.19 08:49
Оценка: 5 (1)
Привет!

Понятно, что в ряде случаев удобно, когда диспатч метода (в данном случае неважно — статически или динамически) происходит по типу нескольких аргументов(см. те же мультиметоды). Типичный пример удобства такого диспатча — математические операторы, где могут быть int + float и float + float. Последние, к слову, весьма неловко выражаются в чистом ООП, где диспатч происходит по типу первого аргумента.

А теперь, собственно, вопрос.

То, что операторы с мульти-диспатчем — полезны, сомнений не вызывает, но можете ли вы привести примеры полезных функций, где требуется диспатч по >2 двум аргументам?
Re: Multiple dispatch и его полезность
От: AlexRK  
Дата: 19.03.19 18:36
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


Поскольку в мейнстримовых языках мультиметодов нет, то "всё кажется гвоздями", т.е. нормальных примеров что-то в голову не приходит. По идее, это должна быть некая операция в нескольких "измерениях".
Re: Multiple dispatch и его полезность
От: vsb Казахстан  
Дата: 19.03.19 19:04
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


Паттерн визитор это реализация динамического диспатча по двум аргументам через динамический диспатч по одному аргументу. Соответственно везде, где он применяется.
Отредактировано 19.03.2019 19:06 vsb . Предыдущая версия .
Re[2]: Multiple dispatch и его полезность
От: AlexRK  
Дата: 19.03.19 19:08
Оценка:
Здравствуйте, vsb, Вы писали:

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


vsb>Паттерн визитор это реализация динамического диспатча по двум аргументам через динамический диспатч по одному аргументу. Соответственно везде, где он применяется.


Вопрос был про 3 аргумента и более.
Re[3]: Multiple dispatch и его полезность
От: vsb Казахстан  
Дата: 19.03.19 19:22
Оценка:
Здравствуйте, AlexRK, Вы писали:

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


vsb>>Паттерн визитор это реализация динамического диспатча по двум аргументам через динамический диспатч по одному аргументу. Соответственно везде, где он применяется.


ARK>Вопрос был про 3 аргумента и более.


Невнимательно прочитал, извиняюсь.
Re: Multiple dispatch и его полезность
От: qaz77  
Дата: 20.03.19 12:37
Оценка: 8 (1) +1
Здравствуйте, Воронков Василий, Вы писали:
ВВ>То, что операторы с мульти-диспатчем — полезны, сомнений не вызывает, но можете ли вы привести примеры полезных функций, где требуется диспатч по >2 двум аргументам?

Когда-то писал интерпретатор формул. Там для бинарных операций (сложение, вычитание, ...) и разных типов аргументов (числа, даты, ...) делался трехмерный массив указателей на функции.
По сути, виртуальные функции от трех типов: тип бинарной операции, тип первого аргумента, тип второго аргумента.
Для тернарных операций был бы мульти-диспатч по четырем типам.

Только массив этот был сильно разреженный, большинство элементов были нулевыми указателями.
Например, умножение даты на число смысла не имеет и не задается указателя на соответствующую функцию.

Задание всего набора виртуальных функций для 2, 3-х и более мерного диспатча скорее всего будет избыточным и громоздким.
Гвоздями прибивается знание всех значений по всем измерениям.

Тут уже правильно вспомнили визитор. Удобная вещь для 2-мерного случая.
Знать надо только все типы посещаемых элементов, а множество типов визиторов — открытое.
Re[2]: Multiple dispatch и его полезность
От: Ночной Смотрящий Россия  
Дата: 23.03.19 10:58
Оценка: +1
Здравствуйте, qaz77, Вы писали:

Q>Тут уже правильно вспомнили визитор. Удобная вещь для 2-мерного случая.


Жутко неудобная, но в мейнстриме ничего удобнее все равно нет. Да и мультиметоды тоже громоздки. Нормальный паттерн матчинг гибче и удобнее на порядок.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re: Multiple dispatch и его полезность
От: B0FEE664  
Дата: 26.03.19 13:00
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


А паттерн Сигнал-Слот подходит под ответ?
Имеется ввиду, следующее понимание паттерна Сигнал-Слот: у нас есть набор типов не знающие ничего друг о друге и некий конструкт, который диспетчеризирует сигналы с X-набором параметров одного типа в вызов(ы) методов другого типа с Y набором параметров.
И каждый день — без права на ошибку...
Re[3]: Multiple dispatch и его полезность
От: AlexRK  
Дата: 26.03.19 13:14
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Жутко неудобная, но в мейнстриме ничего удобнее все равно нет. Да и мультиметоды тоже громоздки. Нормальный паттерн матчинг гибче и удобнее на порядок.


Паттерн-матчинг не является ни эквивалентом, ни заменой мультиметодов — он нерасширяем.
Re[4]: Multiple dispatch и его полезность
От: Ночной Смотрящий Россия  
Дата: 26.03.19 19:27
Оценка:
Здравствуйте, AlexRK, Вы писали:

НС>>Жутко неудобная, но в мейнстриме ничего удобнее все равно нет. Да и мультиметоды тоже громоздки. Нормальный паттерн матчинг гибче и удобнее на порядок.

ARK>Паттерн-матчинг не является ни эквивалентом, ни заменой мультиметодов — он нерасширяем.

Эквивалентом не является, он намного мощнее мультиметодов. Мультиметоды это просто частный, синтаксически громоздкий случай.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[5]: Multiple dispatch и его полезность
От: AlexRK  
Дата: 26.03.19 20:51
Оценка: +2 :)
Здравствуйте, Ночной Смотрящий, Вы писали:

ARK>>Паттерн-матчинг не является ни эквивалентом, ни заменой мультиметодов — он нерасширяем.


НС>Эквивалентом не является, он намного мощнее мультиметодов. Мультиметоды это просто частный, синтаксически громоздкий случай.


Мультиметод — это НЕ частный случай паттерн-матчинга. Паттерн-матчинг нерасширяем, а мультиметоды имеют открытую природу.
Re: Multiple dispatch и его полезность
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.04.19 19:14
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


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

У мульти-методов есть проблемы с динамической расширяемостью и модульностью. В средах вроде дотнета или явы сборки/классы могут загружаться и даже выгружаться в рантайме. При этом должно меняться и поведение мультимедовов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.