Denis
Я хз чо там в микроконтроллерах с бранч предикшоном.
Подозреваю, что ничего.
Denis
Тратить лишний регистр.
Roman
здесь не нужен бранч предиктор, тут понятно что нужно считать по умолчанию что индекс валидный
Roman
т.е. платишь только за эксепшн
Denis
>эксепшн в ембеде
Roman
ну а undefined behavior в ембеде это лучше?
Roman
на эксепшн можно хотя бы повесить аварийную остановку ядерного реактора
Denis
Там нет исключений вообще.
Roman
В общем я считаю что unsafe api по умолчанию это исторический продолб, за который мы платим
Denis
https://stackoverflow.com/questions/34601561/why-embedded-c-compilers-not-support-exceptions
Roman
например деление на 0 скорей всего вызывает исключение процессора
Roman
В общем были бы в Rust шаблоны, давно бы свалил с плюсов
Pepe 🐸
Roman
Pepe 🐸
да
ну все равно, я конечно так и не понял точно как эксепшены работают, но там есть поиск по таблице, значит медленнее чем без error handling вообще но быстрее чем если вручную делать. Но имхо правильно что оставляют программистам по дефолту НЕбезопасную версию, ибо за корректностью алгоритма в любом случае надо следить
Pepe 🐸
конкретно в этом случае. С new/delete например безопасность предпочтительнее, но это к корректности алгоритма не относится
Denis
С++ и Си всегда были про "если тебе это не надо — ты этим не пользуешься" и по дефолту у тебя голый минимум, без сюрпризов.
Pepe 🐸
а вспомогательные процедуры, ручное управление скажем так
Denis
Это идеология языка.
Roman
Мне надо. хорошо хоть address sanitizer сделали, часто спасает
Roman
хотя как я понимаю он гарантий безопастности в этом случае дать не может ? Или может?
Roman
Если я собираю с -fsanitize=address, получаю ли я гарантию безопастности операций с массивами?
Roman
или в каких то случаях он меня не спасет?
Roman
Похоже они специально делали поддежку стандартной библиотеки: https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow
Roman
https://gcc.gnu.org/viewcvs/gcc/branches/google/gcc-4_8/libstdc%2B%2B-v3/include/bits/vector.tcc?r1=207517&r2=207516&pathrev=207517
Thorn
в M0 и M0+ нет деления
Roman
Впрочем если нет аппаратного делителя это не значит что компилятор его не поддерживает
Thorn
компилятор поддерживает за счет библиотечной функции
Evgenii
Roman
что не исключает того что в библиотечной функции деление вызывает софтверное исключение
Roman
в общем то что safety в embedded не нужен это весьма спорный вопрос
Roman
иначе зачем все эти джавы для микроконтроллеров
Evgenii
Roman
ну да, много общего :)
Roman
но шаблонцы же намного лучше
Evgenii
или автодифференциирование)
Evgenii
я вообще не шарю в расте (а стоило бы)
Roman
я не эксперт в rust, но насколько я понимаю макросы там это именно макросы, просто более мощные чем в Си
Roman
Т.е. это просто всё равно что генерить код скриптом на питоне. Или я не прав?
Thorn
шта
ARM IHI 0034D параграф 4.3.1
Roman
В общем шаблоны являются частью языка, они описывают зависимые типы
Roman
Макросы не являются частью языка
Roman
Это просто препроцессор
Evgenii
по конкретным вопросам надо к растаманам
Андрей
Парни, привет, есть код https://pastebin.com/qLtawW53, с помощью него пытаюсь загрузить файл на сервер, когда компилирую под x64, все работает отлично, но если скомпилировать под x86, то не файл не загружается, выяснил что проблема в 39 строке в HttpSendRequest, гуглил, ничего не нашел, подскажите что делать?
Matwey
Evgenii
Evgenii
Парни, привет, есть код https://pastebin.com/qLtawW53, с помощью него пытаюсь загрузить файл на сервер, когда компилирую под x64, все работает отлично, но если скомпилировать под x86, то не файл не загружается, выяснил что проблема в 39 строке в HttpSendRequest, гуглил, ничего не нашел, подскажите что делать?
#supapro
Matwey
Roman
Thorn
MPU есть. виртуальных адресов и TLB нет
Андрей
Спасибо
Roman
Roman
Ну а зачем нужны non-type non-integral параметры в типах?
Roman
Для создания новых типов они не нужны, т.к. компьютеры дискретные )
Roman
т.е. все типы на дикретных компьютерах описываются integral non-type параметрами
Roman
Что делает VeryCool<1.5> ?
Roman
VeryCool<1> может быть например списком из 1 элемента, или однобитным числом, или первым элементом чего-то
Roman
VeryCool<1.5> нужен только чтобы что-то посчитать в компайл-тайме в плавучке
Roman
В С++ предполагается что считать ты должен в рантайме
Roman
За исключением очень простых кейзов
Roman
Можно ли как-то вызвать функцию в теле класса не создавая member variable?
Roman
Хочется иметь возможность вызывать функции в хедере не создавая при этом членов класса
Evgenii
Roman
В конструкторе
Roman
Ну т.е. хочется делать как в Scala
Roman
Хотя бы примерно