Interfacing

Sergey ShishkinSergey Shishkin
3 min read

Взаимодействие с другим программным обеспечением Написание библиотек/FFI, вызов внешних программ и связь с внешним миром … Цель PicoLisp — избегать написания обширных библиотек и вместо этого использовать существующие библиотеки, реализованные на других языках. Для этого доступ к внешним программам и библиотекам в PicoLisp особенно прост и прозрачен. Существует множество способов интеграции программы PicoLisp с другим программным обеспечением.

Вызов существующих библиотечных функций на языке C Вызов функций C непосредственно из кода Lisp, манипулирование структурами данных C в памяти и даже вызов функций Lisp из C, все это доступно в интерактивном режиме в REPL. В разделе Native C Calls подробно описывается мощная «собственная» функция.

В Rosetta Code есть примеры: задача Truncate, регулярные выражения, кодирование строки (MD5) и подключение к серверу LDAP, вызывы функций библиотеки C для вычисления быстрых преобразований Фурье.

Кто заинтересован в создании собственных библиотек FFI и API смотрите сайт Alex Williams - PicoLisp Libraries.

Статья о взаимодействии с Java подробно описывает все аспекты этого процесса. Примеры включены!

Исходя из этого, вы можете писать приложения Android с помощью универсального приложения PilBox: см. статью Termux-Penti-PicoLisp.

В 32-битной версии эти функции должны содержать связующий код для преобразования данных C и Lisp. Файл "misc/crc.l" содержит пример для обеих версий. Простой пример на языке C см. в задаче "Вызов функции на другом языке" на Rosetta Code. Пример разницы между 32- и 64-битной версией см. в задаче "Вызов функции в общей библиотеке".

Подробный пример, демонстрирующий разницу между встроенным и внешним C, см. в библиотеке плавающей точки Грега Ли. В качестве доказательства концепции Томас Главати написал простой генератор FFI, который упрощает обертывание библиотек C для 32-битной и miniPicoLisp.

Для файлов общего объекта (DLL) примерами являются библиотеки 'ext' и 'ht', встроенные в Makefile ("src/ext.c", "src/ht.c", "src64/ext.l" и "src64/ht.l").

Запускайте другие программы как подпроцессы и взаимодействовать с их стандартным вводом-выводом через каналы. Это можно сделать с помощью функций 'in', 'out' и 'pipe'. На Rosetta Code вы можете найти примеры, где внешние программы вызываются из PicoLisp:

HTTPS

HTTPS - Аутентифицированный

HTTPS - Аутентифицированный клиент

Запись звука

Функция 'call' также может использоваться для этого. Подробности/примеры см. в (doc 'call).

Используйте сокеты или какой-либо другой тип IPC На ум приходят Nanomsg или ZeroMQ. У нас уже есть привязки Nanomsg для PicoLisp. И вы можете написать оболочку ZeroMQ без особых хлопот, так как она экспортирует привязки языка C, которые можно использовать с «родной» функцией. Затем вы сможете свободно общаться с любым другим языком, имеющим привязки для вашей библиотеки по выбору.

И наконец, если вам нужен доступ к PicoLisp откуда-то еще, вы можете... Написать программу/скрипт PicoLisp и вызвать ее из другого языка Вызов функции PicoLisp из другой программы требует работающего интерпретатора. Это относительно эффективно, так как время запуска интерпретатора довольно короткое. Эта задача Rosetta Code показывает, как PicoLisp может быть вызван из C.

Или, может быть, вы могли бы сделать что-то вроде этого.

https://picolisp.com/wiki/?interfacing

0
Subscribe to my newsletter

Read articles from Sergey Shishkin directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Sergey Shishkin
Sergey Shishkin

Всегда чему-то учусь!