Руководства, Инструкции, Бланки

Полное Руководство По Lua img-1

Полное Руководство По Lua

Рейтинг: 5.0/5.0 (1542 проголосовавших)

Категория: Руководства

Описание

Программирование на языке LUA скачать книгу

Программирование на языке LUA
  • Оригинальное название: Programming in LUA
  • Третье издание
  • Автор: Роберту Иерузалимски
  • Издательство: ДМК Пресс
  • Год: 2014
  • Язык: Русский
  • ISBN: 978-5-94074-767-3
  • Страниц: 382
  • Формат: pdf
  • Размер: 76 Мб

Описание книги Программирование на языке LUA.

Книга посвящена одному из самых популярных встраиваемых языков - Lua. Этот язык используется во многих играх и большом количестве различных приложений. Он сочетает небольшой объем занимаемый памяти, высокое быстродействие, простоту использования и большую гибкость. Книга рас­сматривает практически все аспекты использования Lua, начиная с основ языка и заканчивая тонкостями расширения языка и взаимодействия с С. Важной особенностью книги является огромный спектр охватываемых тем - практически все, что может понадобиться при использовании Lua. Также к каждой главе дается несколько упражнений, позволяющих проверить свои знания. Книга будет полезна широкому кругу программистов и разработчиков игр. Для понимания последних глав книги необходимо знание языка С, но для большинства остальных глав достаточно базовых знаний о программировании.

Купить книгу Программирование на языке LUA :
Ozon

25 января 2015 11:28 | Просмотров: 12771

Скачать похожие книги и учебники Веб-разработка Программирование Остальное Магазин книг Статистика

Мы работаем 2058 дней
У нас уже 1502 книги
Из них 1130 на русском
371 на английском

На заметку

Вы можете скачать книги с данного сайта исключительно в ознакомительных целях, авторские права на книги принадлежат их авторам!

Другие статьи

Скриптовый язык Lua

Скриптовый язык Lua

Выкладывал на HardФоруме, решил выложить и у вас :)

Когда у меня возникла необходимость прикрутить к своему движку скриптовый язык Lua, я столкнулся со следующей проблемой: сложно найти бинарники под винду и маломальски толковое руководство по их прикручиванию :) если у кого-то возникнет подобная необходимость, то чтоб не наступали на мои грабли, выкладываю несколько полезных ссылок:

Полное русскоязычное руководство по Lua
http://www.lua.ru/doc/

В биндере пришлось поломать голову над одним моментом:

Чтобы устранить ошибку, пришлось удалить L, в строке lua_gettostack(L, name.c_str()); :) ну а ежели потребуется что-то посерьёзней, там уже сами ищите, ну а этого вполне хватит, чтобы оттолкнуться с нуля.

Iron Man
нафига Lua в бинарниках если оно двумя пальцами собирается из исходников?

Я не настолько силён в программировании, наверняка есть ещё такие же "специалисты" :) можешь подсказать, как собрать lib и dll на последних версиях VC?

создаем проект в студии

берем списки объектных файлов
из файла выше

и добавляем в проект соответствующие им файлы исходного кода
грубо говоря для lapi.o нужно добавить lapi.c

ниже также есть список зависимостей объектников если так не получается понять, можно сверяться с ним


библиотека состоит из объектников
CORE_O
LIB_O
BASE_O
т.е. их все надо в проект добавить

так же там перечислены архитектуро зависимые параметры

из всего этого нам нужно понять только то что проект должен быть dll кой и нам нужно добавить дефайн в свойствах проекта
LUA_BUILD_AS_DLL
если мы хотим именно DLL ку
если хотим исходником включить то вообще ни чего менять не надо
в худшем случае нужно смотреть на ошибки компиляции
все
/СТАТЬЯ

PS: учись читать Makefile это проще чем asm basic и C
особенно в проектах уровня Lua
которые всю жизнь включаются в проекты исходниками и ни кто даже не парится

Профессиональный форум о PAWN-скриптинге

Курс Lua [№1] — Введение в язык программирования Курс Lua [№1] — Введение в язык программирования

Очень хочется поделиться с вами моей историей, и вообще рассказать кто я такой. Меня зовут Владимир, программированием я заинтересовался в 14 лет когда я узнал что можно делать различные моды. Нетрудно догадаться что я считал программистов сверх-людьми которые понимают то, что не понимает большая часть человечества. Программирование заинтересовало меня, и я стал расспрашивать уже успешных программистов. На вопрос (какой язык программирования мне учить?) я получал разнообразные ответы, конечно-же вреди них были и неадекватные. Но всё-же я человек у которого если что-то не получается, то я возвращаюсь в начало и делаю всё по новой.

Первый язык программирования с которым я познакомился более обширно - это язык программирования Lua. Действительно, это довольно легкий и понятный язык с точки зрения синтаксиса, и любой желающий может его освоить. Одним из этих желающих был я. В процессе обучения у меня ничего не получалось. Когда я читал книгу и видел терминологию непонятную мне, то мне просто хотелось всё закрыть и зайти в какую нибудь игру. Возможно у вас была такая-же ситуация, но я и не сомневаюсь в этом.

Как же я изучал язык программирования Lua? Первым мои шагом было - ознакомление. То-есть я вводил в YouTube запрос (уроки по Lua) и находил видео где что-то рассказывали об этом языке. Но проблема состояла в том, что всё о чем говорит человек в видео - это 50% определенной темы. У меня-же будет своя программа обучения. Мы будем одновременно практиковаться и получать теоретические знания.

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

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

Первый скрипт на языке Lua:

Для начала нам нужно скачать программу в которой мы будем писать наш код (ссылка находится в конце этого урока). Установите программу и запустите. После установки нажмите CTRL+SHIFT+S да-бы сохранить файл, это нужно для того что-бы программа поняла что мы работаем с файлом Lua (при сохранении файла обязательно укажите тип, например (myscript.lua )).

Хочется отметить что скрипт на языке Lua можно рассматривать как набор команд (или же по другому их называют инструкциями), которые выполняются, начиная с первой команды. Все команды можно разделять с помощью специального символа [;]. но в языке Lua это не обязательно, то-есть синтаксической ошибке не приведет. Давайте напишем наш первый скрипт на языке Lua.

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

Re: Курс Lua [№1] — Введение в язык программирования


херовые варианты, ниодин из них не подходит определению "конкатенация строк"

Последний раз редактировалось Disinterpreter; 25.06.2015 в 18:11.

Если не выходить за границу «объектно-ориентированных» методов, чтобы остаться в рамках «хорошего программирования и проектирования», то в итоге обязательно получается нечто, по большей части не имеющее смысла. (C) Bjarne Stroustrup

Немного о LuaНемного о Lua

Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with different meanings for different people. So, please, write "Lua" right!

Re: Курс Lua [№1] — Введение в язык программирования


херовые варианты, ниодин из них не подходит определению "конкатенация строк"

Я очень рад что вы знаете определения. Но мои уроки ориентируются на новичков. Сомневаюсь что вы в первый день изучения Lua имели представление об конкатенации строк.

Re: Курс Lua [№1] — Введение в язык программирования

Я очень рад что вы знаете определения. Но мои уроки ориентируются на новичков. Сомневаюсь что вы в первый день изучения Lua имели представление об конкатенации строк.

Имел(во всяком случае склейкой уже называл).

Если не выходить за границу «объектно-ориентированных» методов, чтобы остаться в рамках «хорошего программирования и проектирования», то в итоге обязательно получается нечто, по большей части не имеющее смысла. (C) Bjarne Stroustrup

Немного о LuaНемного о Lua

Please do not write it as "LUA", which is both ugly and confusing, because then it becomes an acronym with different meanings for different people. So, please, write "Lua" right!

Справочное руководство по языку Lua 5

Re: Справочное руководство по языку Lua 5.1

Меж тем никто не говорит, что область применения языка ограничивается Kepler'ом.

Напряженка с библиотеками явление скорее постдебютное, чем перманентное.

Если ничего с этим не делать, то ничего и не изменится. Мое мнение - Lua скорее быть, чем нет.

Интересно, что всего в 4 верхних сообщениях, ты нашел PR $)

Для тех, кому интересно использование и к вопросу о напряженке приведу ряд ссылок:

- http://luajit.org. * LuaJIT — a Just-In-Time Compiler for Lua. * Coco — a Lua extension for True C Coroutines. * DynASM — a Dynamic Assembler for code generation engines.

tolua. tolua++ is an extended version of tolua, a tool to integrate C/C++ code with Lua. tolua++ includes new features oriented to c++ such as:

* Support for std::string as a basic type (this can be turned off by a command line option). * Support for class templates

As well as other features and bugfixes. - http://www.keplerproject.org/luasql/. LuaSQL is a simple interface from Lua to a DBMS. It enables a Lua program to:

* Connect to ODBC, ADO, Oracle, MySQL, SQLite and PostgreSQL databases; * Execute arbitrary SQL statements; * Retrieve results in a row-by-row cursor fashion.

- Да и все осатльные проекты с уже упомянутого http://www.keplerproject.org/

anonymous ( 31.08.2007 14:06:37 )

Создание встраиваемых сценариев на языке Lua

Создание встраиваемых сценариев на языке Lua

Lua предлагает высокоуровневую абстракцию без потери связи с аппаратурой

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

Мартин Страйчер. главный редактор, Linux Magazine

В то время как интерпретируемые языки программирования, такие как Perl, Python, PHP и Ruby, пользуются все большей популярностью для Web-приложений (и уже давно предпочитаются для автоматизации задач по системному администрированию), компилируемые языки программирования, такие как C и C++, по-прежнему необходимы. Производительность компилируемых языков программирования остается несравнимой (она уступает только производительности ручного ассемблирования), поэтому некоторое программное обеспечение (включая операционные системы и драйверы устройств) может быть реализована эффективно только при использовании компилируемого кода. Действительно, всегда, когда программное и аппаратное обеспечение нужно плавно связать между собой, программисты инстинктивно приходят к компилятору C: C достаточно примитивен для доступа к "голому железу" (то есть, для использования особенностей какой-либо части аппаратного обеспечения) и, в то же время, достаточно выразителен для описания некоторых высокоуровневых программных конструкций, таких как структуры, циклы, именованные переменные и области видимости.

Однако языки сценариев тоже имеют четкие преимущества. Например, после успешного переноса интерпретатора языка на другую платформу подавляющее большинство написанных на этом языке сценариев работает на новой платформе без изменений, не имея зависимостей, таких как системные библиотеки функций (представьте множество DLL-файлов операционной системы Microsoft® Windows® или множество libcs на UNIX® и Linux®). Кроме того, языки сценариев обычно предлагают высокоуровневые программные конструкции и удобные операции, которые программистам нужны для повышения продуктивности и скорости разработки. Более того, программисты, использующие язык сценариев, могут работать быстрее, поскольку этапы компиляции и компоновки не нужны. В сравнении с С и его родственниками цикл "кодирование, компоновки, связывание, запуск" сокращается до ускоренного "написание, запуск".

Новшества в Lua

Как и любой язык сценариев, Lua имеет свои особенности:

  • Типы в Lua. В Lua значения имеют тип, но переменные типизируются динамически. Типы nil. boolean. number и string работают так, как вы могли бы ожидать.
    • Nil - это тип специального значения nil ; используется для представления отсутствия значения.
    • Boolean - это тип констант true и false (Nil тоже представляет значение false. а любое не nil значение представляет true ).
    • Все числа в Lua имеют тип doubles (но вы можете легко создать код для реализации других числовых типов).
    • string - это неизменяемый массив для символов (следовательно, для добавления к строке вы должны сделать ее копию).
  • Типы table. function и thread являются ссылками. Каждый такой тип может быть назначен переменной, передаваемой в качестве аргумента, или возвращаемой из функции. Ниже приведен пример сохранения функции:
  • Потоки в Lua. Поток - это сопрограмма, создаваемая вызовом встроенной функции coroutine.create(f). где f - это функция Lua. Потоки не запускаются при создании; они запускаются позже при помощи функции coroutine.resume(t). где t - это поток. Каждая сопрограмма может время от времени отдавать процессор другим сопрограммам при помощи функции coroutine.yield() .
  • Выражения присваивания. Lua разрешает множественные присваивания, и выражения сначала вычисляются, а затем присваиваются. Например, результат выражений
    равен 4 7 5 nil nil. Если список переменных больше, чем список значений, лишним переменным присваивается значение nil ; поэтому b равно nil. Если значений больше, чем переменных, лишние значения просто игнорируются. В Lua названия переменных зависят от регистра символов, что объясняет, почему переменная I равна nil .
  • Порции (chunks). Порцией называется любая последовательность Lua-операторов. Порция может быть записана в файл или в строку в Lua-программе. Каждая порция выполняется как тело анонимной функции. Следовательно, порция может определять локальные переменные и возвращать значения.
  • Дополнительные интересные возможности. Lua имеет сборщик мусора "отметь и выкинь". В Lua 5.1 сборщик мусора работает в инкрементном режиме. Lua имеет полное лексическое замыкание (как Scheme, но не как Python). Кроме того, Lua имеет надежную семантику последовательных вызовов (tail call) (опять же, как Scheme, но не как Python).

Большее количество примеров Lua-кода приведено в руководстве "Программирование в Lua " и в wiki Lua-пользователей (ссылки приведены в разделе "Ресурсы ").

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

Беря все лучшее из обоих миров

Что, если бы вы могли взять лучшее из обоих миров: производительность работы с "голым железом" и высокоуровневые, мощные абстракции? Более того, если бы вы могли оптимизировать алгоритмы и функции, зависящие от системы и требующие много процессорного времени, так же как и отдельную логику, не зависящую от системы и очень чувствительную к изменениям требований?

Баланс требований для высокопроизводительного кода и высокоуровневого программирования является сутью Lua, встраиваемого языка программирования. Приложения, включающие Lua, представляют собой комбинацию компилируемого кода и Lua-сценариев. Компилируемый код может при необходимости заняться железом, и, в то же время, может вызывать Lua-сценарии для обработки сложных данных. И поскольку Lua-сценарии отделены от компилируемого кода, вы можете изменять сценарии независимо от него. С Lua цикл разработки более похож на "Кодирование, компоновка, запуск, создание сценариев, создание сценариев, создание сценариев …".

Например, на странице "Uses" Web-сайта Lua (см. раздел "Ресурсы ") перечислены некоторые компьютерные игры для массового рынка, включая World of Warcraft и Defender (версия классической аркады для бытовых консолей), которые интегрируют Lua для запуска всего, начиная с пользовательского интерфейса и заканчивая искусственным интеллектом противника. Другие приложения Lua включают в себя механизмы расширения для популярного инструментального средства обновления Linux-приложений apt-rpm и механизмы управления чемпионатом Robocup 2000 "Сумасшедший Иван". На этой странице есть много хвалебных отзывов о маленьком размере и отличной производительности Lua.

Начало работы с Lua

Lua версии 5.0.2 на момент написания данной статьи была текущей версией (недавно появилась версия 5.1). Вы можете загрузить исходный код Lua с lua.org, а можете найти различные предварительно откомпилированные двоичные файлы на wiki Lua-пользователей (ссылки приведены в разделе "Ресурсы "). Полный код ядра Lua 5.0.2, включая стандартные библиотеки и Lua-компилятор, по размерам не превышает 200KB.

Если вы работаете на Debian Linux, то можете быстро и просто установить Lua 5.0 при помощи следующей команды

с правами суперпользователя. Все приведенные здесь примеры запускались на Debian Linux "Sarge" с использованием Lua 5.0.2 и ядра Linux 2.4.27-2-686.

После установки Lua на вашей системе попробуйте автономный Lua-интерпретатор. Все Lua-приложения должны быть встроены в базовое приложение. Интерпретатор - это просто специальный тип базового приложения, используемого для разработки и отладки. Создайте файл factorial.lua и введите в него следующие строки:

Код в factorial.lua (точнее, любая последовательность Lua-операторов) называется порцией (chunk), как было описано выше в разделе "Новшества в Lua ". Для запуска созданной вами порции выполните команду lua factorial.lua :

Или, как в других языках сценариев, вы можете добавить строку со знаками ( #! ) ("shebang") в начало сценария, делая сценарий исполняемым, а затем запустить файл как автономную команду:

Язык Lua

Lua обладает многими удобствами, имеющимися в современных языках программирования сценариев: область видимости, управляющие структуры, итераторы и стандартные библиотеки для обработки строк, выдачи и сбора данных и выполнения математических операций. Полное описание языка Lua приведено в "Справочном руководстве по Lua 5.0 " (см. раздел "Ресурсы ").

В Lua тип имеют только значения. а переменные типизируются динамически. В Lua есть восемь фундаментальных типов (или значений): nil. boolean. number. string. function. thread. table и userdata. Первые шесть типов говорят сами за себя (исключения приведены в разделе "Новшества в Lua "); два последних требуют пояснения.

Таблицы в Lua

Таблицы - это универсальная структура данных в Lua. Более того, таблицы - это единственная структура данных в Lua. Вы можете использовать таблицу как массив, словарь (называемый также хеш-таблицей или ассоциативным массивом ), дерево, запись и т.д.

В отличие от других языков программирования, содержимое таблицы в Lua не обязательно должно быть однородным: таблица может включать любые типы и может содержать смесь элементов, подобных массиву, и элементов, подобных словарю. Кроме того, любое Lua-значение (в том числе, функция или другая таблица) может служить ключом элемента словаря.

Для исследования таблиц запустите Lua-интерпретатор и введите строки, показанные жирным шрифтом в листинге 1.

Листинг 1. Экспериментируя с таблицами Lua

Как вы могли ожидать, Lua также предоставляет несколько функций-итераторов для обработки таблиц. Функции предоставляет глобальная переменная table (да, Lua-пакеты - это тоже просто таблицы). Некоторые функции, например table.foreachi(). ожидают непрерывный диапазон целых ключей, начиная с 1 (цифра один):

Другие, например table.foreach(). выполняют итерацию по всей таблице:

Хотя некоторые итераторы оптимизированы для целых индексов, все они просто обрабатывают пары (ключ, значение).

Ради интереса создайте таблицу t с элементами <2, 4, 6, language="Lua", version="5", 8, 10, 12, web="www.lua.org"> и выполните команды table.foreach(t, print) и table.foreachi(t, print) .

Userdata

Поскольку Lua предназначен для встраивания в базовое приложение, написанное на таких языках, как, например, C или C++, для взаимодействия с базовым приложением данные должны совместно использоваться средой C и Lua. Как указано в "Справочном руководстве по Lua 5.0 ", тип userdata позволяет "произвольным C-данным храниться в Lua-переменных". Вы можете рассматривать тип userdata как массив байтов - байтов, которые могут представлять указатель, структуру или файл в базовом приложении.

Содержимое userdata происходит от C, поэтому оно не может быть модифицировано в Lua. Естественно, поскольку userdata происходит от C, в Lua не существует предопределенных операций для userdata. Однако вы можете создать операции, которые работают с userdata. используя еще один механизм Lua, называемый мета-таблицами (metatables).

Мета-таблицы

Из-за такой гибкости типов table и userdata Lua разрешает перегружать операции для объектов каждого из этих типов (вы не можете перегружать шесть остальных типов). Мета-таблица - это (обычная) Lua-таблица, которая отображает стандартные операции в предоставляемые вами пользовательские функции. Ключи мета-таблицы называются событиями (event); значения (другими словами, функции) называются мета-методами (metamethod).

Функции setmetatable() и getmetatable() изменяют и запрашивают мета-таблицу объекта соответственно. Каждый объект table и userdata может иметь свою собственную мета-таблицу.

Например, одним из событий является __add (для добавления). Можете ли вы определить, что делает следующая порция?

Эта порция отображает следующий текст:

Функция function String() принимает строку ( string ), заключает ее в таблицу ( ) и назначает мета-таблицу mt этой таблице. Функция mt.__add() является мета-методом, добавляющим строку b к строке, находящейся в a.value b раз. Строка print((s + ' There ' + ' World!').value ) активизирует мета-метод дважды.

__index - это еще одно событие. Мета-метод для __index вызывается всегда, когда ключ в таблице не существует. Вот пример, который запоминает ("memoizes") значение функции:

Поместите этот код в Lua-интерпретатор и введите print(color[1], color[2], color[1]). Вы должны увидеть что-то подобное blue black blue .

Этот код, получающий ключ и узел, ищет цвет узла. Если он не существует, код присваивает узлу новый, выбранный случайно цвет. В противном случае возвращается цвет, назначенный узлу. В первом случае мета-метод __index выполняется один раз для назначения цвета. В последнем случае выполняется простой и быстрый поиск в хеш-таблице.

Язык Lua предлагает много мощных функциональных возможностей, и все они хорошо документированы. Но всегда, когда вы столкнетесь с проблемами или захотите пообщаться с мастером, обратитесь за поддержкой к энтузиастам - IRC-канал Lua Users Chat Room (см. раздел "Ресурсы ").

Встроить и расширить

Кроме простого синтаксиса и мощной структуры таблиц, реальная мощь Lua очевидна при использовании его совместно с базовым языком. Как уже говорилось, Lua-сценарии могут расширить собственные возможности базового языка. Но справедливо также и обратное - базовый язык может одновременно расширять Lua. Например, C-функции могут вызывать Lua-функции и наоборот.

Сердцем симбиотического взаимодействия между Lua и его базовым языком является виртуальный стек. Виртуальный стек (как и реальный) является структурой данных "последний вошел - первый вышел" (last in-first out - LIFO), которая временно сохраняет аргументы функции и ее результаты. Для вызова из Lua базового языка (и наоборот) вызывающая сторона помещает значения в стек и вызывает целевую функцию; принимающая сторона достает аргументы из стека (конечно же, проверяя тип и значение каждого аргумента), обрабатывает данные и помещает в стек результаты. Когда управление возвращается вызывающей стороне, она извлекает значения из стека.

Фактически, все С-интерфейсы прикладного программирования (API) для Lua-операций работают через стек. Стек может хранить любое Lua-значение; однако тип значения должен быть известен как вызывающей стороне, так и вызываемой, а конкретные функции помещают в стек и извлекают из него каждый тип (например, lua_pushnil() и lua_pushnumber() ).

В листинге 2 показана простая C-программа (взятая из главы 24 книги "Программирование в Lua ", ссылка на которую приведена в разделе "Ресурсы "), реализующая минимальный, но функциональный Lua-интерпретатор.

Листинг 2. Простой Lua-интерпретатор

Строки с 2 по 4 включают стандартные Lua-функции, несколько удобных функций, используемых во всех Lua-библиотеках, и функции для открытия библиотек, соответственно. Строка 9 создает Lua-структуру. Все структуры сначала пусты; вы добавляете библиотеки или функции к структуре при помощи luaopen_. (). как показано в строках с 10 по 14.

В строке 17 luaL_loadbuffer() принимает входную информацию с stdin в виде порции и компилирует ее, помещая порцию в виртуальный стек. Строка 18 извлекает порцию из стека и выполняет ее. Если во время исполнения возникает ошибка, Lua-строка помещается в стек. Строка 20 обращается к вершине стека (вершина стека имеет индекс -1 ) как к Lua-строке, распечатывает сообщение и удаляет значение из стека.

Используя C API, ваше приложение может также "достать" информацию из Lua-структуры. Следующий фрагмент кода извлекает две глобальные переменные из Lua-структуры:

Опять же, обратите внимание на то, что передачу разрешает стек. Вызов любой Lua-функции из C аналогичен следующему коду: извлечь функцию при помощи lua_getglobal(). поместить аргументы, выполнить lua_pcall() и обработать результаты. Если Lua-функция возвращает n значений, первое значение находится по индексу -n в стеке, а последнее - по индексу -1 .

Обратное действие (вызов C-функции из Lua) аналогично. Если ваша операционная система поддерживает динамическую загрузку, Lua может загружать и вызывать функции по требованию. В операционных системах, в которых необходима статическая загрузка, расширение Lua-механизма для вызова C-функции потребует перекомпоновки Lua.

Lua великолепен

Lua - это чрезвычайно легкий в использовании язык, но его простой синтаксис маскирует его мощь: язык поддерживает объекты (аналогичные объектам Perl), мета-таблицы делают его тип table абсолютно гибким, а C API разрешает отличную интеграцию и расширение сценариев и базового языка. Lua может использоваться совместно с языками C, C++, C#, Java™ и Python.

Перед созданием еще одного формата конфигурационного файла или ресурса (и еще одного синтаксического анализатора для него) попробуйте Lua. Язык Lua (так же как и его сообщество) надежен, изобретателен и готов прийти на помощь.

Ресурсы Научиться
  • Оригинал статьи "Embeddable scripting with Lua ".
  • "Справочное руководство по Lua 5.0 " полностью описывает язык Lua.
  • Книга "Программирование на Lua " Роберто Иерусалимши (Roberto Ierusalimschy) (Roberto Ierusalimschy, 2003) является бесценным ресурсом для изучения эффективного кодирования в Lua.
  • Обращайтесь к библиотеке руководств по Lua в wiki пользователей Lua для использования конкретных возможностей Lua.
  • Список проектов, использующих Lua.
  • Зона Linux на developerWorks содержит ресурсы для Linux-разработчиков.
  • Следите за техническими событиями и Web-конференциями developerWorks.
Получить продукты и технологии
  • Получите исходный код Lua 5.0.2 или Lua 5.1 для построения Lua с нуля.
  • В wiki пользователей Lua находятся предварительно откомпилированные, готовые для установки двоичные коды Lua.
  • На LuaForge размещено огромное количество библиотек кода, включая связывание со многими языками и специализированные вычислительные библиотеки.
  • Используйте в вашем следующем проекте с открытым исходным кодом пробное программное обеспечение IBM. доступное для загрузки непосредственно с developerWorks.
Обсудить Комментарии

Lua учебник для начинающих lua manual for beginners

Доброго времени суток!
Как и обещал начинаю создавать некоторое подобие учебнику по луа.

Как это будет выглядеть? Конечно не в виде справки, лишь при изучении какой-то сложной функции будет цитироваться русскоязычная справка по луа с сайта Lua.ru, материал я постараюсь преподнести в форме задача — ее решение, начиная с простого и продвигаясь дальше. Не думаю что за платформу для изучения стоит брать какой-либо хаб, так что мы будем использовать пакет LuaAIO (all in one), с помощью которого мы будем проверять код на луа. Скачать пакет можно здесь. там же лежит справка по пакету, она полностью на английском языке и как-то странно собрана что просто не работает, рабочую версию подготовил alex82. за что ему огромное спасибо, вот ссылка на скачивание. В этой справке есть мануал по луа, первая редакция книги Programming in Lua в электронном виде и справка по библиотекам, включенным в набор LuaAIO.

Итак, скачали, распаковали, теперь запускаем файл lua.exe, открылось окно редактора, написанного на луа с применением библиотек из пакета луааио, в это углубляться не будем, скажу лишь что файл что мы запустили — среда исполнения кода, сам код находится в файле с таким же именем, но с расширением .lua, в нашем случае это lua.lua.

Начем конечно же с банального примера вывода в консоль «Hello world!», на луа это весьма простой код:

print ( "Hello world!" )

Теперь разберемся с тем как посмотреть результат работы скрипта, для начала нам надо его сохранить, для этого выбираем File -> Save или нажимаем Ctrl+S, выбираем имя файла, указывать можно любое, к примеру, example1.lua. Следующим шагом будет запуск нашей программы, тот редактор в котором мы работаем позволяет делать это прямо в нем, так что выбираем в верхнем меню Debug -> Run или нажимаем просто F5, видим появившееся внизу окно, в котором отобразился следующий текст:

> Program example1.lua is running
Hello world!

Вот он, результат работы! Теперь останавливаем скрипт выбрав Debug -> Stop или нажав F6, к тексту дописалось

> Program example1.lua is stopped

что означает что скрипт остановлен (теперь можно свернуть до самого низа это окно, оно вылезет само при следующем запуске). А вот сейчас уже разберем сам скрипт на запчасти, узнав что в нем означает каждый символ. Сразу скажу что углубляться в фишки и разнообразные уловки написания скриптов я не буду, поэтому код идет в стандартном (в моем понимании) виде и содержит обычне конструкции. И еще одно небольшое отступление, если вы не владеете логикой, не можете составить план работы и продумать исполнение самого скрипта, то лучше и не браться, а уж если взялись — стараться разобраться самому что да как, а не доставать не очень добрых дядек программистов, они очень сильно начинают нервничать когда пытаются вам на пальцах объяснить что надо сделать и почему именно так, а вы в это время ничего не понимаете или просто «тупите». Если все-таки упрямость играет в вас и вы еще не закрыли этот текст, тогда продолжим. Продолжим с еще одного важного как мне кажется отступления, заключается оно в том, что здешний материал — мое видение, в том числе и русского языка, а не только луа. Любые замечания по этому тексту будут учитываться, но постарайтесь не вступать в спор из-за какой-либо не нравящейся вам запятой или конструкции в коде. Я не мастер луа, но кое-что умею, об этом и постараюсь рассказать.

И снова продолжим (обожаю такие отступления, они заставляют и тебя и собесеников держать нить разговора))), начнем с того как выглядит вызов функции в луа. Функция — некий набор инструкций, выполняющийся по вызову. В функцию так же могут передаваться аргументы (параметры), хотя это и не обязательно, переданные аргумент можно использовать исключительно внутри функции (об областях видимости переменных расскажу позднее). Допустим, что у нас есть некая функция SomeFunction, вот пример ее вызова без аргуменов:

SomeFunction ( )

и с аргументами one и two, они разделяются запятыми:

SomeFunction ( one, two )

Теперь о нашем коде, надеюсь теперь видно что у нас имеется вызов функции print, имеющей один аргумент, которым является «Hello world!». Функция print — стандартная (базовая) функция, предоставленная луа, она выводит данные в стандартное окно вывода, эта функция может принимать любое число аргументов любого типа, выводя их друг за другом в преобразованном в строку виде.

А сейчас настало время поговорить о типах переменных, это один из значимых моментов в программирвании на луа. В этом языке существуют следующие типы данных (этот и некоторый далее материал заимствован с сайта ilovelua.narod.ru):

nil — ничего, обозначает отсутствие какого либо значения
boolean — булевская переменная, принимает значения true либо false
number — числовой тип
string — строковый тип
function — функция
userdata — специальный тип данных, позволяющий хранить в Lua данные из С (фактически это указатель void*)
thread — сопрограмма Lua (позволяет организовать превдо-многопоточность)
table — таблица — ассоциативный массив (набор пар ключ-значение), причем в качестве и ключа и значения может выступать любой тип данных

Lua — язык с динамической типизацией, то есть тип переменной устанавливается не заранее, как, например, в С, а в момент присвоения переменной значения. Примеры:

var = true — var — переменная типа boolean
var = 1 — теперь var число
var = "string" — теперь var строка
var = function ( a, b ) return a + b end — а теперь var функция, которая принимает два параметра и возвращает их сумму
var = coroutine.create ( var ) — а теперь var сопрограмма
var = { } — а тепеь var таблица
var = nil — а теперь… теперь var отсутствует, перменаая уничтожена

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

А теперь после этой маленькой справки ответьте мне к какому типу относится «Hello world!»? Правильно, это строка, если вы думаете иначе — читаем все заново. Вот и весь разбор полетов, вышло что в нашем простом скрипте имеется один вызов стандартной функции луа что выводит в консоль любые переданные ей параметры, преобразовывая их в строку, мы передаем фукнции один аргумент, являющийся строкой «Hello world!», которую мы и видим в консоли после запуска скрипта.

Мой вам совет: если не понятен смысл речевых конструкций лучше не пропускать этот момент и постараться понять что написано в этой простенькой справке, иначе можно упустить важные моменты и в самом простом моменте в скрипте сесть в лужу.

Немного порадовавшись переходим к как мне кажется важной справке, следует принять её как должное. В луа мы можем объявлять переменные, которые могут являться любым из типов луа, но так же есть зарезервированные имена переменных, ими пользоваться нельзя, это приведет к нарушению работы вашего скрипта! Вот полное перечисление:

and break do else elseif
end false for function if
in local nil not or
repeat return then true until while

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

s — string
i — integer
b — boolean
h — handle
t — table
mt — metatable

Примеры: sData, iShareSize, bConnected, hFile, tTable, mtTable. Примечанице: здесь под handle подразумевается тип userdata.

Теперь справка по спец. символам в строках луа, вот цитата из лексических соглашений:

Литеральные строки должны быть заключены в одинарные или двойные кавычки и могут содержать следующие С-подобные escape-поледовательности: ‘\a’ («звонок»), ‘\b’ («забой»), ‘\f’ («перевод страницы»), ‘\n’ («перевод на новую строку»), ‘\r’ («возврат каретки»), ‘\t’ («горизонтальная табуляция»), ‘\v’ («вертикальная табуляция»), ‘\\\»‘ («двойная кавычка»), and’\» (апостроф [«одинарная кавычка»]). Кроме того, обратный слеш ставится перед концом строки в редакторе, когда для удобства набора длинные непрерывные строки записываются в несколько строк. Символ в строке также может быть представлен своим кодом с помощью escape-последовательности \ddd, где ddd- последовательность из не более чем трех цифр. (Заметим, что если после символа, записанного с помощью своего кода, должна идти цифра, то код символа в escape-последовательности должен содержать ровно три цифры). Строки в Lua могут содержать любые 8-битные значения, включая ноль, который записывается как ‘\0′.

\t — табуляция, применяется для более красивого вывода информации
\\ — так экранируется сам слеш чтобы вывести его как \, в ином случае будет ошибка
\n — перенос строки
\r — возврат каретки
\» — двойная кавычка
\’ — одинарная кавычка

Для переноса строки на разных операционных системах используется разное сочетание символов переноса строки и возврата каретки:

\r\n — windows
\n — *nix
\r — macOS

Пока все, думаю это вам еще надо обдумать, правда на практике все намного понятнее, попробуйте сами сделать выводы через функцию print() и поиграть с типами, кстати, функция type() возвращает тип переданной ей переменной, написав print(type(«»)) мы получим string

>> она полностью на английском языке и как-то странно собрана что просто не работает, рабочую версию подготовил alex82, за что ему огромное спасибо

Справка собрана нормально, просто глюкобраузер «Мазила Фаерфокс» неадекватно качает файлы (что неудивительно — как вы яхту назовете, так она и поплывет ). Так что справку я не подготавливал, я всего лишь скачал её.

А я почему-то думал что те ее декомпилировал и снова собирал, та что лежит на сайте не отображает вообще никакие страницы с ошибкой, качаю всем чем только можно: оперой, хромом, ие…
Ошибка стандартная:

Переход на веб-страницу отменен

Попробуйте сделать следующее:
Повторите ввод адреса.

Я думаю инфа не такая уж и лживая, могу я с твоего разрешения так и оставить?

А дальше? Когда уже будем разбирать хотя бы маленькие скрипты?
Начало понравилось, охота научиться самому полноценные скрипты делать, а не подправлять под свой хаб чужие.

По мере возможностей, всему свое время, как говорится
Лучший метод изучения — создание опыта по работе скриптов и понимание мануалов по изучаемому предмету, так что пробуйте сами все что интересно! По любому вопросу можете обращаться на форум