1) ("Мы должны пойти глубже") стартующее приложение написано на Haskell, оно загружает .so-файл (на linux) и вызывает там код, написанный на Rust.
2) ("Снизу постучали") библиотека на Rust отчаянно сигналит подписчикам о происходящих в процессе обработке событиях,
и вызывает коллбеки, переданные ей ранее из Haskell. Можно на примере идиоматичной графической rust-библиотки, без каких-то там обёрток над сишным Gtk+.
Интересует код как на Haskell, так и на Rust (т.е. обе взаимодействующие стороны).
Я понимаю, что объяснять там надо много, и про контексты, и про do-конструкцию, и про класс типов монады, и как в итоге всё-таки написать.
Так же интересуют примеры, когда без Rust не обойтись ну никак. Может обработка сообщений от ядра? Фантазии не хватает.
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>Интересуют два сценария:
ЭФ>1) ("Мы должны пойти глубже") стартующее приложение написано на Haskell, оно загружает .so-файл (на linux) и вызывает там код, написанный на Rust.
лучше наоборот
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[2]: Как вызвать функцию из Haskell в Rust ? И обратно ?
Нет. Это Rust язык системного программирования будущего и замещающий Си. Поэтому он должен быть снизу (хотя и неясно, зачем он там нужен вообще, если у хаскеля есть контексты для мутирования массивов).
Возможно ты подразумеваешь модель типа C++ -> mono, когда неуправляемый код хостит управляемый рантайм,
хочешь поместить в C++ часть какую-нибудь злобную лицензионную защиту. И потом мысленно заменяешь это на Rust.
Тогда в твоём мире получается что Rust загрузчик грузит Haskell-рантайм. Но это один раз.
После этого в основном коде, написанном на Haskell основые задачи остаются такие как я написал. Сверху Haskell, снизу Rust.
Хостинг рантайма из другого языка — это вообще отдельная задача, не такая как использование внешних библиотек,
она заслуживает отдельного топика.
Здравствуйте, Эйнсток Файр, Вы писали:
vaa>> лучше наоборот
ЭФ>Нет. Это Rust язык системного программирования будущего и замещающий Си. Поэтому он должен быть снизу (хотя и неясно, зачем он там нужен вообще, если у хаскеля есть контексты для мутирования массивов).
ЭФ>Возможно ты подразумеваешь модель типа C++ -> mono, когда неуправляемый код хостит управляемый рантайм, ЭФ>хочешь поместить в C++ часть какую-нибудь злобную лицензионную защиту. И потом мысленно заменяешь это на Rust. ЭФ>Тогда в твоём мире получается что Rust загрузчик грузит Haskell-рантайм. Но это один раз. ЭФ>После этого в основном коде, написанном на Haskell основые задачи остаются такие как я написал. Сверху Haskell, снизу Rust.
ЭФ>Хостинг рантайма из другого языка — это вообще отдельная задача, не такая как использование внешних библиотек, ЭФ>она заслуживает отдельного топика.
но ведь хаскелл в 4-5 раз медленее и прожористее си(а значит и раста)! Тогда зачем? Зачем еще одна черепаха?
☭ ✊ В мире нет ничего, кроме движущейся материи.
Re[4]: Как вызвать функцию из Haskell в Rust ? И обратно ?
1) раст тоже медленнее Си в среднем, и прожористее
2) неверно утверждать, что Rust так же быстр как и Си
3) хаскель тоже обеспечивает надёжность, только другим способом
«в ООП нет механизма для контроля корректности инкапсуляции внутреннего состояния»
4) всегда можно докопа́ться до методики тестирования
> Тогда зачем?
Для автоматического распараллеливания компилятором (с подержкой рантаймом). В 5 раз медленнее, но на 16-ти ядрах — это втрое быстрее.
Здравствуйте, Эйнсток Файр, Вы писали:
ЭФ>1) раст тоже медленнее Си в среднем, и прожористее ЭФ>2) неверно утверждать, что Rust так же быстр как и Си ЭФ>3) хаскель тоже обеспечивает надёжность, только другим способом ЭФ>«в ООП нет механизма для контроля корректности инкапсуляции внутреннего состояния» ЭФ>4) всегда можно докопа́ться до методики тестирования
Интересно. Но есть ли пруфы на популярные приложения на хаскеле?
>> Тогда зачем?
ЭФ>Для автоматического распараллеливания компилятором (с подержкой рантаймом). В 5 раз медленнее, но на 16-ти ядрах — это втрое быстрее.
Тогда почему не D? Александреску изначально его проектировал под многоядерность, но без ненавистных async/await.