Size: a a a

2021 March 03

А

Алексей in rust_offtopic
Roman Blog
Да, это два подхода. Но здесь нужно понимать, что первый подход продиктован именно ограничением базовой модели. Все эти выводы типов академические мономорфны и на полиморфизм их расширили только номинально - назвав им подтипы.

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


По поводу контракта. Здесь всё не совсем так. Именно функция описывает свой контракт, той логикой что в ней описано - это набор операций. Это тот самый структурный подход. И ей абсолютно неважно какие там типы, какие входы, какие операции. Как эти операции определены для типов.
. Именно функция описывает свой контракт, той логикой что в ней описано - это набор операций.

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

А

Алексей in rust_offtopic
В принципе примерно также на динамической типизации можно писать
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
"академический" подход основан на математике - аппарат, который тыщи лет развивался и имеет кучу полезных свойств. Из разряда "гарантируется что переменая этих двух строк кода не повлияет на результат". А во втором подходе оно нарушается - если мы написали функцию для типов 2 и 3, а кто-то вызвал функцию с 5, то в лучшем случае мы получим ошибку компиляции, а в худшем - ошибку в рантайме
источник

RB

Roman Blog in rust_offtopic
это разница может существовать именно потому, что функции как таковая не функция. Это некая обобщённая логика. Вот здесь и проходит граница. В рамках одного подхода функция не должна мочь исполняться. А в рамках другого должна.

Поэтому в одном случае мы можем получить "Конфигурацию" из вызова, а в другом нет и мы обязаны всё это описывать
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
то есть у функци нет контракта. Она называется foo и принимает 2 типов которые что-то там делают. Сказать что она делает не смотря в тело просто невозможно
источник

А

Алексей in rust_offtopic
ну то есть как обычно в C++ шаблонах
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
то есть в моем понимании какого-то конкретного контракта у неё нет. ну как нет - он есть, но нигде не описан. Нужно лезть в кишки чтобы понять какой он
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
как в каком-нибудь питухоне
источник

RB

Roman Blog in rust_offtopic
и описывать очень криво, потому что информации слишком много и мы не можем её выразить за разумную цену. Поэтому эти функции имеют очень строгие ограничения и прочее
источник

RB

Roman Blog in rust_offtopic
Αλεχ Zhukovsky
"академический" подход основан на математике - аппарат, который тыщи лет развивался и имеет кучу полезных свойств. Из разряда "гарантируется что переменая этих двух строк кода не повлияет на результат". А во втором подходе оно нарушается - если мы написали функцию для типов 2 и 3, а кто-то вызвал функцию с 5, то в лучшем случае мы получим ошибку компиляции, а в худшем - ошибку в рантайме
Ну вот такова она реальность. Математика ничего не смогла родить и не может, потому что математика это просто язык. Причём зачастую очень синтетически и ограниченный. Как раз таки в силу его природы
источник

А

Алексей in rust_offtopic
Αλεχ Zhukovsky
то есть в моем понимании какого-то конкретного контракта у неё нет. ну как нет - он есть, но нигде не описан. Нужно лезть в кишки чтобы понять какой он
вообще вершиной мастерства был бы вывод определённого контракта для типов параметров
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Алексей
вообще вершиной мастерства был бы вывод определённого контракта для типов параметров
ну хачкель умеет выводить более-менее неплохо, но это считается дурным тоном, именно потому что у тебя имплементейшн детали вытекают в интерфейс
источник

А

Алексей in rust_offtopic
Roman Blog
Ну вот такова она реальность. Математика ничего не смогла родить и не может, потому что математика это просто язык. Причём зачастую очень синтетически и ограниченный. Как раз таки в силу его природы
на этом очень ограниченном языке физики всю свою физику описали
источник

RB

Roman Blog in rust_offtopic
Roman Blog
Ну вот такова она реальность. Математика ничего не смогла родить и не может, потому что математика это просто язык. Причём зачастую очень синтетически и ограниченный. Как раз таки в силу его природы
Поэтому в математике реководствуют "лучше хуже, но полно". Если мы что-то не можем формализовать - нахрен это ненужно. Упрощаем
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
ну то есть у тебя функа возвращает хэшмап - это деталь реализации или контракт? Возможно ты просто хочешь вернуть Iterable, без уточнения что это
источник

А

Алексей in rust_offtopic
в итоге открыв полупроводники, из которых инженеры (опять же с использованием математики) создали компухтеры
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Roman Blog
Ну вот такова она реальность. Математика ничего не смогла родить и не может, потому что математика это просто язык. Причём зачастую очень синтетически и ограниченный. Как раз таки в силу его природы
математика кучу всего полезного дала, ты не прав. Тьюринг придумал чисто теоретическую машину, потом её реализовали в железе. Без теории до компуктеров додуматься было бы трудно
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
короч не хочу спорить про роль математики в истории
источник

А

Алексей in rust_offtopic
Αλεχ Zhukovsky
ну хачкель умеет выводить более-менее неплохо, но это считается дурным тоном, именно потому что у тебя имплементейшн детали вытекают в интерфейс
я имею ввиду именно в полиморфизме как у крестов
источник

RB

Roman Blog in rust_offtopic
Алексей
на этом очень ограниченном языке физики всю свою физику описали
Это ничего не значит. Описать можно что угодно на чём угодно. Вопрос в применимости
источник