Можно ли встраивать perl6 в программы на C (или C ++)? - PullRequest
0 голосов
/ 09 июня 2018

В perl5 было легко связать в libperl.so, установить некоторые переменные и запустить некоторый код с обратными вызовами.Есть ли история для этого в perl6?

Ответы [ 3 ]

0 голосов
/ 09 июня 2018

Кроме того, что прокомментировал @ elizabeth-mattijsen, нет, такого нет.Хотя Perl-интерпретатор был монолитным средством, которое можно было относительно легко превратить в библиотеку .so и затем связать с некоторыми конечными точками API, Perl 6 - это две большие вещи: виртуальная машина, Java или MoarVM, плюс интерпретатор Rakudo.Возможен сценарий, при котором вам не нужно будет встраивать Java или MoarVM, поскольку оба языка будут работать в одной и той же виртуальной машине.Например, Perl 6 встроен в Clojure.Или Perl6, встроенный в 007 , оба работают в MoarVM.Это было бы довольно просто, и вы бы ориентировались на ВМ с такими же возможностями.Но C ++, C и Perl6 имеют совсем другую абстрактную виртуальную машину в качестве цели;подумайте об обработке Unicode или параллельном интерфейсе.Встраивание Perl6 в C будет в основном запускать программы Perl6 из C, а не запускать их из командной строки.

Возможно, что, точно так же, как регулярные выражения Perl закончились повсеместно, некоторые возможности Perl 6,например, обработка Unicode или грамматик , может быть портирована или встроена в другие языки.Но сейчас я не вижу четкого варианта использования Perl для встраивания в C или C ++, и, следовательно, выделение некоторых усилий для такого рода вещей лучше использовать для чего-то совершенно другого.

0 голосов
/ 06 августа 2018

Это не ответ, но предположим, что у меня есть уже существующая программа на C, предназначенная для использования плагинов .dll или .sos, и они загружаются через dlopen или LoadLibrary, найдена точка входа APIиспользуя dlsym или GetProcAddress, эта точка входа вызывается с каким-то дескриптором, чтобы плагин мог выполнять обратные вызовы в главном процессе.

Теперь предположим, что мне нужен мой плагин (внутри этого .dll или .so) загрузить moarvm, а затем запустить некоторый скрипт perl6, который, в свою очередь, использует NativeCall для обратного вызова основного процесса.Как мне это сделать?

В качестве альтернативы, предположим, что я хочу, чтобы мой плагин (внутри этого .dll или .so) загрузил jvm, затем запустил некоторый скрипт perl6 и т. Д. Как мне поступить?это?

Загрузка perl5 только для загрузки perl6 выглядит глупым решением.Это может сработать, но ...

0 голосов
/ 09 июня 2018

Я думаю, что вы можете найти современное состояние в этом отношении в https://metacpan.org/pod/Inline::Perl6, что встраивает Rakudo в Perl 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...