Denis
Я хз чо там в микроконтроллерах с бранч предикшоном. Подозреваю, что ничего.
Denis
Тратить лишний регистр.
Pepe 🐸
для всех последующих он уже в регистре
да, но надо же как то проверять лежит ли элемент в указанных пределах
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
Там нет исключений вообще.
там есть процессорные исключения
Roman
например деление на 0 скорей всего вызывает исключение процессора
Roman
В общем были бы в Rust шаблоны, давно бы свалил с плюсов
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
например деление на 0 скорей всего вызывает исключение процессора
если речь про микроконтролеры, то там процессоры, в которых в принципе есть команда деления, в меньшинстве 😄
Roman
если речь про микроконтролеры, то там процессоры, в которых в принципе есть команда деления, в меньшинстве 😄
Вы видимо отстали от жизни. Сейчас большинство микроконтроллеров на ARM. Там не то что деление, у многих даже FPU есть
Thorn
в M0 и M0+ нет деления
Roman
Впрочем если нет аппаратного делителя это не значит что компилятор его не поддерживает
Thorn
компилятор поддерживает за счет библиотечной функции
Roman
что не исключает того что в библиотечной функции деление вызывает софтверное исключение
Roman
в общем то что safety в embedded не нужен это весьма спорный вопрос
Roman
иначе зачем все эти джавы для микроконтроллеров
Roman
у них же вроде макросы есть
Что общего между шаблонами и макросами?
Roman
ну да, много общего :)
Evgenii
Что общего между шаблонами и макросами?
то что оба - инструменты метвпрограммирования
Roman
но шаблонцы же намного лучше
Evgenii
но шаблонцы же намного лучше
ну да, никто ж на расте компайл там рейтрейсер не написал
Evgenii
или автодифференциирование)
Evgenii
я вообще не шарю в расте (а стоило бы)
Roman
я не эксперт в rust, но насколько я понимаю макросы там это именно макросы, просто более мощные чем в Си
Roman
Т.е. это просто всё равно что генерить код скриптом на питоне. Или я не прав?
Thorn
шта
ARM IHI 0034D параграф 4.3.1
Evgenii
я не эксперт в rust, но насколько я понимаю макросы там это именно макросы, просто более мощные чем в Си
ну вот два неэксперта и поговорили) у меня возникло ощущение что макросы + генерики перекрывают большую часть юзкейсов шаблонов, кроме самых упоротых
Roman
В общем шаблоны являются частью языка, они описывают зависимые типы
Roman
Макросы не являются частью языка
Roman
Это просто препроцессор
Evgenii
по конкретным вопросам надо к растаманам
Андрей
Парни, привет, есть код https://pastebin.com/qLtawW53, с помощью него пытаюсь загрузить файл на сервер, когда компилирую под x64, все работает отлично, но если скомпилировать под x86, то не файл не загружается, выяснил что проблема в 39 строке в HttpSendRequest, гуглил, ничего не нашел, подскажите что делать?
Matwey
в M0 и M0+ нет деления
В M0 и MMU тоже нет
Thorn
В M0 и MMU тоже нет
MMU  в микроконтроллерах в принципе нет
Matwey
MMU  в микроконтроллерах в принципе нет
В каких-то топовых вроде есть
Thorn
MPU есть. виртуальных адресов и TLB нет
Андрей
Спасибо
Evgenii
чем кастрированные?
например типами которые могут быть у non type template parameter
Roman
Ну а зачем нужны non-type non-integral параметры в типах?
Roman
Для создания новых типов они не нужны, т.к. компьютеры дискретные )
Roman
т.е. все типы на дикретных компьютерах описываются integral non-type параметрами
Evgenii
Ну а зачем нужны non-type non-integral параметры в типах?
почему бы мне может пригодиться VeryCool<1> но не может VeryCool<1.5>?)
Roman
Что делает VeryCool<1.5> ?
Roman
VeryCool<1> может быть например списком из 1 элемента, или однобитным числом, или первым элементом чего-то
Roman
VeryCool<1.5> нужен только чтобы что-то посчитать в компайл-тайме в плавучке
Roman
В С++ предполагается что считать ты должен в рантайме
Roman
За исключением очень простых кейзов
Roman
Можно ли как-то вызвать функцию в теле класса не создавая member variable?
Roman
Можно ли как-то вызвать функцию в теле класса не создавая member variable?
Пример с созданием member variable : struct foo{ char dummy = call_f ( [] { do whatever} ); };
Roman
Хочется иметь возможность вызывать функции в хедере не создавая при этом членов класса
Roman
В конструкторе
Roman
Ну т.е. хочется делать как в Scala
Roman
Хотя бы примерно
Evgenii
В конструкторе
напиши в конструкторе?