LINUX.ORG.RU

Выполнение Haskell кода из программы на c/c++

 ,


0

2

Питоновский код можно интерпретировать на лету вызывая PyRun_SimpleString(const char*cmd).
Есть ли что-то подобное для Haskell?
Мне нужно именно для Haskell, но для каких еще функциональных ЯП такое тоже возможно?

Мне нужно

тебе это не нужно.

anonymous
()
Ответ на: комментарий от imtw

Программа на c++ через сокет читает сообщения с кодом на Haskell, потом нужно выполнить этот код.
Результат для c++-программы не важен.

nerdogeek
() автор топика
Ответ на: комментарий от thriller

не, ну можно и ghci гонять, и через runhaskell / mueval / ghc-шные привязки прогонять, но вопрос то в том, толи именно ТС хочет.

qnikst ★★★★★
()
Ответ на: комментарий от nerdogeek

Можно ещё чуть подробнее? Этот код должен произвести какое-то IO действие? Нельзя ли просто форкнуть runghc?

imtw
()

для каких еще функциональных ЯП такое тоже возможно?

Еще код на Эрланге можно скармливать Эрлангу на лету (erl_eval).

blexey ★★★★★
()
Ответ на: комментарий от imtw

Да, код на haskell тоже пишет/читает в сокеты.
Нужно еще вернуть статус о выполнении кода на haskell - успех/ошибка компляции/ошибка рантайм.
Форкнуть нельзя. Сишный процесс - это демон под рутом, если это важно.

nerdogeek
() автор топика
Ответ на: комментарий от imtw

Примерчик:

-- hint.hs
import Language.Haskell.Interpreter

exec str = do
   l <- runInterpreter $ setImports ["Prelude"] >> interpret str (as::IO ())
   case l of (Right x) -> x

main = exec "print 1"
┌[pts/1: ~/tmp]
└% runghc hint.hs
1

Функцию exec обёртываете в FFI, profit.

imtw
()
Ответ на: комментарий от nerdogeek

P. S.

демон под рутом
через сокет читает сообщения с кодом

Весело у вас там. Хотя если пересылать только чистый код и запускать его с ключом XSafe, то может и не так весело.

imtw
()

для каких еще функциональных ЯП такое тоже возможно?

Common Lisp: ECL

Scheme: s7, TinyScheme, Guile.

J.

buddhist ★★★★★
()
Ответ на: комментарий от buddhist

Часто слышу от лисперов и эрлангщиков о якобы продвинутых возможностях горячей замены кода. Это сводится к eval, или как?

imtw
()

Мне нужно

Нет, тебе уроки учить нужно

anonymous
()
Ответ на: комментарий от imtw

Часто слышу от лисперов и эрлангщиков о якобы продвинутых возможностях горячей замены кода. Это сводится к eval, или как?

Это сводится к образованию. Анимешнегам этого не понять - смотри свои мультики, готовся к окончанию каникул.

anonymous
()
Ответ на: комментарий от anonymous

готовся к окончанию каникул.

Они уже вчера кончились T_T.

imtw
()
Ответ на: комментарий от nerdogeek

В emacs ядро написано на c (или c++), а все остальное - лисп, можно сказать, что лисп вызывается сишной программой

Xenon ★★★
()

но для каких еще функциональных ЯП такое тоже возможно?

Lua!
/me прячется под стол

elfy
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.