Вызов C кода в Engee¶
В данной демонстрации изучим возможности использования С кода в скриптах Engee. Ведь, хотя большая часть кода может быть написана на Engee, существует множество высококачественных и зрелых библиотек для численных вычислений, уже написанных на C.
В Engee придерживаются философии «отсутствия шаблонов»: можно вызывать функции непосредственно из скрипта без какого-либо «связующего» кода, генерации кода или компиляции.
Это достигается вызовом макроса @ccall.
В качестве примера вызовем функцию clock из стандартной библиотеки C. Clock не принимает аргументов, и в нашем случае возвращает Int32.
t = @ccall clock()::Int32
print("Тип t: " * string(typeof(t)) * ", при t равном: " * string(t))
Теперь рассмотрим вариант вызова функции, написанной на языке С. Для этого возьмем файл с функцией, написанной на С, и соберем из него исполняемый файл .so.
Для этого перейдём в командную строку Engee, включим строку shell при помощи точки с запятой и выполним следующие команды.
cd /user/start/examples/integrated_languages/calling_c_code
gcc -c -fPIC say_y.c -o say_y.o
gcc say_y.o -shared -o say_y.so
Ниже представлен скриншот выполнения этого действия.
Сама функция на языке C очень простая: она выводит входной аргумент. На скриншоте ниже показан код функции.
Для вызова функции нам необходимо указать путь до собранного файла .so и вызвать саму функцию.
@ccall "$(@__DIR__)/say_y.so".say_y(10::Cint)::Cvoid
Вывод¶
В данной демонстрации мы разобрали возможности Engee в плане применения С, как за счёт вызова функций внутри скрипта, так и за счёт подключения пользовательских функций для выполнения поставленных перед нами задач.