Dlua (Русский)
dlua - это привязка языка программирования lua к языку D, выпускается под лицензией MIT License[broken link: invalid section].
Необходимые средства разработки
Нам понадобится компилятор dmd от Digital Mars, а также D Shared Software System (DSSS), чтобы установить dlua и собрать нашу программу.
Установим компилятор dmd:
# wget https://aur.archlinux.org/packages/dmd/dmd/PKGBUILD # makepkg -i
А также систему сборки DSSS:
# wget https://aur.archlinux.org/packages/dsss/dsss/PKGBUILD # makepkg -i
Теперь установим dlua:
# dsss net install luad
Если всё прошло успешно, то значит библиотека dlua установлена корректно.
Hello, World!
Lua - простой, лёгкий и удобный скриптовый язык. Главным его достоинством является то, что его очень просто внедрить в приложение и воспользоваться его преимуществами в полной мере.
А сейчас напишем небольшое приложение, которое будет использовать lua: будет выполняться скрипт, в котором будет использоваться функция, объявленная в нашей программе.
Но для сборки нашего примера нам понадобится утилита rebuild, которая является частью системы D Shared Software System (DSSS).
Всё готово, теперь мы можем написать код.
Итак, создадим файл hello.d следующего содержания (это основная часть нашей программы):
// проверка dlua
module test.dlua;
// используем привязку dlua
import dlua.all;
// нам нужна функция writefln() из стандартной библиотеки
import std.stdio;
/**
 * Функция testfunction() будет вызываться виртуальной
 * машиной языка Lua. Эта функция выводит фразу "Hello from D!"
 * в STDOUT.
 */
int testfunction(lua_State* L)
{
    writefln("Hello from D!");
    return 0;
}
/**
 * Функция main() инициализирует виртуальную машину Lua,
 * загружает стандартную библиотеку языка Lua, а также
 * регистрирует нашу функцию testfunction().
 */
void main()
{
    // создаём экземпляр виртуальной машины Lua
    lua_State* L = luaL_newstate();
    // загружаем стандартную библиотеку Lua
    luaL_openlibs(L);
    // регистрируем нашу функцию testfunction()
    lua_register(L, "testfunction", &testfunction);
    // запускаем скрипт hello.lua в нашей виртуальной машине
    luaL_dofile(L, "hello.lua");
    // освобождаем нашу виртуальную машину
    lua_close(L);
}
То, что делает код, ясно по интуитивно понятным комментариям.
Теперь напишем скрипт hello.lua, который будет выполняться нашей программой:
io.write("Hello from Lua!\n")
testfunction()
io.write("Hello from Lua again!\n")
Мы используем функцию io.write() из стандартной библиотеки, а также функцию testfunction(), предоставленную нашей программой на языке D.
Теперь скомпилируем наш пример, здесь нам пригодится утилита rebuild из пакета dsss:
$ rebuild hello.d -L-llua -L-ldl gcc ./test.dlua.o ./dlua.all.o ./dlua.lua.o ./dlua.luaconf.o ./dlua.lauxlib.o ./dlua.lualib.o ./nmd_gcstats.o -o hello -m32 -Xlinker --start-group -lphobos -llua -ldl -Xlinker -L/usr/lib -Xlinker -L/usr/lib -lphobos -lpthread -lm
Всё! Осталось только порадоваться работе программы:
$ ./hello Hello from Lua! Hello from D! Hello from Lua again!
Примечание
Данная статья написана пользователем eveel.

