Pull to refresh

Comments 11

Поначалу это всё выглядит как магия, но после пары месяцев использования становится реально удобно, компилятор как лучший друг — не дает выстрелить себе в ногу на каждом шагу.
а вы где-то на коммерческих проектах применяете или может опенсорс или чисто для себя как хобби?
Я разрабатываю свою ОС — Airely. Вот последнее видео: https://youtu.be/HtdqmUuhIL4
Для меня это больше хобби, в основном мои проекты выросли из необходимости что-то с чем-то синтегрировать и автоматизировать для себя, поэтому в основном это обёртки вокруг разных API: mpd, pocket, vkrs,…
Из чуть более известного — systemd-crontab-generator, a.k.a. systemd-cron-next.
Можете что-нибудь посоветовать по написанию идиоматичных wrapper'ов над ffi binding'ами? Например, какие-нибудь хорошо написанные высокоуровневые обёртки над сишными библиотеками, на код которых стоит посмотреть в этом разрезе.

Из того, что сходу нашёл — это ffi guide, секция в The Book о ffi и некоторое количество статей. Параллельно читаю The Rustonomicon.

Сами биндинги думал генерировать с помощью rust-bindgen, дабы не писать руками тонну кода, но местами оно выглядит странно. Например, генерирует префиксы в именах структур, в том числе, внешних по отношению к конкретному header'у (например Struct_stat, который на самом деле libc::stat и т. п.). Или даёт странные сигнатуры для callback'ов (unsafe extern "C" fn, что в случае rust 1.5.0 требует передавать unsafe функцию в качестве callback'а, т. к. обычная к unsafe не приводится.

Если интересен контекст — хочу обернуть libsmbclient, как единственно живую и стабильную реализацию smb.
Посмотрите в сторону rust-sdl2, rust-sdl2_ttf, или на rust-lua53 — там совсем другой подход (скачиваются исходники Lua с официального сайта, собираются в либу и оборачиваются растом).
SDL bindings, по отзывам, одни из самых лучших.
Соглашусь. Там, правда, есть хитрость одна — скачать дев-либы с оффсайта и закинуть их в директорию самого раста, но, я считаю, это самое простое, что может быть при работе с чем-то не родным.
А с родными зависимостями как раз меня подкупил Cargo — такой системы сборки нет ни у кого, насколько я знаю. Сам качает, сам компиляет, сам линкует — просто сказка.
Во многих языках это норма (ruby, python, js/node). При установке соответствующего пакета собираются нативные зависимости. Линкуются там, правда, только прослойки для интерпретатора, но идеологически довольно похоже.
Я больше сравнивал с C/C++, столько систем сборок, что ужас. И ни одна из них не сравнится с Cargo.
Особенно радует поддержка кастомных билд скриптов на расте, что позволяет делать такие вещи, как при сборке lua53 (скачивание исходников языка в сборке проекта) или моего systemd-cron-next (генерация systemd юнитов из handlebars-шаблонов).

Понятно, что для скриптовых языков это всё не новость (pip, npm, rake...), но от компилируемого языка такой прелести лично я джва года давно ждал.
Sign up to leave a comment.

Articles