Comments 19
У С++ есть ровно два плюса.
В плюсах какое-то совершенно невменяемый слой legacy и новых фич. При этом если что-то явно не описано в стандарте, то оно попадает в долину undefined behaviour.
Лично у меня есть стойкое ощущение, что плюсы не знает никто.
Rust в отличие от C++ гораздо более предсказуем. Меня как-то очень впечатлило, когда я попытался передать в другой поток подключение к PostgreSQL и компилятор мне этого сделать не дал. Я потратил пару часов, чтобы разобраться, что в потрохах подлючения используется не потокобезопасный счетчик ссылок. Но осознание того, что на боевом коде эта проблема проявляла бы себя только под нагрузкой и очень редко, заставляет шевелиться волосы на спине...
Что за бред? Undefined behavior это как раз то, ЧТО ЯВНО прописано в стандарте как неопределённое поведение
Хватит критиковать вымышленный вами же псевдоС++
Внутри unsafe в расте тоже минное поле undefined behaviour причём не описанное в стандарте (т.к. его нету) и более строгое (т.к. в расте ссылки это noalias).
Это на бумаге, а по факту в соответствующем хабе недавно была статья про процесс кросс-компиляции vange-rs в wasm, еще тот секс.
https://habr.com/ru/post/594611/
vange-rs в wasm (Технотекст 2021)
Ни на что не намекаю, цитата из статьи:clang++ -target arm-linux-gnueabihf main.cpp
Вы статью вообще читали? Настройка и компиляция в C++ сводится к двум командам для apt и затем одной команде для запуска clang.
Раст и Сlang используют один и тот же инструмент для компиляции - LLVM. Всё что касается нюансов кросс-платформенной сборки работает одинаково. Во-первых, ваша команда не делает deb пакет - о чём половина статьи. Во-вторых ваша команда не устанавливает тулчейн из карго и поэтому работать не будет. В-третьих ваша команда не устанавливает кросс glibc без которой не будет собираться стандартная библиотека раста. В-чётвертых не настраевается pkg-config без которого не будут находится сишные зависимости. Да, ещё надо вручную указать линковщик в зависимости от платформы.
Сударь, вы в порыве "поливания C++ ненавистью" забыли статью прочесть. Там кросс-компиляции собственно 2 команды. Всё остальное о развёртывании.
баг в gcc 8.3.0, который исправили в следующих версиях, но изменения не бэкпортировали. Поэтому собрать проект gcc, поставляемым в Debian Buster не было возможности
То есть вы наступили на один баг в gcc и поэтому сменили компилятор? А чо бы сразу язык программирования или дистрибутив не сменить?
Теперь у нас bullseye. Итого имеем gcc 9.3.0
А после этого я вообще перестал что либо понимать. У вас уже есть исправленный gcc. Какую проблему вы решаете?
Дальше начался вообще какой-то ад с cmake'ом из гита и conan'ом. Зачем всё это?
Cmake из гита т.к. в пакетах buster'a он очень старый. Хотел через pip, но тот момент последний релиз был сломан, и не собирался нативно под armhf. Да, кое-что приходилось собирать нативно.
Conan тут потому, что проект сложный и зависимостями. Показать, что conan умеет. Документация по кросс-компиляции там хромала. Поэтому всё, с чем можно столкнуться, собрал в одно место.
Тема кросскомпиляции под андроид не раскрыта, от слова совсем. Не говоря уже о termux.
Но в целом, заслуживает bookmarka :)
++
Почему не крайние версии? gcc11, clang13?
Кросс-компиляция с Clang – это просто