Vladimir
ну насчет мощности я б усомнился
Vladimir
просто в с++ первоначально вся система расхлебаная
Vladimir
вот и прихоится городить статик ассерты поверх
Маjко
Ну вот с ошибкой пока никак, насколько я понимаю. Только если свой процедурный макрос писать
Маjко
Но такой себе юзкейс
Маjко
Не особо вижу смысл в расте
Vladimir
кстати насчет константности еще раз: Вот вы говорите оператор + для примитивных типов тоже. Но при этом в конст функциях нельзя вызывать add. т.е. трейт реализован Поверх существующего оператора +, тупо чтобы можно было писать fn foo<INT:Add>(x:INT, y:INT) -> INT where ... {..}
Vladimir
Ну вот с ошибкой пока никак, насколько я понимаю. Только если свой процедурный макрос писать
Ну да, просто в расте нет даже статик ассертов. Вообще как мне кажется имя специализацию ошибку можно сделать
Vladimir
ну не факт
Anonymous
я читал где-то про это
Vladimir
ну ок
Vladimir
просто это брекинг ченж
Vladimir
мало ли что люди пихали в свои трейты
Маjко
Все функции?
Anonymous
нет конечно
Vladimir
а опционально нельзя сделать так
Vladimir
Все функции?
да, весь стд либ
Vladimir
и раст будет выполняться в компил тайме
Маjко
Отлично
Vladimir
чтоб еще больше бесконечных циклов раскручивалось
Vladimir
теперь компиляция будет еще дольше
Vladimir
хотя казалось бы, куда уж
Маjко
Можно будет написать компилер раста, который будет в компилтайме компилировать компилятор раста, который будет в компилтайме....
Vladimir
скорее всего после того как они все функции переведут на конст, и попытаются скомпилить компилятор раста, компилятор раста войдет в бесконечную рекурсию и не сможет скомпилироваться
Маjко
Нужно просто ОС переписать на расте
Маjко
Чтобы не было сегфолтов
Маjко
И переполнения стека в частности
Маjко
Тьюринг завещал бесконечную память, а из-за глупой сишки современные ОС не смогли сделать такими, как задумывал Тьюринг
Маjко
То ли дело на расте
Сережа
как раст защищает от переполнения стека?
Маjко
Силой сарказма
Маjко
(никак)
Сережа
но это же не по кодекондукт
Маjко
Сарказм или переполнение стека?
Сережа
рустер всегда вежлив и никогда не использует сарказм
Маjко
Я просто гошник под прикрытием
Маjко
Ты меня спалил
Влод
ну разве что извращениями вида is_even<Four>
ну константы тоже проблема. но как ты сделаешь для is_even<Four>() ?
Маjко
Смотри ссылку выше
Маjко
Подтверждаю, всё остальное уже готово https://play.rust-lang.org/?gist=f4cdf7786360b7471dd168b5f91972d3&version=nightly
Vladimir
кстати
Vladimir
в конст можно даже ансейф
Vladimir
юзать
Vladimir
круто?
Маjко
Это че, можно уронить компилятор дереференсом нуллпоинтера?
Влод
норм жаль что не могу проверить из-за нечитаемого ассемблера
Маjко
В процессе
Vladimir
raw pointers cannot be dereferenced in constant functions
Vladimir
можешь не проверять
Маjко
Жаль
Маjко
Ну зато можно уронить компилятор переполнением стека
Маjко
Уже хорошо
Маjко
И он не пишет где упал
Маjко
Можно просто оставить пасхалочку где-нибудь
Маjко
И ловить лулзы
Mike
Подтверждаю, всё остальное уже готово https://play.rust-lang.org/?gist=f4cdf7786360b7471dd168b5f91972d3&version=nightly
а я не понимаю, нахуй это делать через дженерики? в плюсах-то это сделано чтобы в компайл тайм делать, не? или тут какая-то более хитрая хуета?
Mike
ну так
Маjко
Ну
Mike
а почему бы это не сделать в компайл тайм с числом прост?
Mike
через ту же конст функцию?
Mike
ну типа
Mike
все началось с того что чувак спросил как такое в расте сделать
Маjко
Ну по идее да, не нужны дженерики
Mike
а оказалось что в расте можно сделать еще проще
Mike
и не стреляя из дробовика себе в жопу с целью сделать это аккуратно и задеть только гемморой
Маjко
все началось с того что чувак спросил как такое в расте сделать
По его вопросу ответ — никак. Потому что семантика у крестового кода — обвалиться в компилтайме с ошибкой, если число не четное
Mike
ну так, const fn is_even(int: i32) -> bool { if int % 2 == 0 { true } else { /* stack overflow */ } }
Mike
не?
Маjко
Почему вдруг SO?
Маjко
Ну и это не даст вообще никакой инфы
Mike
ну искусственно сделать
Mike
чтобы компилятор ебнулся
Маjко
Маjко
Это не сильно поможет
Mike
а нельзя ли перед этим ченить такое спиздануть на экранчик как-то