Вызов Lisp из Ruby / Rails? - PullRequest
       30

Вызов Lisp из Ruby / Rails?

7 голосов
/ 29 октября 2009

Как можно вызвать программу на Лиспе из приложения Rails? ... Например, разрешить конечному пользователю вводить блок текста в веб-приложении Rails, обрабатывать текст программой Лисп и возвращать результаты в Приложение Rails?

Ответы [ 4 ]

11 голосов
/ 29 октября 2009

На ум приходит пара способов:

  1. Запустить программу lisp с помощью Process . Общайтесь с программой на Лисп через стандартный вход, и программа Лисп выводит свой результат через стандартный вывод.

  2. Сделайте то же самое, что и выше, но вместо этого общайтесь через именованные каналы . Пусть ваш код Ruby записывает данные в именованный канал, затем программа Lisp читает из этого канала и записывает данные out через другой именованный канал, который вы затем читаете в своем приложении Ruby. Программа на Лиспе может запускаться в фоновом режиме в качестве демона, проверяющего данные на входящем канале, или запускать его по мере необходимости с помощью утилит командной строки Ruby (как указано выше).

  3. Найдите мост Руби-Лисп. У меня нет опыта работы с таким мостом (и при этом я не знаю ничего, если он вообще существует), и я думаю, что вышеупомянутые 2 механизма проще, но ваш пробег может отличаться.

9 голосов
/ 29 октября 2009

Другой простой способ - запустить Lisp на HTTP-сервере и связаться с ним с помощью HTTP-запросов.

4 голосов
/ 29 октября 2009

CL-JSON поддерживает JSON-RPC . Настроить на веб-сервере, таком как Hunchentoot , очень просто, чтобы иметь веб-службу на основе Lisp, которую может использовать все, что говорит на JSON-RPC (например, this ).

2 голосов
/ 29 октября 2009

Это будет зависеть от того, как часто это будет происходить.

  • Если он когда-то в голубой луне, просто запустите команду обратного цитирования, которая запускает интерпретатор lisp, или откройте его и напишите в него.
  • Если это происходит постоянно, вам нужно будет запустить Lisp, поэтому вопрос в том, как общаться. Любой из межпроцессорных механизмов будет работать, но я бы предложил TCP-сокет для гибкости разработки, тестирования и производства.
  • Если это происходит миллион раз в день, но игрушечный Лисп будет достаточно хорош, реализовать Лисп с классами Ruby очень просто. Это было сделано в главе 8 Практических Ruby Projects .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...