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.