myDC.ru

Здравствуйте, гость ( Вход | Регистрация )

 
 
Ответить в данную темуНачать новую тему

> Lua-AIO, Дистрибутив Lua, предназначенный для создания приложений

Теги
Нет тегов для показа
alex82
сообщение 10.1.2010, 5:52
Сообщение #1


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Lua-AIO (Lua All-in-One) представляет собой пакет для написания программ на Lua, созданный по принципу "Всё в одном". Пакет включает в себя практически все библиотеки, которые могут понадобиться при написании приложений.

В состав пакета входят:
Хост-программа Lua-AIO (lua.exe) - приложение, позволяющее запускать Lua-скрипты. Отличия от хост-программы из официального дистрибутива Lua:
  • Возможность использовать функции многопоточности операционной системы.
  • Возможность установки приложения как системной службы.
  • Функция обработки ошибок.
Встроенные функции
Функции:

Код
thid = ThreadCreate(function, {args,...})
Создает ветвь для выполнения функции "function" с аргументами "args,...". Функция возвращает идентификатор ветви "thid".

Код
ThreadDestroy(thid)
Уничтожает ветвь "thid", созданную при помощи функции ThreadCreate.

Код
ThreadWait(msec)
Приостанавливает ветвь на "msec" миллисекунд.

Код
ThreadNewMutex()
Создает мьютекс (mutex), который может быть использован при помощи функций ThreadLockMutex и ThreadUnlockMutex.

Код
ThreadLockMutex(mutex)
Блокирует совместный доступ к указанному мьютексу (предварительно созданному при помощи функции ThreadNewMutex)

Код
ThreadUnlockMutex(mutex)
Разрешает совместный доступ к указанному мьютексу (предварительно созданному при помощи функции ThreadNewMutex)

Код
ThreadDestroyMutex(mutex)
Уничтожает мьютекс


События:

Код
function OnError(msg) ... end
Вызывается при возникновении ошибки в скрипте.

Код
function OnStop() ... end
Вызывается при получении kill-сигнала при использовании под Linux, а также при остановке службы Windows.
Параметры командной строки
-v: Показать версию Lua-AIO
-d: Режим отладки. В этом режиме Вы можете отправлять сообщения в отладочное окно при помощи функции print().
-t: Запустить тест. С этим параметром программа будет запущена в консольном режиме.
-i: Установить программу как системную службу.
-u: Удалить службу.
-c <имя файла>: Компилировать указанный скрипт.
<имя файла>.lua: Запустить указанный скрипт

Библиотеки:
Раскрывающийся текст
base64: Предназначена для форматирования данных в соответствии со стандартом MIME.
Сайт: http://www.tecgraf.puc-rio.br/~lhf/
Автор: Luiz Henrique de Figueiredo


bc: Библиотека больших чисел, основанная на исходном коде GNU bc
Сайт: http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/
Автор: Luiz Henrique de Figueiredo


ber: Simple Basic Encoding Rules (BER) of Abstract Syntax Notation One (ASN.1)
Автор: Nodir Temirhodzhaev


bit: bitlib. Операции с битами
Сайт: http://luaforge.net/projects/bitlib/
Автор: Reuben Thomas


bz2: bzip2 и libbzip2. Сжатие данных.
Автор: Julian R Seward


cd: CD (Canvas Draw) Кроссплатформенная графическая библиотека.
Сайт: http://luaforge.net/projects/cdlib/
Автор: Antonio Scuri


crypto: Интерфейс к криптографической библиотеке OpenSSL.
Сайт: http://luaforge.net/projects/luacrypto/
Автор: Keith Howe, Enrico Tassi


curl: Lua-cURL library.
Сайт: http://luaforge.net/projects/lua-curl/
Автор: Jьrgen Hцtzel


dc: Библиотека, реализующая некоторые функции протоколов NMDC и ADC

des56: (часть библиотеки md5) Криптографическая библиотека для Lua.
Сайт: http://luaforge.net/projects/md5/
Автор: Andre Carregal, Tomas Guisasola, Danilo Tuler, Fabio Mascarenhas


extend: Расширяет некоторые функции Lua.
Автор: Arnaud Le Ber


gd: Библиотека для обработки изображений, основанная на библиотеке GD от Thomas Boutell.
Сайт: http://luaforge.net/projects/lua-gd/
Автор: Alexandre Erwin Ittner


geoip: Реализует некоторые функции geoIP
Сайт: http://www.maxmind.com/
Автор: MaxMind LLC


gzip: Доступ к функциям библиотеки gzip
Сайт: http://mega.ist.utl.pt/~tngd/lua/
Автор: Tiago Dionizio


he3: Реализует функции декодирования Хаффмана
Автор: Jan Vidar Krey


hpdf: Библиотека для создания PDF-файлов.
Сайт: http://luaforge.net/projects/luahpdf/
Автор: Kurt Jung


iconv: Библиотека, предназначенная для преобразования текста из одной кодировки в другую.
Сайт: http://lua-iconv.luaforge.net/
Автор: Alexandre Erwin Ittner


im: IM is a toolkit for Digital Imaging.
Сайт: http://luaforge.net/projects/imtoolkit/
Автор: Antonio Scuri


irr: Irrlicht (Irrlicht Engine) — трёхмерный графический движок.
Сайт: http://irrlua.sourceforge.net/
Автор: Josh Turpen


iup: IUP Переносимый тулкит для создания графического интерфейса.
Сайт: http://luaforge.net/projects/iup/
Автор: Antonio Scuri


lfs: Реализует функции для работы с файловой системой
Сайт: http://www.keplerproject.org/luafilesystem
Автор: Roberto Ierusalimschy, Andrй Carregal and Tomбs Guisasola


lpeg: pattern-matching library based on Parsin Expression Grammars (PEGs)
Сайт: http://www.inf.puc-rio.br/~roberto/lpeg/
Автор: Roberto Ierusalimschy


lualdap: Простой интерфейс к LDAP-клиенту
Сайт: http://www.keplerproject.org/lualdap/index.html
Автор: Andre Carregal, Alessandro Hecht, Danilo Tuler, Leonardo Godinho, Luis Eduardo Jason Santos and Tomas Guisasola


lxp: SAX XML-парсер, основанный на библиотеке Expat
Сайт: http://www.keplerproject.org/luaexpat/
Автор: Roberto Ierusalimschy, Andrй Carregal and Tomбs Guisasola


md5: Криптографическая библиотека для Lua
Сайт: http://luaforge.net/projects/md5/
Автор: Andre Carregal, Tomas Guisasola, Danilo Tuler, Fabio Mascarenhas


mysql: Библиотека для работы с БД MySQL.
Сайт: http://luaforge.net/projects/luasql/
Автор: Roberto Ierusalimschy, Andrй Carregal and Tomбs Guisasola


ntlua: (Windows only) create Windows NT administration and logon scripts.
Сайт: http://luaforge.net/projects/ntlua/
Автор: Antonio Scuri


pg: Библиотека для работы с БД PostgreSQL
Сайт: http://luaforge.net/projects/luapgsql/
Автор: Stefan


ploticus: Пакет ПО для создания графиков из набора данных.
Сайт: http://ploticus.sourceforge.net/
Автор: Steve Grubb


profiler: time profiler designed to help finding bottlenecks on your Lua program.
Сайт: http://luaprofiler.luaforge.net/
Автор: Luiz Silveira, Miguel Osуrio, Fбbio Mascarenhas, with the help of Andrй Carregal, Tomбs Guisasola and Danilo Tuler


rexlib: Библиотека реализует функции, позволяющие использовать две основные системы регулярных выражений : posix и pcre.
Сайт: http://lrexlib.luaforge.net/
Автор: Reuben Thomas and Shmuel Zeigerman


sdl: Позволяет использовать часть функций библиотеки SDL: the SDL, SDL_image, SDL_mixer, SDL_net and SDL_ttf.
Сайт: http://luaforge.net/projects/luasdl/
Автор: Kein-Hong Man


serial: Позволяет использовать параллельный порт ПК.
Автор: Arnaud Le Ber


snmp: Реализует функции, необходимые для создания SNMP-клиента. Основана на библиотеке NET-SNMP.
Сайт: http://luaforge.net/projects/luasnmp/
Автор: Herbert Leuwer


socket: Библиотека для работы с сокетами. Реализует доступ к TCP, UDP, DNS, SMTP, FTP, HTTP, MIME.
Сайт: http://luaforge.net/projects/luasocket/
Автор: Danilo Tuler, Diego Nehab


sqlite: Библиотека для работы с БД SQLite 2.
Сайт: http://luaforge.net/projects/luasqlite/
Автор: Tiago Dionizio


sqlite3: Библиотека для работы с БД SQLite database 3.
Сайт: http://www.nessie.de/mroth/lua-sqlite3/index.html
Автор: Michael Roth


ssl: Создание TLS/SSL-соединений с использованием библиотеки socket.


tcps: Библиотека для создания TCP-серверов
Сайт: http://www.summerblue.net/computing/libiocp/index.html for windows and "epoll" for Linux.


th: Алгоритмы Tiger Hash


tth: Алгоритмы TigerTree Hash


udps: Библиотека для создания UDP-серверов
Автор: Arnaud Le Ber


uname: retrieve some machine specific information
Автор: Arnaud Le Ber


unicode: support for ASCII, LATIN and UTF-8 unicode
Сайт: http://luaforge.net/projects/sln/
Автор: Klaus Ripke


wx: Многофункциональная кроссплатформенная библиотека, основанная на wxWidgets. Основное назначение - создание графического интерфейса приложений.
Сайт: http://wxlua.sourceforge.net/
Автор: Francesco Montorsi


xml: Парсер XML-файлов, основанный на Tiny XML 2.5.2
Сайт: http://sourceforge.net/projects/tinyxml/
Автор: Lee Thomason + Arnaud Le Ber


zip: Чтение содержимого zip-архивов
Сайт: http://www.keplerproject.org/luazip/
Автор: Danilo Tuler


zlib: Использование функций библиотеки zlib
Сайт: http://mega.ist.utl.pt/~tngd/lua/
Автор: Tiago Dionizio


Подробная информация о библиотеках доступна в справке (см. ниже).
Также, более подробную информацию о некоторых библиотеках пакета можно получить в этом разделе.


Скачать последнюю версию версию дистрибутива можно с официальной страницы проекта

Файл справки (формат CHM) можно скачать отсюда
Справка в формате HTML: Прикрепленный файл  luaaio_doc.rar ( 4.67 мегабайт ) Кол-во скачиваний: 65


Дополнительно:
Как запустить скрипт под Lua-AIO
Имеются как минимум три способа запустить Ваш скрипт под Lua-AIO:
Первый (и самый очевидный): При запуске хост-программы указываем имя скрипта в качестве параметра командной строки. Например:
Код
"C:\luaaio\lua.exe" C:\scripts\myscript.lua

При этом можно использовать относительный путь. Т.е. если Ваш скрипт лежит в папке Lua-AIO, то запустить его можно так:
Код
"C:\luaaio\lua.exe" myscript.lua

Разумеется, если имя скрипта содержит пробелы, его необходимо заключить в кавычки.

Второй (плавно вытекающий из первого): Тупо перетащить Ваш скрипт на иконку lua.exe. Результат ничем не отличается от предыдущего, с той лишь разницей, что при этом совершается меньше телодвижений.

Третий способ (правильный): присвоить хост-программе имя Вашего скрипта. Например, если скрипт зовется "myscript.lua", то необходимо переименовать lua.exe в myscript.exe. Данный способ имеет одно очень важное преимущество - при попытке запуска скрипта, содержащего грубую синтаксическую ошибку, хост-программа выдаст сообщение, содержащее подробную информацию о характере ошибки. При использовании первых двух способов, приложение закроется молча, и Вам прийдется самостоятельно выяснять причину незапуска скрипта.
Программы, созданные с использованием Lua-AIO


Сообщение отредактировал alex82 - 11.1.2010, 0:00


Спасибо сказали:
Go to the top of the page
+Quote Post
Nickolya
сообщение 10.1.2010, 19:11
Сообщение #2


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




alex82, если есть опыт - расскажи пожалуйста про мьютексы и потоки, а то мне кажется это не дает никакого прироста производительности, только заморочка, а единственный плюс - изолированность, которая при грамотном построении скрипта и не нужна.
Go to the top of the page
+Quote Post
alex82
сообщение 10.1.2010, 22:22
Сообщение #3


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Nickolya
Преимущество многопоточности - не изолированность, а независимость скрипта (да и, в общем-то, самой хост программы, под управлением которой работает этот скрипт) от времени выполнения определенных функций в тех случаях, когда время выполнения этих функций ограничено не производительностью компа, а чем-то иным.

Ты ведь наверняка замечал подвисания PtokaX при использовании на ней скриптов, использующих библиотеку сокетов. А ведь этого можно избежать, если запускать функции, отвечающие за получение информации из сети, в отдельной ветви.

В качестве другого примера могу привести твой пингер хабов. Вот скажи - может ли он пинговать несколько хабов одновременно? Могу поспорить что нет. А мой может, поскольку использует многопоточность.

Также не стоит забывать, что Lua-AIO используется для создания программ с графическим интерфейсом, и использование ветвей позволяет избежать подвисания GUI во время выполнения продолжительных и ресурсоемких фрагментов кода.


Спасибо сказали:
Go to the top of the page
+Quote Post
Nickolya
сообщение 10.1.2010, 22:55
Сообщение #4


Главный ра******й тут...
*********

Группа: Главные администраторы
Сообщений: 1 727
Регистрация: 18.5.2008
Из: RF, 2la
Пользователь №: 1
Спасибо сказали: 776 раз




Пингер пингует несколько хабов, не одновременно конечно, в одном потоке, но писалось оно на движке птоки, так что думать о потоках не приходилось. Если все так прекрасно, приведи примеры кода пожалуйста использования потоков в луааио, а так же может если знаешь о подпрограммах в самом луа, пожалуйста.
Go to the top of the page
+Quote Post
alex82
сообщение 10.1.2010, 23:37
Сообщение #5


Местный
*******

Группа: Неактивированные
Сообщений: 908
Регистрация: 26.12.2008
Пользователь №: 1 574
Спасибо сказали: 1406 раз




Вот кусок кода из того самого пингера, о котором я говорил (некоторые фрагменты удалены, дабы не отвлекать от самой сути):
Код
    [2] = function()
        tData.NumHubs = 0
        local hubs,num = {},0
        local cur = con:execute(("SELECT address,port FROM %shubs WHERE `pinged`<%s AND `special`=0"):format(tMySQL.Prefix,os.time()-tCfg.RePingTime*3600))
        local address,port = cur:fetch()
        while address do -- В этом цикле мы разбиваем таблицу хабов на несколько. Число таблиц равно числу ветвей
            tData.NumHubs = tData.NumHubs+1
            num = num+1
            if num > tCfg.PingThreads then num = 1 end
            if not hubs[num] then hubs[num] = {} end
            table.insert(hubs[num],{address,port or 411})
            address,port = cur:fetch()
        end
        -- Тут был кусок кода, отвечающий за общие элементы интерфейса
        local threads,dist,progr = tCfg.PingThreads,34,180
        if threads > #hubs then threads = #hubs end
        GUI.Status,tTh = {},{}
        for i = 1,threads do -- В этом цикле мы создаем ветви, которые и будут пинговать хабы
            GUI.Status[i] = {}

            -- Тут был кусок кода, отвечающий за элементы интерфейса каждого потока.
            tTh[i] = {}
            tTh[i].Env = luasql.mysql()
            tTh[i].Con = assert(tTh[i].Env:connect(tMySQL.DB,tMySQL.User,tMySQL.Pass,tMySQL.Host))
            tTh[i].Con:execute("SET NAMES "..tMySQL.Charset)
            tTh[i].ThID = ThreadCreate(PingThread,{i,hubs[i]}) -- Тут, собственно, и создается ветвь. В качестве аргументов передается номер ветви, и её персональная таблица хабов
        end
        GUI.StatusPanel:SetScrollbars(1, dist, 1, threads, 0, 0, false)
    end,


Спасибо сказали:
Go to the top of the page
+Quote Post
Jaska
сообщение 28.1.2010, 22:42
Сообщение #6


Освоившийся участник
*****

Группа: Администраторы
Сообщений: 344
Регистрация: 2.6.2008
Из: RB,Ufa
Пользователь №: 8
Спасибо сказали: 106 раз




Поставил LUA AIO на Ubuntu 9.10 руководствуясь этой статьей.

Накидал код для примитивного тестирования. В windows работает, но при цикле в 2000 действий thread'ы отказываются создаваться. Вообще говоря, это мое первое знакомство с thread'ами.

Вот собственно сам код:
CODE
require"modules.http"

local sURL = "http://localhost"
local iRequests = 1900

local tResult = {}
local iMaxTime = 0
local iTime = 0
local iStep = 100
local iCount = 0

local tID = {}

function SendRequest(id)
local iStart = os.clock()
local sResult = http.request(sURL)
local iEnd = os.clock()
tResult[id] = iEnd - iStart
iTime = iTime + tResult[id]
iCount = iCount + 1
if tResult[id] > iMaxTime then
iMaxTime = tResult[id]
end
ThreadDestroy(tID[id])
end

function Max()
local iCount = 0
for i in pairs(tResult) do
iCount = iCount + 1
end
return iCount
end

for i = 1,iRequests do
iStep = iStep - 1
tID[i] = ThreadCreate(SendRequest, { i })
end

while iCount ~= iRequests do end
print("Время выполнения программы: "..os.clock().." сек. Самый длительный запрос: "..iMaxTime.." сек. Среднее время: "..string.format("%0.3f", (iTime / iRequests)))


На каждую ветвь приходится 1 запрос. Возможно это расточительство. Пробовал помещать несколько запросов в ветвь, но быстродействие кода падает. Но это не основная проблема, под ubunt'ой lua редактор запускается, код выполняться отказывается. Просто виснет. И вообще создалось ощущение что работает на честном слове.
Go to the top of the page
+Quote Post
mariner
сообщение 28.1.2010, 23:11
Сообщение #7


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




а все потому, что тарбол гнилой и мерзкий. Надо из исходников с оптимизацией
Go to the top of the page
+Quote Post
Jaska
сообщение 28.1.2010, 23:32
Сообщение #8


Освоившийся участник
*****

Группа: Администраторы
Сообщений: 344
Регистрация: 2.6.2008
Из: RB,Ufa
Пользователь №: 8
Спасибо сказали: 106 раз




о последнем можно поподробнее??
Go to the top of the page
+Quote Post
mariner
сообщение 29.1.2010, 0:04
Сообщение #9


Местная ТехПоддержка
**********

Группа: Администраторы
Сообщений: 1 875
Регистрация: 18.7.2008
Из: Моск. Обл, г. королев, район Болшево
Пользователь №: 221
Спасибо сказали: 220 раз




http://wiki.auditory.ru/%D0%A1%D0%B1%D0%BE....86.D0.B8.D1.8F - лови


Спасибо сказали:
Go to the top of the page
+Quote Post

Ответить в данную темуНачать новую тему
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 



RSS Сейчас: 26.11.2024, 20:12