Pull to refresh

Comments 19

UFO landed and left these words here
Везде свои плюсы и минусы.

У С++ есть ровно два плюса.

В плюсах какое-то совершенно невменяемый слой legacy и новых фич. При этом если что-то явно не описано в стандарте, то оно попадает в долину undefined behaviour.

Лично у меня есть стойкое ощущение, что плюсы не знает никто.

Rust в отличие от C++ гораздо более предсказуем. Меня как-то очень впечатлило, когда я попытался передать в другой поток подключение к PostgreSQL и компилятор мне этого сделать не дал. Я потратил пару часов, чтобы разобраться, что в потрохах подлючения используется не потокобезопасный счетчик ссылок. Но осознание того, что на боевом коде эта проблема проявляла бы себя только под нагрузкой и очень редко, заставляет шевелиться волосы на спине...

Что за бред? Undefined behavior это как раз то, ЧТО ЯВНО прописано в стандарте как неопределённое поведение

Хватит критиковать вымышленный вами же псевдоС++

Внутри unsafe в расте тоже минное поле undefined behaviour причём не описанное в стандарте (т.к. его нету) и более строгое (т.к. в расте ссылки это noalias).

Это на бумаге, а по факту в соответствующем хабе недавно была статья про процесс кросс-компиляции vange-rs в wasm, еще тот секс.

UFO landed and left these words here

Там в wasm32-unknown-emscripten даже хелловорлд собрать не удалось без плясок с "переменными окружения о которых мало кто знает" (C).

Ни на что не намекаю, цитата из статьи:
clang++ -target arm-linux-gnueabihf  main.cpp

UFO landed and left these words here

технически все программы на С++ внутри main.cpp, просто внутри #include / import

Большая часть исходников лежит в срр файлах, которые обычно никто не импортирует.

Вы статью вообще читали? Настройка и компиляция в 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'ом. Зачем всё это?

Проект шел под Buster, где gcc 8.3.0. Пока дошло до релиза, вышел Bullseye, и было решено перейти на него. Но в тоже время тестовые стенды остались на Buster. Т.е. проект был готов и ушел в прод, когда вышел новый дистрибутив. Не предлагаете же вы сидеть и ждать пока выйдет дистрибутив с необходимыми багфиксами.

Cmake из гита т.к. в пакетах buster'a он очень старый. Хотел через pip, но тот момент последний релиз был сломан, и не собирался нативно под armhf. Да, кое-что приходилось собирать нативно.

Conan тут потому, что проект сложный и зависимостями. Показать, что conan умеет. Документация по кросс-компиляции там хромала. Поэтому всё, с чем можно столкнуться, собрал в одно место.

Тема кросскомпиляции под андроид не раскрыта, от слова совсем. Не говоря уже о termux.

Но в целом, заслуживает bookmarka :)

++

Почему не крайние версии? gcc11, clang13?

Почему не gcc11? Потому что его не было в stable Debian.
Почему не clang13? Проект на 17 стандарте, а не на 20, поэтому последний шланг и не стал тягать, но это вполне реально.
Sign up to leave a comment.

Articles