Vladimir
https://youtu.be/XUqiMEh2PMc
Nik
Берется самый худший из наихудших и умножается на число PI/2
а потом увеличивается на порядок - и вот они, сроки
Michael
посчитали, помножили на три, взяли на порядок выше, - вуаля
A64m
а как, кстати, в расте специализация устроена? Там вообще раздельная компиляция есть? Или специализации под размер делают, а не конкретный тип?
Vladimir
Про какую специализацию ты
Alexander
fn foo(Result<A,B>) -> ..
Vladimir
То что через рфц для трейтов, или разные built-in для општнов
A64m
про специализацию конструктора, не знаю, как это у вас в расте называется.
Alexander
а, точно я не то пишу
Alexander
вот Result<A,B> он же не создает boxed значений
Vladimir
А что значит специализация под размер?
Alexander
соотвественно размер и функции работающие с ним зависят от типов A, и B
Alexander
и нужна специализация под них
Alexander
хотя @A64m_qb0 более правильными словами скажет, чего я влез
Maxim
вот Result<A,B> он же не создает boxed значений
если правильно понимаю, нужно, чтоб A и B имплементировали Sized
Alexander
т.е. вопрос в том, как устроена специализация, делаются ли версии функций под разные наборы размеров (и все равно какой тип внутри)
Vladimir
Для этого обычно не нужна специализация
Vladimir
xy-promblem
Vladimir
Короче по специализацияи ты можешь определить специальную реализацию для более конкретного типа
A64m
как же не нужна-то
A64m
для разных размеров нужны разные конструкторы Result
Vladimir
та о каких размерах ты говоришь?
A64m
ну вот у нас тупл (Int,(Int,Int)) если в языке универсальное представление, то размер под пейлоад у конструктора тупла всегда размер указателя * 2
Влод
там в стек должна положиться структура одинакового размера для разных конструкторов типа почему так - не помню. здесь наверное лучше знать о таком
Влод
Sized вроде не про то
A64m
либо нам надо делать для этого случая специализацию под размер инта * 3
A64m
либо конктерную специализацию под типы
Vladimir
В языке нет универсального представления
Влод
с Either не так интересно тк там два Boxed ссылки на разных конструкторах. так что по идее интереснее Maybe
A64m
понятно, что в расте не универсальное представление, потому и вопрос как специализация-то работает
Vladimir
специализация - это конструкция для пользователя, которая позволяет реализовать шаблон еще раз, для более частного случая
Vladimir
ты спрашиваешь, про memory_layout
Vladimir
причем тут специализация
A64m
ну я не знаю, как у вас это называется
Alexander
специализация функции - это генерация кода для конкретных типов
Alexander
возможно в rust специлазицией называется что-то другое, а это называется другим словом
Alexander
ну или не функции, а и типа данных в т.ч.
Vladimir
https://ru.wikipedia.org/wiki/Параметрический_полиморфизм#.D0.9C.D0.BE.D0.BD.D0.BE.D0.BC.D0.BE.D1.80.D1.84.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F
Vladimir
это называется мономорфизация
Vladimir
тебе нужно узнать как компилятор это все развернет в инструкции ассемблера?
Vladimir
у нас нет стабильного abi
A64m
мне интересно устройство в общих чертах
A64m
мономорфизацией обычно называют то, что я называл специализацией конструктора под конкретный тип
Vladimir
есть некий enum Option<T> { Some(T), None }его размер будет tag_size + Max_value_size
A64m
с размером то все понятно
A64m
он естественно будет одинаковый в случае специализации под тип и под размер
Vladimir
ок, тогда не понял твой пример с (Int, (Int,Int)
Vladimir
сейчас это будет одинаково (Int,Int,Int)
Vladimir
но это не гарантировано
A64m
одинаково в каком смысле, в смысле размера?
Vladimir
да
Vladimir
ты ж про размеры спрашиваешь
A64m
ну вот есть Some(T) и в программе где мы используем его есть Some(Int) и Some(UInt) (беззнаковое целое), размер у них одинаковый значит ли это что будут генерироваться специализации Some'Int и Some'UInt или будет одна на двоих какая-то Some'Byte8
Vladimir
мономорфизируется для каждого типа отдельно
Cuno
То, что размеры одинаковые - ничего не говорит
Vladimir
но это не значит, что у нас будет 500 функций, большинство из них будут инлайн.
A64m
т.е. раздельной компиляции нет, пока все типы не известны, код не сгенерировать?
Cuno
у типов поведения разное обычно
Vladimir
да
A64m
вот это я и хотел узнать, спасибо
Судзумия
Ну да, как уже написали, для каждого типа будет создана отдельная реализация во вреия компиляции
Anonymous
http://www.jonathanturner.org/2017/10/fun-facts-about-rust-growth.html
Anonymous
о
Vladimir
лол
Vladimir
посидел в гоферском чате, начал старые новости кидать
Vladimir
еще чучуть посидишь, и будешь Фичи из 80-х обозревать
Anonymous
да какая старая
Anonymous
сегодня только запостили
Vladimir
Vladimir
да какая старая
уже кидали, значит старая
Sherzod
От чего ж вы так гоферов не взлюбили?
Vladimir
мы их любимы
Vladimir
мы обсуждаем го, чаще чем раст
Vladimir
разве - это не любовь?
Маjко
A64m
да фичи из 80 до сих пор нормально смотрятся. В го и с фичами из 70 неважно дела обстоят
Sherzod
мы обсуждаем го, чаще чем раст
Ну тут это ладно. Я уже сомневаюсь что это расточат