UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

135 lines (94 loc) 5.61 kB
**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)