Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Lua

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

Skif_off

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Lua


 
Скриптовый язык программирования, распространяется свободно, с открытыми исходными текстами на языке С. В настоящее время используется в различных проектах, где требуется встроить достаточно быстрый и нетрудный в освоении скриптовый язык программирования (игры, SciTE, Vim, Wireshark, VLC, Far Manager, Double Commander и др.)
 
Страница с документацией (руководства, книги, статьи)
Wiki
Перевод руководства Lua 5.1 на русский


Для задач, критичных по времени, имеется JIT-компилятор: проект LuaJIT. Помимо полной совместимости с Lua, имеет библиотеку FFI, позволяющую использовать внешние функции С и С-подобную структуру данных и обращаться к WinAPI напрямую:

Код:
local ffi = require("ffi")
ffi.cdef[[
int MessageBoxA(void *w, const char *txt, const char *cap, int type);
]]
ffi.C.MessageBoxA(nil, "Hello world!", "Test", 0)



Специализированные среды разработки:
  • ZeroBrane Studio: кроссплатформенное ПО, проект активен, поддерживаются Lua 5.1, Lua 5.2, Lua 5.3, LuaJIT и другие ВМ.
  • Lua Development Tools (LDT): кроссплатформенное ПО, поддерживаемые ВМ.
  • Decoda: только Windows, поддержка Lua 5.2 появилась только в бета-версии 1.17.
    Неспециализированные:
  • Geany: кроссплатформенное ПО, проект активен.
  • Расширение для Visual Studio: только Windows.
     
    Подсветку синтаксиса Lua имеют практически все текстовые редакторы.

  • Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 13:55 21-11-2016 | Исправлено: Skif_off, 00:53 23-11-2016
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DarkMasterW
    Не понял, как можно вызвать функцию по её номеру в таблице f_array? И не будет ли таблица заполнена результатами этих функций до вызова любой из них?

    Цитата:
    lua socket

    Тут автор пишет про 2017ю студию. (Хотя если программист пишет "it builds fine on my machine", это совсем не значит, что получится у кого-то ещё )

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 11:23 30-12-2018
    DarkMasterW

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Не понял, как можно вызвать функцию по её номеру в таблице f_array?

    Для луа таблиц абсолютно нет никакой разницы, что в ней содержится. Строка/число/функция/другая_таблица/bool. Работа с ними полнотью аналогична.
    Вам нужен массив или таблица? Вызов должен быть по имени или по номеру? Это несколько разные вещи. Я вам выше написал вызов по имени. Если задача именно по номеру, то вместо имени используйте:
    f_array[НОМЕР] = function...
     

    Цитата:
    Тут автор пишет про 2017ю студию.

    Угадайте, кто автор тикета и чем все кончилось.

    Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 03:13 31-12-2018
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DarkMasterW
    Спасибо, попробую разобраться. Это как-то странно и непривычно: в других языках строка типа f_array[НОМЕР] = function... приводит к тому, что в f_array[НОМЕР] попадает результат работы функции, а не её имя.

    Цитата:
    Вам нужен массив или таблица? Вызов должен быть по имени или по номеру?

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

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 10:43 31-12-2018
    DarkMasterW

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    в других языках строка типа f_array[НОМЕР] = function... приводит к тому, что в f_array[НОМЕР] попадает результат работы функции, а не её имя.  

    Возмжно я мог вас ввести в заблуждение из-за того, что опустил значимые части.
    f_array[НОМЕР] = function name_of_function(params) ... end
     
    Вообще в lua:
    local function name (params)
    абсолютно эквивалентно:
    local name = function (params)
     
    Первый вариант не более чем синтаксический сахар для более привычной записи.

    Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 19:02 31-12-2018
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    в других языках

    В чужой монастырь со своим уставом не ходят, вот и в Lua сделано так, как сделано. Вообще, не стоит думать в контексте синтаксиса "других языков", когда пишешь на каком-то конкретном языке. Иначе, ничего хорошего не выйдет.

    Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 20:52 31-12-2018
    DarkMasterW

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zedxxx
    Скорее на 5.1 ссылки давать нужно. Дефакто эталон на данный момент хотя бы потом, что стабильный luajit полностью совместим именно с 5.1, а luajit имхо сейчас более распространен, чем оригинальный lua ввиду гигантской разницы в скорости выполенения и возможности создавать биндинги для dll'ок, без модификации самих dll'ок (при этом и скорость вызова выше существенно).

    Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 23:42 31-12-2018
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DarkMasterW

    Цитата:
    Господа, задолбался с lua socket. Никак не получается скомпилить свежий под винду. Крайне желательно статически прилинковать все либы, чтобы зависимостей не было. Можно через mingw - там с этим вроде проще.

    Вот для lua5.3 (не тестировал): https://yadi.sk/d/9j32m8PQXNwELg (собрано с помощью mingw-w64 в msys2 после небольшого фикса makefile - удалён дефайн -DLUASOCKET_INET_PTON).  
     
    Под 5.1 не собирается:

    Код:
    luasocket.o:luasocket.c: (.text+0xdc): undefined reference to `luaL_setfuncs'
    timeout.o:timeout.c: (.text+0x49b): undefined reference to `luaL_setfuncs'
    buffer.o:buffer.c: (.text+0x200): undefined reference to `lua_tonumberx'
    buffer.o:buffer.c: (.text+0x544): undefined reference to `lua_tonumberx'
    buffer.o:buffer.c: (.text+0x67a): undefined reference to `lua_copy'
    buffer.o:buffer.c: (.text+0x816): undefined reference to `luaL_prepbuffsize'
    auxiliar.o:auxiliar.c: (.text+0x29f): undefined reference to `luaL_testudata'
    auxiliar.o:auxiliar.c: (.text+0x441): undefined reference to `luaL_testudata'
    options.o:options.c: (.text+0xf1): undefined reference to `lua_tonumberx'
    options.o:options.c: (.text+0x304): undefined reference to `lua_tonumberx'
    options.o:options.c: (.text+0xaa3): undefined reference to `lua_tonumberx'
    inet.o:inet.c: (.text+0x734): undefined reference to `luaL_setfuncs'
    except.o:except.c: (.text+0x4c): undefined reference to `lua_rotate'
    except.o:except.c: (.text+0xe8): undefined reference to `lua_rotate'
    except.o:except.c: (.text+0x1dc): undefined reference to `lua_rotate'
    except.o:except.c: (.text+0x213): undefined reference to `lua_pcallk'
    except.o:except.c: (.text+0x2b4): undefined reference to `lua_callk'
    except.o:except.c: (.text+0x3ec): undefined reference to `luaL_setfuncs'
    select.o:select.c: (.text+0x154): undefined reference to `lua_callk'
    select.o:select.c: (.text+0x180): undefined reference to `lua_tonumberx'
    select.o:select.c: (.text+0x63c): undefined reference to `lua_callk'
    select.o:select.c: (.text+0x8fc): undefined reference to `luaL_setfuncs'
    tcp.o:tcp.c: (.text+0xd6c): undefined reference to `luaL_setfuncs'
    udp.o:udp.c: (.text+0xfec): undefined reference to `luaL_setfuncs'
     

    Похоже, что требуется фикс сорцов: https://github.com/diegonehab/luasocket/issues/214

    Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 22:45 01-01-2019 | Исправлено: zedxxx, 22:46 01-01-2019
    DarkMasterW

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    В том и засада, что под jit надо свежий...

    Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 22:48 01-01-2019
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    И под 5.1 собирается... мой косяк был с хедерами. В msys2 параллельно стояла lua 5.3 и хедеры цеплялись от неё, а не от 5.1, отсюда и фейл.
     
    Сборка под lua 5.1/jit: https://yadi.sk/d/gXNQTvsI1_Rtlg

    Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 23:49 01-01-2019 | Исправлено: zedxxx, 00:16 02-01-2019
    DarkMasterW

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Огромное спасибо!
    Можешь описать, как скомпилил? Что правил? Я неделю просидел блин...

    Всего записей: 284 | Зарегистр. 17-04-2010 | Отправлено: 00:23 02-01-2019
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1. Установить msys2 с mingw-w64 (32 бит)
    2. В папку msys2/usr/bin/lua/5.1/ положить lua51.dll (оригинальный или jit),  
    3. В папку msys2/usr/include/lua/5.1/ положить хедеры (*.h файлы) lua 5.1
    4. Сорцы luasocket положить в msys2/home/%user%/luasocket
    5. В luasocket/src/makefile удалить дефайн -DLUASOCKET_INET_PTON (встречается только в одном месте - при объявлении переменной DEF_mingw)
    6. Запустить консоль mingw32, перейти в папку luasocket/src/
    7. Выполнить команду make all PLAT=mingw LUAV=5.1
    8. Готовые *.dll появятся в luasocket/src/

    Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 00:39 02-01-2019 | Исправлено: zedxxx, 01:23 02-01-2019
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь пользуется модулем LuaZip под Win х64-версии? Готовые dll'ки видел только х32, собрать не удалось, авторы, похоже подзабили на сборку под Win.
    Требуются dll'ки под Win х32 и х64, без зависимостей (типа runtime-библиотек и т.п.) для WinXP и свежее, имя используемой библиотеки Lua, если имеет значение, lua5.1.dll, но если автор не расписал подробно процесс сборки и/или не упростил скриптами или годным makefile, то чаще не осиляю... (В принципе, х32-версию можно и готовую от LuaForge, наверное, взять.)
     
    Тут и с версиями куча всего:
    https://github.com/luaforge/luazip (используется и в Debian, похоже)
    https://github.com/mpeterv/luazip форк посвежее
    https://github.com/msva/luazip тоже форк, тоже версия посвежее и, похоже, этот репозиторий используется в Gentoo
    https://github.com/LuaDist/luazip проект LuaDist, та же 1.2.3, но допилена система сборки (CMake), зато, похоже, с зависимостями от libzziplib.dll и libzlib.dll, что не очень хорошо, под Win обычно голая zip.dll и всё.
    Есть и ещё, осла Буридана, наверное, просто разорвало бы...

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 02:44 25-01-2019
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    LuaZip x32+x64 для Win можно взять тут, скомпилено с Lua 5.1, работает с Lua 5.1 и LuaJIT.

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 19:13 26-04-2019
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Кто-нибудь пользовался lua-zlib https://github.com/brimworks/lua-zlib? Пытаюсь прочитать содержимое текстового файла, пожатого gzip, и - никак. Прошу прощения за беспокойство, с модулем порядок: из-за ошибки выше в коде одно из условий не срабатывало.

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 20:24 25-11-2020 | Исправлено: Skif_off, 06:52 26-11-2020
    Vasily_Koshkin



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здесь допустимо задавать вопросы по исправлению конкретного скрипта к плееру MPV, например? Или только общие вопросы, касающие непосредственно Lua и не связанные с использованием в конкретных программах?

    Всего записей: 1377 | Зарегистр. 07-02-2004 | Отправлено: 20:35 23-02-2022
    brduakhTMP



    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    кто-то видел _http://www.ptokax.org/downloads.html
    PtokaX 0.5.2.2 with Lua 5.3.4 and SQLite Win64 GUI
    скрипты под lua 5.3.4? антирекламы не видно ни одной, как и скрипта продвинутой регистрации
    может кто знает где есть такие скрипты? на mydc таковых нет, да и сам форум уже не развивается...

    Всего записей: 6856 | Зарегистр. 20-04-2016 | Отправлено: 04:47 24-02-2022
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Vasily_Koshkin
    Тема не сильно живая и, возможно, практичнее начать с темы MPV (можно и сюда добавить ссылку на пост для привлечения внимания) или сразу с автора скрипта. С другой стороны, скрипты для MPV в принципе особо и не обсуждались, на моей памяти был случай, как ни странно, в теме SMPlayer (отсюда и далее)
    Но, полагаю, можно и здесь попробовать, всё-таки Lua популярнее как встраиваемый язык.
     
    brduakhTMP
    Не нашёл темы в разделе Программы, похоже, не сильно популярная? В связи с событиями в мире, возможно, придётся подождать ответа подольше.
    У админов есть флеймовая тема, им PtokaX вроде ближе, - не пробовали там спосить?

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 05:03 08-03-2022
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Никто случайно не сохранил перевод документации Lua 5.3 http://lua.org.ru/contents_ru.html ?
    Владелец ресурса всё поудалял и повесил на главной

    Цитата:
    My battery is low and it's getting dark

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 13:16 29-12-2023
    zedxxx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Skif_off
    В вебархиве сохранилось: https://web.archive.org/web/20230907013325/http://lua.org.ru/contents_ru.html
     
    Оффлайн версия одним файлом (с вебархива): https://disk.yandex.ru/d/vCZhrfZnFXXxfA

    Всего записей: 1501 | Зарегистр. 14-07-2008 | Отправлено: 20:54 29-12-2023 | Исправлено: zedxxx, 21:09 29-12-2023
    Skif_off

    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    zedxxx
    Спасибо, сам успел сообразить, но забыл пост исправить, прошу прощения.
    Подумываю обновить, т.к. переводился файл для версии 5.3.1 и к 5.3.6 поднакопилось изменений. Но дело идёт вяло, contents.html с содержанием и индексом сделал и по мелочи по тексту.

    Всего записей: 6462 | Зарегистр. 28-01-2008 | Отправлено: 17:22 16-01-2024
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Lua


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru