Lua

Lua
Парадигмамульти-парадигмова: скриптова, імперативна, функціональна, об'єктно-орієнтована, прототипна
Дата появи1993[1] Редагувати інформацію у Вікіданих
ТворціРоберто Єрусалимський Редагувати інформацію у Вікіданих
РозробникРоберто Єрусалимський[2] Редагувати інформацію у Вікіданих
Останній реліз
Система типізаціїдинамічна, слаба, качина
Основні реалізаціїLua, LuaJIT, LLVM-Lua, LuaCLR, Nua, Lua Alchemy
ДіалектиMetalua
Під впливом відC++ Редагувати інформацію у Вікіданих, CLU Редагувати інформацію у Вікіданих, Simple Object Languaged Редагувати інформацію у Вікіданих, DELd Редагувати інформацію у Вікіданих, Snobol Редагувати інформацію у Вікіданих, Модула Редагувати інформацію у Вікіданих, Modula-2d Редагувати інформацію у Вікіданих і Scheme Редагувати інформацію у Вікіданих
Вплинула наIo[en], GameMonkey, Squirrel, Falcon, MiniD
Мова реалізаціїC[3] Редагувати інформацію у Вікіданих
Операційна системакросплатформова програма[4] Редагувати інформацію у Вікіданих
ЛіцензіяMIT[5][6] Редагувати інформацію у Вікіданих
Звичайні розширення файлів.lua[7][8] Редагувати інформацію у Вікіданих, .luna Редагувати інформацію у Вікіданих, .lunaire Редагувати інформацію у Вікіданих або .anair Редагувати інформацію у Вікіданих
Репозиторій вихідного кодуgithub.com/lua/lua Редагувати інформацію у Вікіданих
Вебсайтlua.org

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

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

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

Історія

Створення мови почалося в 1993. Команда розробників з католицького університету Ріо-де-Жанейро невелика — Роберто Єрусалимський (Roberto Ierusalimschy), Вольдемар Целес (Waldemar Celes) і Луїс Енріке (Luiz Henrique). Спочатку мова замислювалася як описова — для зручності формування великих масивів даних при рішенні завдань обчислювального експерименту і машинного моделювання. Але відтоді мова зазнала значних змін і низки серйозних архітектурних модифікацій. Сьогоднішня популярність Lua така, що Microsoft виділила розробникам грант на створення .NET-версії мови. У багатьох іграх Lua використовується як «скриптовий рушій» завдяки унікальному поєднанню швидкодії, легкості вбудовування в програми та підтримці «розширюваної семантики».

Реалізація

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

Для завдань, критичних за часом, є JIT-компілятор Lua LuaJIT.

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

Синтаксис

Класичну програму Hello, world! (Вітаю, світе!) можна написати так:

 print("Вітаю, світе!")

Цикл з лічильником та кроком в одиницю:

for i = 1 , 10 do
   print( i )
end

В результаті будуть виведені числа від 1 до 10.

Для зміни кроку в циклі треба вказати крок третім параметром:

for i = 1 , 10 , 2  do      --  тепер крок циклу дорівнює 2
    print( i )
end

В результаті будуть виведені числа 1, 3, 5, 7 і 9.

Підрахунок факторіалу дає приклад використання рекурсивних функцій:

function factorial(n)
  if n == 0 then
    return 1                    -- Коментар в Lua починається з подвійного дефіса
  else
    return n * factorial(n - 1) -- і закінчується на кінці рядка
  end
end

function factorial2(n) -- коротший еквівалент написаного вище
  return n==0 and 1 or n*factorial2(n - 1)
end
 
print([[кілька
 рядків]])                           -- [[багаторядковий вираз чи коментар треба
 розміщувати в подвійні квадратні дужки]]

Керування потоком

В Lua є один тип умовного тесту: if then end із необов’язковими конструкціями else і elseif then.

Загальний оператор if then end вимагає всіх трьох ключових слів:

if <умова> then
	--statement body
end

Ключове слово else може бути доданим із супровідним блоком інструкцій для керування виконання при виконанні, коли if повертає false:

if умова then
	--statement body
else
	--statement body
end

Виконанням також можна керувати за кількома умовами за допомогою ключових слів elseif then.:

if умова then
	--statement body
elseif умова then
	--statement body
else -- необов’зково
	--optional default statement body
end

Lua має чотири типи умовних циклів: цикл while, цикл repeat (схожий на цикл do while), нумеровий циклfor і загальний цикл for.

--умова = true

while умова do
  --statements
end

repeat
  --statements
until умова

for i = first, last, delta do  --дельта може бути від’ємною, що дозволяє циклу for відраховувати вниз або вгору
  --statements
  --example: print(i)
end

Цей загальний цикл for буде обходити таблицю _G, використовуючи стандартну функцію ітератора pairs, доки вона не поверне nil:

for key, value in pairs(_G) do
  print(key, value)
end

Цикли також можуть бути вкладеними (розміщеними всередині іншого циклу).

local grid = {
  { 11, 12, 13 },
  { 21, 22, 23 },
  { 31, 32, 33 }
}

for y, row in pairs(grid) do
  for x, value in pairs(row) do
    print(x, y, value)
  end
end

Типи даних

В Lua є вісім типів даних: nil (невизначені значення), boolean (логічні значення), number (числа), string (рядки), table (таблиці), function (функції), thread (потоки) та userdata. Дізнатись тип змінної можна за допомогою функції type().

nil

nil — це порожнє значення. Його головні властивості — відрізнятись від будь-якого значення та вказувати на відсутність значення, придатного для якого-небудь використання. Також nil може бути використаним як логічне значення, в такому разі він позначатиме неправду.

Логічні значення

Логічний тип boolean містить два значення: true (правда) та false (неправда).

Числа

Числовий тип в Lua зазвичай представлений дійсними числами з рухомою комою з подвійною точністю, хоча можна зібрати Lua з іншими числами, змінивши визначення в luaconf.h.

Рядки

Рядки в Lua можуть включати в себе будь-який восьмибітний символ. Щоб створити рядковий літерал, вміст рядка потрібно помістити в одинарні (') або подвійні (") лапки. Також можна використовувати рядки з переносами. Для цього використовуються подвійні квадратні дужки n-ного рівня (де [[ — дужки нульового рівня, [=[ — дужки першого рівня, [==[ — дужки другого рівня, і т. д.). Для прикладу, використаємо дужки третього рівня:

 a = [===[рядки
з
переносом
в
"lua"]===]

Можна помітити, що в літералах, створених таким чином, не потрібно екранувати одинарні та подвійні лапки, як це потрібно робити при інших видах запису.

Таблиці

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

Таблиці не мають фіксованого розміру. Тому можна додавати скільки завгодно елементів в таблицю динамічно.

Приклад таблиці:

t = { } -- пуста таблиця

t['k'] = 10 -- Ключ k, значення 10

t[20] = " super " -- Ключ 20, значення " super "

t.IP = '192.168.0.1' -- Ключ IP, значення 192.168.0.1

Тепер заповнена таблиця буде виглядати так:

t = {
    k  = 10 ,                  
    [ 20 ] = " super ",
    IP  =  ' 192.168.0.1 '
}

Одинарні та подвійні лапки в Lua — рівнозначні. Варто вибрати один із видів лапок при написанні коду.

Для виводу пар — (Ключ, Значення) з таблиці на екран скористайтесь циклом for, базовою функцією pairs() та функцією print():

for key, val in pairs(t)  do
    print(key, val)
end

В результаті отримаємо пари:

20    super

k    10

IP    192.168.0.1

Таблиці можна використовувати і як звичайні масиви. Для цього варто скористатись записом t = {'a', 'b', 'c', 'd', 'e'}, після чого до елементів можна звертатись за індексом: print(t[2]) --виведе b. Зверніть увагу, що створені таким чином масиви, починаються з одиниці, а не з нуля, як в більшості інших мов.

Функції

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

Потоки

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

userdata

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

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

Lua у Вікіпедії

У січні 2012 на зустрічі розробників[9] вікірушія MediaWiki, який використовується для забезпечення роботи Вікіпедії, було прийнято рішення[10][11] про залучення мови Lua для розробки шаблонів. Використовувана на той час система шаблонів не влаштовувала розробників через зайву ускладненість та низьку ефективність. Інтеграція Lua в MediaWiki почалася на початку травня 2012, після виходу релізу MediaWiki 1.19 та міграції проєкту на систему управління початковими текстами Git.

Шаблони дозволяють користувачам MediaWiki автоматизувати створення типового вмісту, що включається в інші сторінки, і створювати інструменти для маніпуляції даними, перетворюючи вікі-текст в якусь подобу мови програмування. Наразі шаблони для MediaWiki створюються з використанням додаткової wiki-розмітки та розширення ParserFunctions, що створює істотні обмеження у функціональності й призводить до витрат значних ресурсів при виконанні. Намір перейти до використання в шаблонах повноцінної мови програмування назрів уже давно, але виникла проблема вибору: розгорнулася палка дискусія між прихильниками Javascript/WikiScript і Lua.

У підсумку перемогла Lua, головним чином завдяки технічно простішій інтеграції в проєкт. Серед інших переваг було названо: ефективна робота з пам'яттю, висока продуктивність (застосовується JIT-компіляція, що робить Lua швидшою за PHP з використанням Zend), компактність і початкова орієнтація на ефективне вбудовування в сторонні застосунки. Робота над експериментальним прототипом на базі Lua почалася у 2011 році й показала, що можна істотно збільшити продуктивність системи шаблонів.

Виноски

  1. Lua: about
  2. https://www.lua.org/authors.html
  3. The lua Open Source Project on Open Hub: Languages Page — 2006.
  4. https://www.lua.org/about.html
  5. https://www.lua.org/license.html
  6. The lua Open Source Project on Open Hub: Licenses Page — 2006.
  7. Lua 5.1 Reference Manual — 2019.
  8. A Look at the Design of Lua[New York]: Association for Computing Machinery, 2018. — ISSN 0001-0782; 1557-7317
  9. Lua scripting/Meeting 2012-01-25. Архів оригіналу за 26 травня 2012. Процитовано 3 лютого 2012.
  10. Mailing List Archive: Wikipedia: Wikitech Moving forward with Lua. Архів оригіналу за 4 лютого 2012. Процитовано 3 лютого 2012.
  11. Wikipedia будет использовать Lua в качестве языка для разработки шаблонов. opennet.ru (рос.). Архів оригіналу за 2 лютого 2012. Процитовано 3 лютого 2012.

Посилання

Read other articles:

Spanish footballer For other people with the same nickname, see Juanfran. In this Spanish name, the first or paternal surname is Moreno and the second or maternal family name is Fuertes. Juanfran Juanfran with Deportivo La Coruña in 2015Personal informationFull name Juan Francisco Moreno Fuertes[1]Date of birth (1988-09-11) 11 September 1988 (age 35)[2]Place of birth Madrid, Spain[2]Height 1.79 m (5 ft 10 in)[2]Position(s) Right-bac...

 

МоншеMoncheux   Країна  Франція Регіон Гранд-Ест  Департамент Мозель  Округ Мец Кантон Верні Код INSEE 57472 Поштові індекси 57420 Координати 48°56′12″ пн. ш. 6°20′15″ сх. д.H G O Висота 242 - 365 м.н.р.м. Площа 7,35 км² Населення 147 (01-2020[1]) Густота 20,14 ос./км² Розміщення Влад...

 

2007 video game This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Kane & Lynch: Dead Men – news · newspapers · books · scholar · JSTOR (June 2008) (Learn how and when to remove this template message) 2007 video gameKane & Lynch: Dead MenDeveloper(s)IO InteractivePublisher(s)Eidos InteractiveDirector(s)...

El Pintor Studioalbum von Interpol Veröffent-lichung(en) 2014 Aufnahme 2014 Label(s) Matador Records Format(e) CD, Vinyl Genre(s) Indie-Rock Titel (Anzahl) 10 Länge 39:50 Besetzung Gesang, Gitarre, Bass: Paul Banks Gitarre, Piano: Daniel Kessler Schlagzeug: Samuel „Sam“ Fogarino Produktion Interpol Studio(s) Electric Lady Studios; Atomic Sound Chronologie Interpol (2010) El Pintor Marauder (2018) Singleauskopplungen 12. August 2014 All the Rage Back Home 25. November 2014 Everythin...

 

Carretera Ostiz - ”NA-411” Ostitz - ”NA-411” errepidea  Navarra, España España Datos de la rutaIdentificador  NA-4240 Tipo Carretera localLongitud 0,65 kmAdministraciónAdministración Gobierno de Navarra(Dto. Cohesión Territorial) Red Red de Carreteras de NavarraOrientaciónInicio PK 0,88 de NA-8109Fin PK 27,89 de NA-411Cruces NA-411[editar datos en Wikidata] La  NA-4240  es una carretera local perteneciente a la Red de Carreteras de Na...

 

У этого топонима есть и другие значения, см. Плотники. ДеревняПлотники 57°44′21″ с. ш. 36°05′13″ в. д.HGЯO Страна  Россия Субъект Федерации Тверская область Муниципальный район Максатихинский Сельское поселение Зареченское История и география Высота центра 162 м Ч...

QatarAssociationQatar Winter Sports CommitteeHead coachMarius GligaTeam colors   IIHF codeQATRankingCurrent IIHFNR (28 May 2023)[1]First international Oman 9–3 Qatar (Doha, Qatar; 28 February 2014)Biggest win Qatar 7–2 Oman (Kuwait City, Kuwait; 12 June 2014)Biggest defeat Philippines 14–2 Qatar (Sapporo, Japan; 23 February 2017)Gulf Ice Hockey ChampionshipAppearances2 (first in 2014)Best result 2nd (2016)IIHF Challenge Cup of AsiaAppearan...

 

Диск «Ropin' The Wind» американского кантри-исполнителя Гарта Брукса стал лучшим альбомом года в США в 1992 году. Список лучших альбомов США 1992 года (Billboard Year End Charts) — итоговый список наиболее популярных альбомов журнала Billboard по данным продаж за 1992 год[1][2]. Лучшим альбо...

 

Lovers of the Red SkyPoster promosiNama alternatifHong Chun-giRed Sky[1]Hangul홍천기 Hanja紅天機 GenreDrama sejarahFantasiRomansaBerdasarkanHong Chun-gioleh Jung Eun-gwolPengembangStudioS (SBS)Ditulis olehHa EunSutradaraJang Tae-yooPemeranKim Yoo-jungAhn Hyo-seopGong MyungKwak Si-yangMusikDirector Music Jeon Chang-yeop[2]Negara asalKorea SelatanBahasa asliKoreaJmlh. episode16ProduksiProduser eksekutifCho Seung-hoon (CP) Hong Sung-changProduserHan Jeong-hwanLee Gwang-soon...

US Senate special committee (1941–48) Senators, counsel, witnesses, and visitors at a 1943 meeting of the Truman Committee. Senator Harry S. Truman is at the center. This article is part of a series aboutHarry S. Truman Early life Electoral history Assassination attempt Legacy Truman Day Scholarship USS Harry S. Truman Truman Reservoir Little White House Bibliography Senator from Missouri Senate career Truman Committee Senate elections 1934 1940 33rd President of the United States Pres...

 

Este artículo o sección necesita referencias que aparezcan en una publicación acreditada.Este aviso fue puesto el 11 de mayo de 2022. Para otros usos de este término, véase Río Tercero (desambiguación). Río Tercero/Ctalamochita Puente de la Ruta Provincial 5 sobre el río Tercero.Ubicación geográficaCuenca Cuenca del PlataNacimiento Cerro ChampaquíDesembocadura Río CarcarañáCoordenadas 32°54′53″S 62°19′30″O / -32.914722222222, -62.325Ubicación administ...

 

مطار الخرطوم الدولي الجديد إياتا: KRT – ايكاو: HSSN موجز نوع المطار عام المشغل هيئة الطيران المدني يخدم ولاية الخرطوم البلد السودان  الموقع الخرطوم -  السودان إحداثيات 15°15′56″N 32°21′35″E / 15.26555556°N 32.35972222°E / 15.26555556; 32.35972222  الخريطة مدارج الاتجاه الطول نوع السط...

Este artigo não cita fontes confiáveis. Ajude a inserir referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW  • CAPES  • Google (N • L • A) (Outubro de 2021) Escola Técnica Superior de Arquitetura de Madri. Escola Técnica Superior de Arquitetura de Valencia. Escola Técnica Superior de Arquitetura del Vallés. Nas universidades públicas espanholas, a denominação Escola Técnica Superior de Arqu...

 

Частина серії статей на тему:Традиційна релігія«Одін у Вельви», Лоренц Фроліх, 1895 рік Ключові поняття Божества Герой Монстр Дух Душа Космос Хаос Потойбічний світ Створення Вічне повернення Золота доба Доля Сакральне Жертвопринесення Ініціація Міф Монотеїзм Антропомор...

 

село Турівка Країна  Україна Область Волинська область Район Володимирський район Громада Устилузька міська громада Облікова картка Турівка  Основні дані Населення 149 Площа 0,719 км² Густота населення 207,23 осіб/км² Поштовий індекс 44712 Телефонний код +380 3342 Геогра...

Putri Pariwisata RiauLogo Putri Pariwisata IndonesiaPembuatJohnnie SugiartoNegara asal Riau, IndonesiaRilis asliRilis2008 –Sekarang Putri Pariwisata Riau merupakan kontes kecantikan berskala regional yang bertujuan memilih delegasi provinsi Riau pada Putri Pariwisata Indonesia. Terhitung sejak keikutsertaan edisi 2008, Riau belum pernah memenangkan Putri Pariwisata Indonesia. Prestasi tertinggi Putri Pariwisata Riau yakni Runner-up 1, yang diraih oleh Jeni Rahmadial Fitri (2019) d...

 

Painting by Edgar Degas The Millinery ShopArtistEdgar DegasYearbetween 1879 and 1886TypeOil paint on canvasDimensions100 by 110.7 centimetres (39.4 in × 43.6 in)LocationArt Institute of ChicagoThe Millinery Shop (1879/86) is a painting by French artist Edgar Degas. It depicts a woman sitting at a display table in a millinery shop, appearing to closely examine or work on a lady's hat, which she holds in her hands. The view of the scene is at an angle from above. Although Degas ...

 

Letnie Igrzyska Olimpijskie 2012GimnastykaĆwiczenia na drążku mężczyzn Epke Zonderland Fabian Hambüchen Zou Kai Ćwiczenia na drążku mężczyzn na Letnich Igrzyskach Olimpijskich 2012 rozegrane zostały 7 sierpnia w hali The O2. Terminarz Data[1] Godzina 7 sierpnia 2012 15:37 Finał Wyniki Eliminacje Pozycja Zawodnik Państwo Trudność Wykonanie Kary Razem 1. Epke Zonderland  Holandia 7.500 8.466 15.966 2. Zhang Chenglong  Chiny 7.500 8.433 15.933 3. Danell Leyva  Stan...

Vespasiano Gonzaga, en un retrato pintado por Bernardino Campi (Como, Italia, Museo Cívico). Vespasiano Gonzaga Colonna (Fondi, 6 de diciembre de 1531 – Sabbioneta, 26 de febrero de 1591), Duque (soberano) de Sabbioneta y Duque de Traetto, fue un noble italiano de la familia Gonzaga, militar, hábil diplomático, literato, arquitecto militar y mecenas, que llegó a ser uno de los hombres de confianza de Felipe II que le nombró grande de España y después virrey de Navarra (1572-75) y vir...

 

As OneNama lainHangul코리아 Alih Aksara yang DisempurnakanKoriaMcCune–ReischauerK‘oria Sutradara Moon Hyun-sung Produser Lee Su-nam Kim Ji-hoon Lee Han-seung Min Jong-eun Ditulis oleh Kwon Seong-hwi Yoo Young-ah PemeranHa Ji-won Bae DoonaPenata musikKim Tae-seongSinematograferJo Dong-heonPenyuntingKim Sun-minDistributorCJ EntertainmentTanggal rilis 3 Mei 2012 (2012-05-03) Durasi127 menitNegara Korea Selatan Bahasa Korea PendapatankotorUS$11,794,204[1] As One (H...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!