имел дело с:
https://github.com/mgattozzi/curryrs
?
best practice для интеграции двух несвязных языков - это https://doc.rust-lang.org/std/net/struct.TcpStream.html
так вам что надо: хаскель из раста или раст из хаскеля дергать? или и то и то?
Из Haskell дёргать Rust — обязательно. Из Rust дёргать Haskell — опционально.
Да, я это посмотрел, поэтому и решил спросить у более опытных камрадов в чате. Может ведь быть, что в этом проекте всё настолько идеально, что и менять нечего 🤣
делай как всегда в любых сложных ситуациях: Lang A <-> C <-> Lang B
Красота Но как это может работать? Функция внутри safe_ffi!{} может давать сайдэффекты, что unsafe c точки зрения Haskell
Так FFI в хаскеле по определению IO. Но если очень-очень надо, то всегда есть unsafePerformIO, хотя я не знаю пока других применений этой функции, кроме как для определения глобальных изменяемых ссылок, что само по себе не хорошо, да и вызова чистых функций типа синуса. Итого, пожелаешь FFI в хаскеле - будь готов работать через монаду IO или скрывать ее в случае вызова синуса. Что касается взаимодействия с растом, то не вижу препятствий, если растовский код будет соблюдать сишный ABI. А вот сборщик мусора добавит головной боли (так только игрался для интеграции хаскеля с сями, но вот растовский код вызываю из раста же из другой либы через тот же сишный ABI вполне серьезно)
Хм. А если растовый код, например, сделает тред, который будет уже после завершения этой конкретной функции делать сколько угодно небезопасного IO?
он нужен чтобы дернуть факториал, объявленный в сишке
Обсуждают сегодня