Вызов Lisp от Ruby/направляющих?

Я имею VI в Windows, версия, которую я использую, упоминается ниже, если я всегда нахожусь в консоли я значение по умолчанию к VI, затем независимо от того, на чем ОС я работаю, я знаю, что могу отредактировать файл. С другой стороны, если я нахожусь в режиме UI, я использую Блокнот ++ пойди разберись.

короткая тонна VI - Версия 0.23, Разработанная: Tony Andrews На основе программы: Tim Thompson

7
задан Simone Carletti 30 October 2009 в 13:16
поделиться

4 ответа

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

9
ответ дан 6 December 2019 в 06:50
поделиться

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

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

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

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

11
ответ дан 6 December 2019 в 06:50
поделиться

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

4
ответ дан 6 December 2019 в 06:50
поделиться

Я бы сделал что-то вроде этого:

#!/bin/bash
trap : SIGTERM SIGINT

echo $$

find / >/dev/null 2>&1 &
FIND_PID=$!

wait $FIND_PID

if [[ $? -gt 128 ]]
then
    kill $FIND_PID
fi

Думаю, уместно несколько пояснений. Выйдя из ворот, нам нужно изменить некоторые параметры обработки сигналов по умолчанию. : - это не выполняемая команда, поскольку передача пустой строки заставляет оболочку игнорировать сигнал вместо того, чтобы делать что-то с ним (противоположное тому, что мы хотим сделать).

Затем команда find выполняется в фоновом режиме (с точки зрения сценария), и мы вызываем встроенную функцию wait для ее завершения. Поскольку мы дали реальную команду trap выше, при обработке сигнала wait завершится со статусом больше 128. Если процесс wait ed для завершает, wait вернет статус выхода этого процесса.

Наконец, если wait возвращает этот статус ошибки, мы хотим убить дочерний процесс. К счастью, мы сохранили его PID. Преимущество этого подхода в том, что вы можете записать сообщение об ошибке или иным образом определить, что сигнал вызвал завершение работы сценария.

Как уже упоминалось другими, использование kill - - $$ в качестве аргумента для ловушки - это еще один вариант, если вы не заботитесь о том, чтобы оставлять какую-либо информацию после выхода.

Чтобы ловушка работала так, как вы хотите, вам нужно объединить ее с wait - на странице руководства bash указано: «Если bash ожидает завершения команды и получает сигнал, для которого установлена ​​ловушка , Реализовать Lisp с классами Ruby - это просто. Это было сделано в главе 8 Практические проекты Ruby .

2
ответ дан 6 December 2019 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: