Size: a a a

2021 February 19

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Ilya Lakhin
И зачем это вообще надо? Как эти телодвижения улучшают корректность программы с точки зрения системы типов?

Вот например(это псевдокод) у меня есть такая программа:


var foo = {a: 100, b: 200.0}; // я хочу чтобы он мне вывел тут что foo типы {a: int, b: float}

function bar(param: {a: int}) {
}

// я хочу, чтобы тут он понял, что я передаю объект, соответствующий запрошенному интерфейсу.
bar(foo)


Вот эти все "я хочу" вполне выводятся в компил-тайме без взяких именованных интерфейсов, тайпклассов и прочего обслуживания компилятора.
Ок, давай я такой вопрос задам: как в твоем чудо-коде не читая тело foo понять, что она ожидает объект с интовым полем a?
источник

А⚙

Антон ⚙️ in rust_offtopic
Ilya Lakhin
function foo(something_to_sting: {to_string: (x) -> String})


условно говоря так.
Из строки, а не наоборот
источник

IL

Ilya Lakhin in rust_offtopic
Антон ⚙️
Даже если значение из одной либы, а функция — из другой?
Если мы хотим энфорсить семантику(сразу отвечаю @emmanuelGoldstein ), мы можем это сделать специфицируя интерфейс более точно, добавив в него что-то помимо to_string.
источник

Z

Zaner in rust_offtopic
Iv@n Dereviankin
Когда раст 2.0 выйдет == когда рак на горе свиснет
да, и поэтому нужно что-то типа Boost
источник

EG

Emmanuel Goldstein in rust_offtopic
Ilya Lakhin
Если мы хотим энфорсить семантику(сразу отвечаю @emmanuelGoldstein ), мы можем это сделать специфицируя интерфейс более точно, добавив в него что-то помимо to_string.
У меня идея — давайте добавлять в интерфейс специальную функцию function this_implements_interface_foobar(), которая будет просто сигнализировать, что мы не перепутали интерфейсы
источник

IL

Ilya Lakhin in rust_offtopic
Αλεχ Zhukovsky
Ок, давай я такой вопрос задам: как в твоем чудо-коде не читая тело foo понять, что она ожидает объект с интовым полем a?
А почему не читать тело кода? Из него, между прочим, вполне можно интерфейс параметров вывести
источник

EG

Emmanuel Goldstein in rust_offtopic
Можно сделать шорткат для объявления такой функции — скажем, добавлять её, когда человек пишет impl Foobar for T
источник

EG

Emmanuel Goldstein in rust_offtopic
Подождите...
источник

KR

Kai Ren in rust_offtopic
Emmanuel Goldstein
У меня идея — давайте добавлять в интерфейс специальную функцию function this_implements_interface_foobar(), которая будет просто сигнализировать, что мы не перепутали интерфейсы
И ой... дактайпинг развалился...
источник

EG

Emmanuel Goldstein in rust_offtopic
Kai Ren
И ой... дактайпинг развалился...
тред не читай — сразу отвечай
источник

IL

Ilya Lakhin in rust_offtopic
Emmanuel Goldstein
У меня идея — давайте добавлять в интерфейс специальную функцию function this_implements_interface_foobar(), которая будет просто сигнализировать, что мы не перепутали интерфейсы
Семантику вполне можно форсировать на уровне типов.
источник

EG

Emmanuel Goldstein in rust_offtopic
Да, эта была шутка про то, что получатся обычные трейты
источник

KR

Kai Ren in rust_offtopic
Emmanuel Goldstein
Да, эта была шутка про то, что получатся обычные трейты
Не получатся.
источник

IL

Ilya Lakhin in rust_offtopic
Emmanuel Goldstein
Да, эта была шутка про то, что получатся обычные трейты
Да я понял вашу мысль, просто мне кажется вы мою не совсем поняли
источник

EG

Emmanuel Goldstein in rust_offtopic
Kai Ren
Не получатся.
Получатся, с должным количеством инструментов.
источник

KR

Kai Ren in rust_offtopic
Дайтайпинг проебали, и арелизовать для чужого типа всё ещё не можем.
источник

EG

Emmanuel Goldstein in rust_offtopic
Kai Ren
Дайтайпинг проебали, и арелизовать для чужого типа всё ещё не можем.
Ну почему не можем?
источник

EG

Emmanuel Goldstein in rust_offtopic
См. Ruby, в котором можно «открыть класс заново»
источник

EG

Emmanuel Goldstein in rust_offtopic
Включая чужой
источник

KR

Kai Ren in rust_offtopic
Ну не добавишь ты эту функцию чужому типу никак.
источник