Arseny
Ребят толковую инфу посоветуйте по cmake чтоб без лишней воды было?
Только не cmake wiki. Она морально устаревшая. Вот тут хорошо: https://www.youtube.com/watch?v=bsXLMQ6WgIk
Arseny
Alexander "SonnySlave"
Не cmake wiki, надеюсь?
нет, конечно)
kitsu
А у rxcpp есть способы скастить друг к другу observable? e.g: rxcpp::observable<Base> obs = rxcpp::observable<>::create<Derived>(...);
Alexander
Привет всем, у меня такой вопрос, а часто ли в индустрии программирования на c/c++ юзают ассемблерные вставки(для ускорения работы или ещё чего-то) подарил на open-source проектах - ничего не нашел.
На одной из работ код си не влазил в контроллер, но надо было запихать ещё логики. Переписывали на асме, т.к. Требовалось лишь обновить прошивку, само железо поменять нельзя было.
kitsu
А у rxcpp есть способы скастить друг к другу observable? e.g: rxcpp::observable<Base> obs = rxcpp::observable<>::create<Derived>(...);
Все проще, нет требований к emitted типу, так что можно в create указывать Base а в on_next толкать Derived
Alexander
Привет всем, у меня такой вопрос, а часто ли в индустрии программирования на c/c++ юзают ассемблерные вставки(для ускорения работы или ещё чего-то) подарил на open-source проектах - ничего не нашел.
А ещё был случай когда свертку надо было посчитать на слабеньком камне. По тактам не влазили, т.к. надо было в реал тайм частоту передачи определять. Переписали на асм и влезло.
Alexander
а что за компиляторы были?
Под avr камень, он вроде проприетарный
Alexander "SonnySlave"
не работал с ними. но подозреваю, что просто компил говно
Alexander
Привет всем, у меня такой вопрос, а часто ли в индустрии программирования на c/c++ юзают ассемблерные вставки(для ускорения работы или ещё чего-то) подарил на open-source проектах - ничего не нашел.
Когда я пришёл в большой Энтерпрайз там был платежный терминал для транспорта полностью написанный на асемблере одним человеком. После его увольнения, никто не смог этот код сопровождать. В итоге терминал выпиливают из продакшна - уже морально устарел. Но работал он вообще без глюков. Асм использовался только потому, что камень был очень слабый но дешевый. Разрабатывался ещё до появления обнобаксовых stm32 контроллеров
Berkus
не работал с ними. но подозреваю, что просто компил говно
там обычно древние как говно мамонта гцц
Кирилл
Привет всем, у меня такой вопрос, а часто ли в индустрии программирования на c/c++ юзают ассемблерные вставки(для ускорения работы или ещё чего-то) подарил на open-source проектах - ничего не нашел.
Работал в конторе, которая занимается разработкой софта для железных дорог. В софте, к которому предъявляются требования по безопасности, запрещено пользоваться оптимизациями компилятора. В итоге в оси собственной разработки активно юзался ассемблер. Причём собиралось это всё древним, как говно мамонта, компилятором борланда.
Alexander "SonnySlave"
ты уверен?
Alexander "SonnySlave"
ну не до такой степени
Кирилл
ты уверен?
Уверен.
Alexander "SonnySlave"
может имеется ввиду какая-нибудь -ffast-math
Alexander "SonnySlave"
ну смотри. для меня это выглядит менее дико, чем оптимизации запрещать
Alexander "SonnySlave"
хотя тоже невероятно дико
Кирилл
может имеется ввиду какая-нибудь -ffast-math
fp-операции вообще не использовались
Кирилл
Не помню, был ли на них запрет, но не удивлюсь, если и на них тоже был
Кирилл
Но точно помню, что мы пытались ради интереса собирать с включённой оптимизацией софт, но он так не работал.
Alexander "SonnySlave"
ну мб там где-то весёлое UB было 😊
Кирилл
Вполне может быть.
Berkus
Но точно помню, что мы пытались ради интереса собирать с включённой оптимизацией софт, но он так не работал.
похоже просто из-за говнокода запретили особо не разбираясь, и собрали всегда в debug mode пушо так memory corruption себя никак не проявлял...
Кирилл
похоже просто из-за говнокода запретили особо не разбираясь, и собрали всегда в debug mode пушо так memory corruption себя никак не проявлял...
Запрещено было сторонней сертификационной лабораторией, так что это кто-то осознанно запретил, а не "не разбираясь".
Berkus
Evgenii
Evgenii
ну если ты добровольно в таких условиях пошел работать, не понятно еще кто больший идиот
Andrey
это перебор. хотя бы 3
Anatoly
значение пи в военное время - это и есть военная тайна
Vitaliy ◀️TriΔng3l▶️
Когда пойдём на Нью-Йорк, тогда пи считать равным 4 будет удобно
Vitaliy ◀️TriΔng3l▶️
И sqrt(2.0)==2.0
Berkus
sqrt(2.) == cbrt(2.)
Andrey
Есть два range-loop. for (auto& a : b) и for (auto&& a : b). http://coliru.stacked-crooked.com/a/3076969a7943976f http://coliru.stacked-crooked.com/a/3c5019e1663ddcfe В чем разница и когда полезно?
Andrey
ассемблер получается одинаковый. Есть ли семантическая разница? и где это полезно?
Andrey
я бы сказал опустошающий
Andrey
очереди в многопотоках обрабатывать
Andrey
меня разница между auto& и auto&& интересует
Ignat
атомарный move
Ignat
это конечно интересная идеома
Alexander "SonnySlave"
http://en.cppreference.com/w/cpp/language/range-for
Alexander "SonnySlave"
It is safe, and in fact, preferable in generic code, to use deduction to forwarding reference, for (auto&& var : sequence).
Andrey
кроме сохранения типов и квалификаторов, есть ли еще разница?
Andrey
разрушающий, ага
почему разрушающий?
Alexander "SonnySlave"
почему разрушающий?
это была шутка
Constantine
а, нет, я глупость сморозил
Pepe 🐸
я думал нельзя быть осознанно настолько идиотом
может им надо мапить сорс код к машинному коду и это верифицировать, если там какой то критический узел, а на оптимизации пофиг
Constantine
вообще есть инфа, что std::vector-у нужен еще один метод типа reserve, который при этом будет гарантировать линию при любой последовательности вызовов
Vladislav
Система обработки ошибок, скопированная с rust?
А в расте - скопированная (криво) с хаскеля, да
Constantine
а то тут товарищ принес auto capacity = vector.capacity(); auto size = vector.size() + count; if (capacity >= size) return; capacity = (vector.max_size() - capacity / 2 < capacity ? 0 : capacity + capacity / 2); if (capacity < size) capacity = size; vector.reserve(capacity);
Vladislav
ну мб там где-то весёлое UB было 😊
"мб"? Очевидно он там есть, и не один (скорее всего и не один десяток)
Vladislav
По стандарту
Constantine
Самому reserve'у не запрещено быть таким методом
Угу, но стандарт не гарантирует, что это не квадрат
Vladislav
И нужен reserve без инициализации
Constantine
Хуже того, кажись все стандартные reserve уважают пользователя и свалятся в квадрат
Constantine
И нужен reserve без инициализации
В смысле подготовить второй буфер?
Constantine
Что это вообще значит?
Vladislav
Ой, не reserve а resize
Vladislav
В продолжение прошлой дискуссии
Constantine
Хм... это жи можно делать только для trivially constructible
Vladislav
Мне для них и нужно)
Constantine
Ну для них еще хорошо бы уметь буфер напрямую передавать 😆
Vladislav
Ну или так, да)
Constantine
хм...
Constantine
а нельзя сделать reserve и пойти читать .data() в этом случае?
Vladislav
Доступ за пределы size - UB
Vladislav
И size не поменять толком
Constantine
Там достаточно модифицировать гарантию
Vladislav
push_back/insert из буфера оказались даже медленнее варианта с memset