# Dlua (Русский)

Эта страница нуждается в сопроводителе

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

Информация в этой статье или разделе устарела

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

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.

# Ссылки

- Вебсайт Lua
- Язык программирования D
- Проект dlua
- Проект D Shared Software System (DSSS)

Categories:

- Русский
- Development (Русский)

Hidden category:

- Pages with broken section links