Описание тега nativecall
Механизм Raku для вызова кода из библиотек C. Следующие примеры взяты с https://docs.perl6.org/language/nativecall.
use NativeCall; sub some_argless_function() is native('something') { * } some_argless_function();
Первая строка импортирует различные черты и типы. Следующая строка выглядит как относительно обычное под-объявление Perl 6 - с одной изюминкой. Мы используем черту "native", чтобы указать, что подпрограмма действительно определена в собственной библиотеке. Расширение для конкретной платформы (например, '.so' или '.dll'), а также любые стандартные префиксы (например, 'lib') будут добавлены для вас.
В первый раз, когда вы вызываете some_argless_function, будет загружена libsomething и в нем будет находиться some_argless_function. Затем будет сделан звонок. Последующие вызовы будут выполняться быстрее, так как дескриптор символа сохраняется.
Функция, которая принимает и возвращает типизированные аргументы:
use NativeCall; sub add(int32, int32) returns int32 is native("calculator") { * }
use NativeCall; sub MessageBoxA(int32, Str, Str, int32) returns int32 is native('user32') { * } MessageBoxA(0, "We have NativeCall", "ohai", 64);