Комментарии 11
Поначалу это всё выглядит как магия, но после пары месяцев использования становится реально удобно, компилятор как лучший друг — не дает выстрелить себе в ногу на каждом шагу.
+1
а вы где-то на коммерческих проектах применяете или может опенсорс или чисто для себя как хобби?
0
Я разрабатываю свою ОС — Airely. Вот последнее видео: https://youtu.be/HtdqmUuhIL4
+1
Для меня это больше хобби, в основном мои проекты выросли из необходимости что-то с чем-то синтегрировать и автоматизировать для себя, поэтому в основном это обёртки вокруг разных API: mpd, pocket, vkrs,…
Из чуть более известного — systemd-crontab-generator, a.k.a. systemd-cron-next.
Из чуть более известного — systemd-crontab-generator, a.k.a. systemd-cron-next.
0
Можете что-нибудь посоветовать по написанию идиоматичных wrapper'ов над ffi binding'ами? Например, какие-нибудь хорошо написанные высокоуровневые обёртки над сишными библиотеками, на код которых стоит посмотреть в этом разрезе.
Из того, что сходу нашёл — это ffi guide, секция в The Book о ffi и некоторое количество статей. Параллельно читаю The Rustonomicon.
Сами биндинги думал генерировать с помощью rust-bindgen, дабы не писать руками тонну кода, но местами оно выглядит странно. Например, генерирует префиксы в именах структур, в том числе, внешних по отношению к конкретному header'у (например
Если интересен контекст — хочу обернуть libsmbclient, как единственно живую и стабильную реализацию smb.
Из того, что сходу нашёл — это 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.
-1
Посмотрите в сторону rust-sdl2, rust-sdl2_ttf, или на rust-lua53 — там совсем другой подход (скачиваются исходники Lua с официального сайта, собираются в либу и оборачиваются растом).
0
SDL bindings, по отзывам, одни из самых лучших.
0
Соглашусь. Там, правда, есть хитрость одна — скачать дев-либы с оффсайта и закинуть их в директорию самого раста, но, я считаю, это самое простое, что может быть при работе с чем-то не родным.
А с родными зависимостями как раз меня подкупил Cargo — такой системы сборки нет ни у кого, насколько я знаю. Сам качает, сам компиляет, сам линкует — просто сказка.
А с родными зависимостями как раз меня подкупил Cargo — такой системы сборки нет ни у кого, насколько я знаю. Сам качает, сам компиляет, сам линкует — просто сказка.
0
Во многих языках это норма (ruby, python, js/node). При установке соответствующего пакета собираются нативные зависимости. Линкуются там, правда, только прослойки для интерпретатора, но идеологически довольно похоже.
-1
Особенно радует поддержка кастомных билд скриптов на расте, что позволяет делать такие вещи, как при сборке lua53 (скачивание исходников языка в сборке проекта) или моего systemd-cron-next (генерация systemd юнитов из handlebars-шаблонов).
Понятно, что для скриптовых языков это всё не новость (pip, npm, rake...), но от компилируемого языка такой прелести лично яджва года давно ждал.
Понятно, что для скриптовых языков это всё не новость (pip, npm, rake...), но от компилируемого языка такой прелести лично я
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Создание функции на Rust, которая возвращает String или &str