**dlua** - это привязка языка программирования [lua](http://www.lua.org/) к языку D, выпускается под лицензией [MIT License](/index.php/Licenses#MIT "Licenses").

## Contents

*   [1 Необходимые средства разработки](#.D0.9D.D0.B5.D0.BE.D0.B1.D1.85.D0.BE.D0.B4.D0.B8.D0.BC.D1.8B.D0.B5_.D1.81.D1.80.D0.B5.D0.B4.D1.81.D1.82.D0.B2.D0.B0_.D1.80.D0.B0.D0.B7.D1.80.D0.B0.D0.B1.D0.BE.D1.82.D0.BA.D0.B8)
*   [2 Hello, World!](#Hello.2C_World.21)
*   [3 Примечание](#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.87.D0.B0.D0.BD.D0.B8.D0.B5)
*   [4 Ссылки](#.D0.A1.D1.81.D1.8B.D0.BB.D0.BA.D0.B8)

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

Нам понадобится компилятор *dmd* от Digital Mars, а также *D Shared Software System (DSSS)*, чтобы установить *dlua* и собрать нашу программу.

Установим компилятор *dmd*:

```
# wget [https://aur.archlinux.org/packages/dmd/dmd/PKGBUILD](https://aur.archlinux.org/packages/dmd/dmd/PKGBUILD)
# makepkg -i

```

А также систему сборки *DSSS*:

```
# wget [https://aur.archlinux.org/packages/dsss/dsss/PKGBUILD](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!
")
testfunction()
io.write("Hello from Lua again!
")

```

Мы используем функцию *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](/index.php/User:Eveel "User:Eveel").

# Ссылки

*   [Вебсайт Lua](http://www.lua.org/)
*   [Язык программирования D](http://www.digitalmars.com/d/index.html)
*   [Проект dlua](http://code.google.com/p/dlua/)
*   [Проект D Shared Software System (DSSS)](http://dsource.org/projects/dsss)