Dlua (Русский)

From ArchWiki
Jump to: navigation, search

Tango-preferences-desktop-locale.pngЭта страница нуждается в сопроводителеTango-preferences-desktop-locale.png

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Tango-dialog-warning.pngИнформация в этой статье или разделе устарелаTango-dialog-warning.png

Причина: пожалуйста, используйте первый аргумент шаблона для указания причины. (Обсудить)

dlua - это привязка языка программирования lua к языку D, выпускается под лицензией MIT License.

Необходимые средства разработки

Нам понадобится компилятор 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.

Ссылки