Comments 57
Кат!
Было бы не плохо вначале поста написать в паре слов о том что это вообще такое «луа»
Спасибо. Большая работа вами проделана! странно что минусуют
Спасибо на добром слове. Увы, не угадал с катом. :-)
врятли. «Быстрых, легких» скриптовых языков примерно дохрена. А вся статья состоит из перечисления минусов этого языка. Причем минусы такие, хорошие и жирные.
А после 4х часов утра на хабре сидят очень злые и невыспавшиеся люди. Сейчас народ к 11 на работу подтянется, будут вам плюсы )
А после 4х часов утра на хабре сидят очень злые и невыспавшиеся люди. Сейчас народ к 11 на работу подтянется, будут вам плюсы )
Ну так на то это и новая версия, чтобы минусы исправлять, разве нет?
А по поводу «быстрых и лёгких» дохрена — это спорное заявление. К тому же, фишка Луа в том, что в языке достигнут хороший баланс по всем перечисленным показателям, не только по быстроте и скорости.
Но мне холиваров по поводу языка разводить здесь совсем не хочется. Я никого Луа использовать не заставляю. Те, кто использует — те обычно знают «в чём фишка». ;-)
Но мне холиваров по поводу языка разводить здесь совсем не хочется. Я никого Луа использовать не заставляю. Те, кто использует — те обычно знают «в чём фишка». ;-)
Злых и невыспавшихся всегда хватает, хватает и тех кто минусует то чего не понимает, но хороший пост такими людьми не испортить.
Видел в песочнице хорошее руководство по созданию игры space invaders на lua в ubuntu, но не сохранил =(
Ни у кого не осталось?
Ни у кого не осталось?
UFO just landed and posted this here
Да, используется.
lua много в каких играх используется, не только в WoW.
Если подробнее, то, как минимум вот в этих (на самом деле список далеко не полон):
en.wikipedia.org/wiki/Category:Lua-scripted_video_games
Вот неигровые приложения, использующие Луа, про которые знает Википедия:
en.wikipedia.org/wiki/Lua_(programming_language)#Applications
Не знаю, правда, что это доказывает. :-)
en.wikipedia.org/wiki/Category:Lua-scripted_video_games
Вот неигровые приложения, использующие Луа, про которые знает Википедия:
en.wikipedia.org/wiki/Lua_(programming_language)#Applications
Не знаю, правда, что это доказывает. :-)
squirrel наше все.
А про поддержку юникода опять забыли.
Не забыли, но и не добрались пока.
С другой стороны, UTF-8 вполне можно пользоваться (стиснув зубы).
http://penlight.luaforge.net/FAQ/#T9
С другой стороны, UTF-8 вполне можно пользоваться (стиснув зубы).
http://penlight.luaforge.net/FAQ/#T9
Вот, специально уточнил позицию авторов (хотя и так было примерно понятно).
http://article.gmane.org/gmane.comp.lang.lua.general/61523
Там дальше в треде народ пошёл ещё раз перечислять проблемы с Юникодом у тех, кто использует Луа под Windows… Можно излить свои печали, иногда это работает.
http://article.gmane.org/gmane.comp.lang.lua.general/61523
Там дальше в треде народ пошёл ещё раз перечислять проблемы с Юникодом у тех, кто использует Луа под Windows… Можно излить свои печали, иногда это работает.
знакомился луа, очень похож на javascript, понравилась идея метатаблиц. Как встраиваемый язык — вещь
А есть ли ссылка на какой-нить вменяемый туториал (желательно под с++), как связать и в чем сила использования Луа? Просьба не минусовать, а отнестись с пониманием. Луа на слуху уже года 3 как (или даже больше), периодически то тут, то там всплывает информация. Но найти простой, и главное содержательный и показательный урок по её использованию пока не удалось. Буду благодарен за толковый линк на статейку, где показаны все прелести и радости от использования Луа.
Сайт посвященный луа на русском. На нем есть список полезных ссылок. К примеру Язык Lua и использование скриптов на нем в программах на С++, Я люблю Lua.
По этим ссылкам недавно обучался один знакомый с нуля.
Туториалы на английском
Большая статья на gamedev.net (перевод, но тут говориться про lua 4.0.1 — а с тех пор язык достаточно изменился, но для начала можно почитать)
По этим ссылкам недавно обучался один знакомый с нуля.
Туториалы на английском
Большая статья на gamedev.net (перевод, но тут говориться про lua 4.0.1 — а с тех пор язык достаточно изменился, но для начала можно почитать)
статья с gamdev.net есть переведенная на русский на gamedev.ru. видел эту статью, изучал, но понимания чем lua в данных примерах лучше банального ini файла не появилось. остальные ссылки спасибо посмотрю, но кажется там тоже не совсем реальная жизнь отражена.
Ну тогда в статье на ibm.com есть раздел Зачем встраивать язык? — можете его почитать.
Поддерживаю, хорошая статья.
Вот ещё есть паттерн Alternate Hard and Soft Layers, там есть несколько полезных мыслей по поводу использования скриптовых языков вообще. Там, правда довольно сумбурно написано.
Вот ещё есть паттерн Alternate Hard and Soft Layers, там есть несколько полезных мыслей по поводу использования скриптовых языков вообще. Там, правда довольно сумбурно написано.
Еще б ей многопоточность…
в каком виде? share nothing с изолированными состояними и обменом сообщениями есть в виде минимум нескольких библиотек (lua lanes, например). share everything — авторы против такого подхода.
Распараллеливание кода в Луа отлично получается и без поддержки системных потоков самим языком. (Понятное дело, что для этого нужны изолированные стейты, но это и хорошо, лучше масштабируется.)
Все игрушки, в которых внедрена луа — напрочь отказываются использовать больше одного ядра. Даже если сам движок игры поддерживает многоядерные архитектуры? Чем можно объяснить? Ленью разрабов?
Сразу приведу пример: NWN II (только 1 ядро), GarrysMod (на движе Half-Life 2 Ep2, который поддерживает до 4 ядер).
Сразу приведу пример: NWN II (только 1 ядро), GarrysMod (на движе Half-Life 2 Ep2, который поддерживает до 4 ядер).
В отличие от «некоторых других» динамических языков, в Луа можно параллельно работать одновременно с несколькими стейтами в одном процессе.
Если нужно организовать параллельную работу логики на Луа, обычно создаётся по стейту на поток и организуется механизм обмена данными между стейтами. Например, налаживается система посылки сообщений между потоками или данные просто расшариваются тем или иным способом между стейтами с обеспечением синхронизации доступа кодом движка.
Почему разработчики отдельных игр пренебрегают такой возможностью мне сказать сложно. Может быть считают, что овчинка не стоит выделки, и игровая логика отлично будет работать и на одном ядре…
Если нужно организовать параллельную работу логики на Луа, обычно создаётся по стейту на поток и организуется механизм обмена данными между стейтами. Например, налаживается система посылки сообщений между потоками или данные просто расшариваются тем или иным способом между стейтами с обеспечением синхронизации доступа кодом движка.
Почему разработчики отдельных игр пренебрегают такой возможностью мне сказать сложно. Может быть считают, что овчинка не стоит выделки, и игровая логика отлично будет работать и на одном ядре…
Скорее время пересылки данных между стейтами больше времени обработки микроскриптов, которые предварительно скомпилированы. 100% знаю, что в том же гаррис моде скорость работы Lua очень критична, так как от неё зависит два внутренних языка программирования + все-все добавленные обьекты и физические игрушки.
Тут уже всё сильно зависит от деталей конкретной ситуации.
Выложили билд Луа 5.2-work1 под Windows, можно играться.
http://article.gmane.org/gmane.comp.lang.lua.general/61528
http://article.gmane.org/gmane.comp.lang.lua.general/61528
Опубликован дополненный список изменений от авторов: http://article.gmane.org/gmane.comp.lang.lua.general/61505.
После анализа этого поста внёс следующие дополнения в статью:
- Подтверждено, что в 5.2 можно будет делать yield через метаметоды, итераторы цикла for и функции pcall() и xpcall()!
- Новые коды ошибок: LUA_ERRGCMM и LUA_OK.
- Функцию lua_arith() теперь считаем документированной.
- Упомянута функция lua_len(), уважающая, в отличие от lua_rawlen(), метаметод __len у таблиц.
- Новые функции: lua_copy() и luaL_tolstring().
- Функции lua_pushstring() и lua_pushlstring() теперь возвращают указатель на внутреннюю копию строки.
- Если файл был открыт при помощи io.popen(), file:close() вернёт код завершения соответствующего ему процесса.
- Теперь file:write() возвращает file.
- Теперь можно узнать, был ли остановлен GC.
- У корутин больше нет отдельных окружений
- Тип символа при компиляции теперь не зависит от локали.
- Увеличено максимальное число констант на функцию (чанк).
- Парсер теперь отъедает гораздо меньше сишного стека.
- Улучшена хэш-функция для чисел с плавающей запятой.
- Улучшена загрузка динамических библиотек под никсами
я вот главное не понял :-D
он быстрей стал?
он быстрей стал?
Куда уж быстрей-то? Есть подозрение, что без JIT-а сильно быстрее уже не получится. А с JIT-ом — см. LuaJIT 2, в среднем всего в 2.37 раза медленнее C++. 5.2, конечно, пока LuaJIT не поддерживает, но ближе к релизу, скорее всего, будет.
Если говорить про стандартную реализацию 5.2, то, говорят, стало где-то чуть медленнее, где-то чуть быстрее. Существенной разницы с 5.1 нет.
Если говорить про стандартную реализацию 5.2, то, говорят, стало где-то чуть медленнее, где-то чуть быстрее. Существенной разницы с 5.1 нет.
ну понятно что быстрей c jit :)
я на луа использовал для lua_newthread, вот у меня там еще проблема была что надо переменные в скриптах как local обновлять. а то они между thread'ами шарились…
но как понял это типа не баг а фича
я на луа использовал для lua_newthread, вот у меня там еще проблема была что надо переменные в скриптах как local обновлять. а то они между thread'ами шарились…
но как понял это типа не баг а фича
Переменные в скриптах в Lua в принципе нужно объявлять как local. Иначе они глобальные. Со всеми вытекающими.
угу.
а как тогда быть если мне нужно чтобы скриптам можно было не доверять?
как-то можно перехватить попытку создать глобальную переменную?
а как тогда быть если мне нужно чтобы скриптам можно было не доверять?
как-то можно перехватить попытку создать глобальную переменную?
Ненадёжный код нужно помещать в песочницу. (По-хорошему ещё нужно ограничивать память через lua_setallocf и время выполнения через debug.sethook, этого по ссылке нет.)
Если нужно только перехватывать «нелегальные» глобальные переменные (а это полезно делать всегда, не только в песочнице), то нужно повесить на глобальное окружение (это же табличка на самом деле) хитрую метатаблицу, которая будет в __index и __newindex перехватывать обращения и проверять их.
См. etc/script.lua в луашном дистрибутиве. (Здесь — версия, которой я пользуюсь)
Подробнее про проблему можно почитать здесь.
Если нужно только перехватывать «нелегальные» глобальные переменные (а это полезно делать всегда, не только в песочнице), то нужно повесить на глобальное окружение (это же табличка на самом деле) хитрую метатаблицу, которая будет в __index и __newindex перехватывать обращения и проверять их.
См. etc/script.lua в луашном дистрибутиве. (Здесь — версия, которой я пользуюсь)
Подробнее про проблему можно почитать здесь.
о спасибо, что-то типа этого я и искал.
мне правда это надо на уровне си сделать, но тут уже все проще )
спасибо
мне правда это надо на уровне си сделать, но тут уже все проще )
спасибо
Ну… Всё, что можно сделать на Луашном API, можно сделать и в Си :-)
Будут проблемы — добро пожаловать в Луашную рассылку, поможем.
www.lua.org/lua-l.html
Будут проблемы — добро пожаловать в Луашную рассылку, поможем.
www.lua.org/lua-l.html
Обновил описание lua_version() и luaL_checkversion(). Оказывается, крайне полезные функции.
Sign up to leave a comment.
Что можно ожидать от Луа 5.2?