Berkus
ты передал константы и радуешься, что он отловил ошибки
ТАМ РАНТАЙМ ПРОВЕРКИ В ПРОЦЕДУРАХ В СТРОКАХ 6 И 24
Alexander "SonnySlave"
а, блядь. пролистать мне не судьба
Alexander "SonnySlave"
окей - а как такое отключить?
Berkus
перейти на с++
Alexander "SonnySlave"
перейти на с++
флага точно никакого нет?
Berkus
есть, RUSTC=gcc в переменных среды
Berkus
но писать придется на си
Alexander "SonnySlave"
😊
Alexander "SonnySlave"
понял. пасиб
Berkus
понял. пасиб
подозреваю что есть способ, ща
Alexander "SonnySlave"
подозреваю что есть способ, ща
http://huonw.github.io/blog/2016/04/myths-and-legends-about-integer-overflow-in-rust/ я вот что нашёл
Berkus
флага точно никакого нет?
олсо есть https://doc.rust-lang.org/stable/std/num/struct.Wrapping.html
Alexander "SonnySlave"
https://godbolt.org/g/3Gn3Su
о, проверки убрал. но переполнение осталось. Окей
Berkus
о, проверки убрал. но переполнение осталось. Окей
статья кстати верная, хоть и старая
Сережа
подозреваю что есть способ, ща
Проверки и паника при переполнении только в дебаг билде, в релиз билде проверок нет
Berkus
и что у нас случается при переполнении?
то что описано в спеке - two's complement wrap
Сережа
Но это не точно, один раз не растошиан
Сережа
Да то же что и в си
Berkus
Да то же что и в си
нет, в си случается UB
Berkus
а в расте нет
Berkus
можно прочитать если что, полезно
Berkus
http://huonw.github.io/blog/2016/04/myths-and-legends-about-integer-overflow-in-rust/ я вот что нашёл
Сережа
Да, хотел на это ссылку кинуть, выжимки: in debug mode, arithmetic (+, -, etc.) on signed and unsigned primitive integers is checked for overflow, panicking if it occurs, and, in release mode, overflow is not checked and is specified to wrap as two’s complement.
Berkus
> is specified to wrap as two’s complement. никакого UB как видишь
Ioann_
Ребят. Нубо вопрос. Как можно узнать подробную спецификацию своего процессора ? Ну типа, количество регистров для dbl precission вычислений и так далее ?
Ioann_
Да я не из С++ хочу, кек. Я хотел просто программно :) Через готовенькое уже.
Berkus
портабельно никак
Alexander "SonnySlave"
https://kristerw.blogspot.com.by/2018/01/gcc-back-end-performance-tuning.html
Anonymous
Парни, уткнулся в SIGSEGV, когда написал наследника std::error_category и заменил им std::system_category(). test_category instance; void test(std::error_code& ec) { ec = {1, test_category()}; // If replaced with: ec = {1, std::system_category()}; // or with: ec = {1, instance}; // then it works. } int main() { std::error_code ec; test(ec); ec.message(); // SIGSEGV here } Добавил виртуальный деструктор в test_category, как и положено, вызывается при выходе из test. Меня очень сильно удивило то, что всё прекрасно работает с категорией из std. Почему так и есть ли варианты фикса моего случая кроме глобального экземпляра? — Полный минимальный воспроизводимый пример, вывод LLDB, UBSan и Valgrind: https://hastebin.com/cegegirodi.cpp
Alexander "SonnySlave"
ec = {1, test_category()}; какой конструктор тут вызывается?
Anonymous
Дефолтный конструктор test_category, разумеется. Добавил его, вызывается исправно.
Alexander "SonnySlave"
Дефолтный конструктор test_category, разумеется. Добавил его, вызывается исправно.
error_code(int __v, const error_category& __cat) noexcept : _M_value(__v), _M_cat(&__cat) { } const error_category* _M_cat;
Alexander "SonnySlave"
он запоминает указатель на твою категорию. отсюда и ошибка
Anonymous
Хорошо, только... Каким боком с std::system_category работать может?
Anonymous
Я что-то совсем теряюсь в догадках.
Anonymous
И, блин, почему нет виртуальных конструкторов копирования?)
Berkus
потому что они нинужны?
Alexander "SonnySlave"
Alexander "SonnySlave"
Obtains a reference to the static error category object for errors reported by the operating system.
Berkus
Хорошо, только... Каким боком с std::system_category работать может?
а посмотреть в сорцы system_category() - оно поди синглтон
Alexander "SonnySlave"
static
Berkus
а, ну вот
Anonymous
Блин.
Anonymous
Обманщики.
Anonymous
Я думал, что это тип(
Berkus
ДОКИ НАДО ЧИТАТЬ
Anonymous
Очень похоже же.
Alexander "SonnySlave"
да... RTFM)
Anton
error_code(int __v, const error_category& __cat) noexcept : _M_value(__v), _M_cat(&__cat) { } const error_category* _M_cat;
хм, может быть имеет смысл добавить error_code(int, const error_category&&) = delete; чтоб зарубить в корне подобные недозумения?
Anton
@antoshkka @foxcpp ^
Anton
[syserr.errcat.overview]/1 "This means that applications using custom error_category types should create a single object of each such type."
Anton
в расте, кажется, можно убедиться, что ссылка ссылается на объект со стачическим временем жизни
Александр
хм, может быть имеет смысл добавить error_code(int, const error_category&&) = delete; чтоб зарубить в корне подобные недозумения?
А может проще в конструкторе заменить аргумент на non-const lvalue? Не ясно, зачем вообще разрешили конструирование из временного объекта
Александр
тогда мы убьем const-correctness
Действительно, согласен
void *
hr ?
Александр
/report
Stanislav
/warn не по теме
Matwey
Господа, д авно ли слово register стало ключевым?
Крылатый
Его больше нет.
Stanislav
Его больше нет.
точнее оно больше не используется и оставлено зарезервированным
🐙 Antony
хм, может быть имеет смысл добавить error_code(int, const error_category&&) = delete; чтоб зарубить в корне подобные недозумения?
Можно попробовать закинуть в качестве ошибки в стандартной библиотеке Сегодня/завтра закину
Jonny
здравствуйте ребята вы не могли бы мне помочь. Я очень хочу научиться программировать но с чего начать не знаю в интернете много книг и видеоматериалы?! Посоветуйте пожалуйста
Aleksandr
Stepick.org, курсы по рограммированию С++ от яндекса
Aleksandr
Для начала хватит
Anonymous
Ты определись в каком направлении прогером хочешь быть
Anonymous
Для веба например С++ как для сортира палка
Andrei
stepik.org
вообще-то stepic.org
Stanislav
вообще-то stepic.org
сам то проверял?
Sergey
Виталя прав, там переадресация, Андрей
Jonny
Я хочу научиться создать программы для windows