Комментарии 16
И вот тут-то вдруг выясняется, что в современном мире не существует НИ ОДНОГО вменяемого кроссплатформенного GUI-фреймворка, пригодного для нативных приложений. Люди не просто так массово на Electron пересаживаются, а потому что всё остальное использовать по-настоящему мучительно.
И это не только в Rust-инфраструктуре, это вообще нигде ни шиша нет, даже в мире C/C++. Всё, что имеется — оно жутко раздуто, проблемно в сборке и тянет за собой тонны зависимостей. Даже Qt не позволяет получить итоговый exe менее 5Мб, остальное тащит с собою ещё больше. А уж какое лютое шаманство творится при сборке и сопряжении с Rust…
Для себя нашёл, что из всех сортов дерьма наиболее удобно и компактно происходит написание GUI на (кто бы мог подумать!) Lazarus, а Rust-часть с полезной нагрузкой просто собирается как статическая библиотека (.a или .lib в зависимости от платформы), и всё это потом линкуется с GUI частью в единый бинарник.
В итоге проекты с одним окошком и одной кнопкой «Открыть файл» получаются менее мегабайта по объёму.
А уж какое лютое шаманство творится при сборке и сопряжении с Rust…
А в чем шаманство? Я писал интерфейс на Qt/C++ и логику на Rust. Общение
было с помощью Rust/FFI. Rust/FFI я сам конечно не писал он автоматом генерировался.
Но у меня конечно не было цели влезть в ±5МБ, хотя в теории это возможно,
если статически слинковаться с Qt и выкинуть неиспользуемые функции,
но я проверял давно и с Qt 4.x, возможно с Qt 5.x все хуже (имеется ввиду провверял возможность влезть в ±5 мегабайт).
Если собирать релизный бинарник с простым hello world на Rust, то в 2018 он занимал чутка больше 5 мегабайт и чуть поменьше 4 после strip. Сейчас там накрутили кое-чего и с lto и какими-то еще дополнительными параметрами там вроде можно собрать такую программу размером в примерно 1 мегабайт. А вот чтобы собрать меньше — нужно делать немало телодвижений — от простого no_std, до перереализации IO/паник и замены аллокатора. Благо wasm и emded способствуют развитию этого.
там вроде можно собрать такую программу размером в примерно 1 мегабайт
Ну в данном случае мы же говорим не о бинарнике, а разделяемой библиотеке на Rust.
У меня она занимает 27K после strip, думаю с panic=abort можно еще ужать.
Это конечно "hello world" с одной функцией:
#[no_mangle]
pub extern "C" fn add(x: i32) -> i32 {
x + 1
}
Бинарник собранный в release режиме кстати занимает 207k с main вида 'println!("hello")'.
Тут напрашиваются cargo-xbuild
или xargo
.
Для этих целей ещё есть cargo build -Z build-std
Кстати, очень удобная штука — можно собирать исполняемые файлы с разными веб-серверами как для ARM систем вроде Raspberry, так даже и для некоторых моделей роутеров если у них процессор с поддерживаемой архитектурой. Например такая команда для сборки под ASUS AC-66:
GOOS=linux GOARCH=mipsle go build
Начиналось всё скучно, а вот потом началась драма. Спасибо.
Кросскомпиляция выполняемых файлов Rust для Windows из Linux