Как вызвать функцию из Haskell в Rust ? И обратно ?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 06.11.22 17:50
Оценка: :)
Интересуют два сценария:

1) ("Мы должны пойти глубже") стартующее приложение написано на Haskell, оно загружает .so-файл (на linux) и вызывает там код, написанный на Rust.

2) ("Снизу постучали") библиотека на Rust отчаянно сигналит подписчикам о происходящих в процессе обработке событиях,
и вызывает коллбеки, переданные ей ранее из Haskell. Можно на примере идиоматичной графической rust-библиотки, без каких-то там обёрток над сишным Gtk+.

Интересует код как на Haskell, так и на Rust (т.е. обе взаимодействующие стороны).
Я понимаю, что объяснять там надо много, и про контексты, и про do-конструкцию, и про класс типов монады, и как в итоге всё-таки написать.

Так же интересуют примеры, когда без Rust не обойтись ну никак. Может обработка сообщений от ядра? Фантазии не хватает.
Отредактировано 06.11.2022 17:58 Эйнсток Файр . Предыдущая версия . Еще …
Отредактировано 06.11.2022 17:57 Эйнсток Файр . Предыдущая версия .
Отредактировано 06.11.2022 17:53 Эйнсток Файр . Предыдущая версия .
Отредактировано 06.11.2022 17:51 Эйнсток Файр . Предыдущая версия .
haskell
Re: Как вызвать функцию из Haskell в Rust ? И обратно ?
От: vaa  
Дата: 07.11.22 03:46
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>Интересуют два сценария:


ЭФ>1) ("Мы должны пойти глубже") стартующее приложение написано на Haskell, оно загружает .so-файл (на linux) и вызывает там код, написанный на Rust.

лучше наоборот
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Как вызвать функцию из Haskell в Rust ? И обратно ?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 07.11.22 03:52
Оценка:
vaa> лучше наоборот

Нет. Это Rust язык системного программирования будущего и замещающий Си. Поэтому он должен быть снизу (хотя и неясно, зачем он там нужен вообще, если у хаскеля есть контексты для мутирования массивов).

Возможно ты подразумеваешь модель типа C++ -> mono, когда неуправляемый код хостит управляемый рантайм,
хочешь поместить в C++ часть какую-нибудь злобную лицензионную защиту. И потом мысленно заменяешь это на Rust.
Тогда в твоём мире получается что Rust загрузчик грузит Haskell-рантайм. Но это один раз.
После этого в основном коде, написанном на Haskell основые задачи остаются такие как я написал. Сверху Haskell, снизу Rust.

Хостинг рантайма из другого языка — это вообще отдельная задача, не такая как использование внешних библиотек,
она заслуживает отдельного топика.
Отредактировано 07.11.2022 3:57 Эйнсток Файр . Предыдущая версия . Еще …
Отредактировано 07.11.2022 3:57 Эйнсток Файр . Предыдущая версия .
Re[3]: Как вызвать функцию из Haskell в Rust ? И обратно ?
От: vaa  
Дата: 07.11.22 04:13
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

vaa>> лучше наоборот


ЭФ>Нет. Это Rust язык системного программирования будущего и замещающий Си. Поэтому он должен быть снизу (хотя и неясно, зачем он там нужен вообще, если у хаскеля есть контексты для мутирования массивов).


ЭФ>Возможно ты подразумеваешь модель типа C++ -> mono, когда неуправляемый код хостит управляемый рантайм,

ЭФ>хочешь поместить в C++ часть какую-нибудь злобную лицензионную защиту. И потом мысленно заменяешь это на Rust.
ЭФ>Тогда в твоём мире получается что Rust загрузчик грузит Haskell-рантайм. Но это один раз.
ЭФ>После этого в основном коде, написанном на Haskell основые задачи остаются такие как я написал. Сверху Haskell, снизу Rust.

ЭФ>Хостинг рантайма из другого языка — это вообще отдельная задача, не такая как использование внешних библиотек,

ЭФ>она заслуживает отдельного топика.

но ведь хаскелл в 4-5 раз медленее и прожористее си(а значит и раста)! Тогда зачем? Зачем еще одна черепаха?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Как вызвать функцию из Haskell в Rust ? И обратно ?
От: Эйнсток Файр Мухосранск Странный реагент
Дата: 07.11.22 04:29
Оценка:
1) раст тоже медленнее Си в среднем, и прожористее
2) неверно утверждать, что Rust так же быстр как и Си
3) хаскель тоже обеспечивает надёжность, только другим способом
«в ООП нет механизма для контроля корректности инкапсуляции внутреннего состояния»
4) всегда можно докопа́ться до методики тестирования

> Тогда зачем?


Для автоматического распараллеливания компилятором (с подержкой рантаймом). В 5 раз медленнее, но на 16-ти ядрах — это втрое быстрее.
Отредактировано 07.11.2022 4:34 Эйнсток Файр . Предыдущая версия . Еще …
Отредактировано 07.11.2022 4:33 Эйнсток Файр . Предыдущая версия .
Отредактировано 07.11.2022 4:30 Эйнсток Файр . Предыдущая версия .
Отредактировано 07.11.2022 4:30 Эйнсток Файр . Предыдущая версия .
Re[5]: Как вызвать функцию из Haskell в Rust ? И обратно ?
От: vaa  
Дата: 07.11.22 08:38
Оценка:
Здравствуйте, Эйнсток Файр, Вы писали:

ЭФ>1) раст тоже медленнее Си в среднем, и прожористее

ЭФ>2) неверно утверждать, что Rust так же быстр как и Си
ЭФ>3) хаскель тоже обеспечивает надёжность, только другим способом
ЭФ>«в ООП нет механизма для контроля корректности инкапсуляции внутреннего состояния»
ЭФ>4) всегда можно докопа́ться до методики тестирования

Интересно. Но есть ли пруфы на популярные приложения на хаскеле?

>> Тогда зачем?


ЭФ>Для автоматического распараллеливания компилятором (с подержкой рантаймом). В 5 раз медленнее, но на 16-ти ядрах — это втрое быстрее.


Тогда почему не D? Александреску изначально его проектировал под многоядерность, но без ненавистных async/await.
☭ ✊ В мире нет ничего, кроме движущейся материи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.