Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

Lua


Lua-logo-nolabel.svg

План:


Введення

Lua ([Луа], порт. "Луна" ) - інтерпретується мова програмування, розроблений підрозділом Tecgraf Католицького університету Ріо-де-Жанейро (Computer Graphics Technology Group of Pontifical Catholic University of Rio de Janeiro in Brazil). Є вільно поширюваним, з відкритими вихідними текстами на мові Сі.

По можливостях, ідеології і реалізації мова найближче до JavaScript, проте Lua відрізняється могутнішими і набагато гнучкішими конструкціями. Хоча Lua не містить поняття класу і об'єкту в явному вигляді, механізми об'єктно-орієнтованого програмування з підтримкою прототипів (включаючи множинне успадкування) легко реалізуються з використанням метатабліц, які також роблять можливою перевантаження операцій тощо Реалізована модель ООП (як і в JavaScript) - прототипна.

Lua в перекладі з португальської означає "місяць", тому неправильно писати "LUA" одними тільки прописними символами.

В даний час (травень 2012) проводиться робота по впровадженню підтримки Lua в движок Mediawiki [2] (див. Lua scripting).


1. Історія

Lua розроблений підрозділом Tecgraf Католицького університету Ріо-де-Жанейро в Бразилії (Computer Graphics Technology Group, Pontifcia Universidade Catlica do Rio de Janeiro), історія мови веде відлік з 1993 року. Авторами мови стали Роберто Єрусалимський, Luiz Henrique de Figueiredo і Waldemar Celes. Lua поширюється вільно, з відкритими вихідними текстами на мові Сі.

2. Деякі можливості

Lua зазвичай називають мультіпарадігменним мовою. Він забезпечує невеликий набір базових механізмів, які можуть бути розширені для вирішення різних завдань, а не набір складних жорстких специфікацій, забезпечують програмування в єдиній парадигмі.

Так, в Lua відсутня явна підтримка спадкування, проте воно легко реалізується за допомогою метатабліц.


2.1. Паралельне присвоювання

Подібно таким скриптовою мовам, як Perl, Python, Ruby і Icon, допускає паралельне присвоювання. У найпростішому випадку це дозволяє писати вирази виду

 x  ,  y  =  y  ,  x 

2.2. Типи

Lua являє собою мову з динамічним визначенням типів даних. Змінна (програмування) мови може містити значення будь-якого типу. Всі значення в Lua можуть зберігатися в змінних, використовуватися в якості аргументів при виклику функцій і повертатися у вигляді результату їх виконання.

В Lua вісім основних типів:

  1. nil (невизначений)
  2. boolean (логічний)
  3. number (числовий)
  4. string (строковий)
  5. function (функція)
  6. userdata (дані користувача)
  7. thread (потік)
  8. table (таблиця)

Nil - це тип значення nil [пусте значення], головна властивість якого - відрізнятися від всіх інших значень і позначати відсутність придатного значення. До типу Boolean відносяться значення false (неправда) і true (істина). Значення nil і false вважаються помилковими, будь-яке інше значення вважається істинним. До типу Number відносяться звичайно речові числа (double), але внутрішнє подання чисел можна змінити при складанні інтерпретатора. Тип String позначає масиви символів. Рядки Lua можуть містити будь-які 8-бітові символи, включаючи нуль ('\ 0'). Рядки незмінні.


2.2.1. Таблиці

Таблиці є найважливішим типом даних в Lua і є фундаментом для користувацьких типів даних, таких як структури, масиви, списки, безлічі. Таблиця в Lua являє собою набір пар - (Ключ, Значення). Ключем може виступати значення будь-якого типу, крім nil.

2.2.2. Замикання

Lua підтримує концепцію замикань, наприклад:

 function  makeaddfunc  (  x  )  - Повертає нову анонімну функцію, яка додає x до аргументу  return  function  (  y  )  - Коли ми посилаємося на змінну x, яка поза поточної області,  - І час життя якої менше, ніж цієї анонімної функції,  - Lua створює замикання.  return  x  +  y  end  end  plustwo  =  makeaddfunc  (  2  )  print  (  plustwo  (  5  )  )  - Виводить 7 

Кожен раз, коли викликається makeaddfunc, створюється нове замикання для змінної x, так що кожна повертається анонімна функція буде посилатися на свій параметр x. Як і у будь-якого іншого об'єкта Lua, часом життя замикання управляє збирач сміття.


2.3. Приклади коду

Класична програма hello world на Lua виглядає ось так:

 print  (  "Hello World!"  ) 

Для коментарів використовується наступний синтаксис, близьке до мов Ada, SQL і VHDL :

 - Коментарі в Lua починаються з подвійного дефісу і тривають до кінця рядка.  - [[Багаторядкові текстові літерали та коментарі беруть в подвійні квадратні дужки. ]] 

Факторіал - приклад рекурсивної функції:

 function  factorial  (  n  )  if  n  ==  0  then  return  1  else  return  n  *  factorial  (  n  -  1  )  end  end 

Цикл з лічильником :

 for  i  =  1  ,  5  do  - Statements  end 

Робота з функціями як з об'єктами першого класу демонструється в наступному прикладі, в якому модифікується поведінку функції print:

 do  local  oldprint  =  print  - Зберігаємо поточну функцію print як oldprint  function  print  (  s  )  - Перевизначають функцію print  if  s  ==  "Foo"  then  oldprint  (  "Bar"  )  else  oldprint  (  s  )  end  end  end 

Будь майбутній виклик print тепер буде перенаправлений до майбутньої функції, і завдяки підтримці в Lua лексичного контексту, стара функція print буде доступна тільки за допомогою нової, модифікованої функції print. Lua також підтримує замикання, як описано вище, у відповідному розділі.

Ключовою особливістю Lua є розширювана семантика, механізм метатабліц дає великі можливості по налаштуванню унікального поведінки для таблиць Lua. У наступному прикладі демонструється "нескінченна" таблиця. Для будь-якого n , fibs[n] дасть nчисло Фібоначчі з використанням мемоізаціі.

 fibs  =  {  1  ,  1  }  - Початкові значення для fibs [1] і fibs [2].  setmetatable  (  fibs  ,  {  __index  =  function  (  name  ,  n  )  - Виклик функції, якщо fibs [n] не існує.  name  [  n  ]  =  name  [  n  -  1  ]  +  name  [  n  -  2  ]  - Розрахунок і мемоізація fibs [n].  return  name  [  n  ]  end  }  ) 

3. Реалізація

Як і багато інтерпретовані мови програмування, реалізація Lua має окремо компілятор з вихідного мови в виконуваний байт-код і віртуальну машину для виконання згенерованого байт-коду. Причому байт-код - це не команди стекової машини, а команди якогось віртуального процесора з кількома регістрами, що підвищує ефективність виконання. У стандартній віртуальній машині Lua використовується розподіл пам'яті із збіркою сміття (аналогічно Java або. NET).

Lua використовує єдиний строкової пул, що дозволяє знизити витрати пам'яті на зберігання рядків.

Для завдань, критичних за часом, є JIT компілятор Lua - LuaJIT [3]. Також розроблений компілятор llvm-lua [4], що генерує код для віртуальної машини LLVM, що дозволяє подальшу компіляцію в дуже ефективний машинний код для процесорів різної архітектури.


4. Використання

В даний час використовується в різних проектах, де потрібно вмонтувати досить швидкий і неважкий в освоєнні скриптова мова програмування - наприклад, у розробці ігор, де Lua часто використовується між ігровим "движком" і даними для написання сценаріїв поведінки / взаємодії об'єктів.

4.1. Ігри

Першими в розробку комп'ютерних ігор мову Lua впровадила компанія LucasArts, починаючи з гри Grim Fandango [5]. Автори мови в своїй доповіді на конференції HOPL (Англ.) рос. згадують, що в січні 1997 вони отримали повідомлення від Брета Могілефскі, головного розробника Grim Fandango, де він писав, що прочитавши про мову в статті 1996 року в Dr.Dobb's Journal, він планує замінити використовуваний ними саморобний скриптова мова SCUMM на Lua [6]. В результаті їм був створений ігровий движок GrimE, використовуваний також більш пізнім квестом від LucasArts - Escape from Monkey Island.

У 2003 році в результаті опитування на сайті GameDev.net Lua був визнаний найпопулярнішим скриптовою мовою для розробки ігор [7].

Прикладом гри, програмованої за допомогою Lua є World of Warcraft. [8] [9] Мовою Lua описуються рівні гри-головоломки Enigma [10].

В іграх STALKER використовується Lua (скрипт зміни угруповання):

 function  select_actor_community  (  actor  ,  npc  )  db  .  actor  :  set_character_community  (  "Dolg"  ,  0  ,  0  )  - Змінить угруповання гравця на "борг"  end 

4.2. Програмне забезпечення

  • Інтерфейс користувача Adobe Photoshop Lightroom написаний з використанням Lua
  • Плагін Amnesia дозволяє автоматизувати обробку подій в R & Q за допомогою Lua
  • Конфігураційні файли Awesome (динамічний віконний менеджер для X Window System) використовують мову програмування Lua
  • Бібліотека віджетів BUIW для BREW використовує Lua для опису файлів тим
  • В Celestia, вільної тривимірної астрономічної програмі, Lua використовується для написання розширень і плагінів
  • Програма для системного моніторингу Conky використовує Lua як мова скриптів для розширення можливостей
  • В файлообмінної мережі Direct Connect Lua широко використовується як мова скриптів в програмному забезпеченні мережі
  • Dr.Web Enterprise Suite
  • HandyCache використовує Lua як мова для написання розширень
  • Фреймовий віконний менеджер Ion використовує Lua для налаштування і додавання нових функцій (можливостей)
  • IP-PBX Asterisk має можливість використовувати Lua як мова управління викликів (діалплан)
  • MySQL proxy використовує Lua як вбудовану мову для реалізації можливостей своєї функціональності
  • Платформа OpenAT дозволяє розробляти власні програми на Lua
  • В OpenWRT на Lua написаний веб інтерфейс управління
  • Текстовий редактор SciTE використовує Lua як мова скриптів для розширення можливостей
  • uiOne використовує Lua як мова скриптів при створенні користувальницьких інтерфейсів на мові TrigML
  • Медіаплеєр VLC використовує Lua як мова скриптів
  • Сніффер Wireshark використовує Lua як мова для створення аналізаторів мережевих протоколів.
  • Автоматизована мобільна система Агент + використовує Lua як мова скриптів для розширення можливостей
  • Клавіатури Logitech серії G (клавіатури для геймерів) підтримують написання скриптів на Lua.
  • Починаючи з версії 7.3 текстовий редактор Vim підтримує сценарії на Lua.
  • Lua підтримується NSClient + + як мова скриптів для розширення можливостей
  • В СУБД CronosPro [11] Lua використовується для створення сценаріїв керуючих (кнопкових) форм і форм введення
  • FXCM Marketscope Charts використовує мову Lua для написання технічних індикаторів і торгових стратегій.
  • Треккер (DAW) Renoise підтримує використання Lua для написання додатків розширюють можливості програми

5. IDE

Примітки

  1. Lua Implementations - lua-users.org/wiki/LuaImplementations (Англ.) . Lua-users wiki. Статичний - www.webcitation.org/61AbdtjZ2 з першоджерела 24 серпня 2011.
  2. Wikimedia Foundation Report, April 2012 - blog.wikimedia.org/2012/05/08/wikimedia-foundation-report-april-2012 / (Англ.) . Статичний - www.webcitation.org/68d4VPOI1 з першоджерела 23 червня 2012.
  3. The LuaJIT Project - luajit.org
  4. llvm-lua. JIT / Static compiler for Lua using LLVM on the backend. - code.google.com / p / llvm-lua /
  5. Bret Mogilefsky Lua In Grim Fandango - www.grimfandango.net/?page=articles&pagenumber=2. Статичний - www.webcitation.org/65BoxDdvU з першоджерела 4 лютого 2012.
  6. HOPL, 2007, с. 11
  7. Which language do you use for scripting in your game engine?. GameDev.net - Poll Results - web.archive.org/web/20031207171619/http :/ / gamedev.net / gdpolls / viewpoll.asp? ID = 163
  8. Paul Emmerich Beginning Lua with World of Warcraft Add-ons. - Apress, July 2009. - ISBN 1430223715
  9. James Whitehead II, Bryan McLemore, and Matthew Orlando World of Warcraft Programming. - Wiley, May 2008. - ISBN 0470229810
  10. Tom Gutschmidt Ch. 8. The Lua Game Community → Game Engines / / Game Programming with Python, Lua, and Ruby. - Premier Press, 2003. - 472 p. - ISBN 1-59200-079-7
  11. ІСУБД CronosPRO - www.cronos.ru/index.php?page=products-cpro

Цей текст може містити помилки.

Схожі роботи | скачати
© Усі права захищені
написати до нас