Lua (мова праграмавання)

Lua
Клас мовы Шматпарадыгменная: сцэнарная, імператыўная (працэдурная, прататыпная, аб’ектна-арыентаваная), функцыянальная, мета, рэфлексіўная
З’явілася ў 1993 (31 год таму) (1993)
Аўтар(ы) Раберта Ерусалімскі (Roberto Ierusalimschy)
Вальдэмар Селес (Waldemar Celes)
Луіс Энрыке дэ Фігейрэда (Luiz Henrique de Figueiredo)
Пашырэнне файлаў lua, luna, lunaire, anair
Тыпізацыя даных Дынамічная, моцная, качкавая
Асноўныя рэалізацыі
Дыялекты Metalua, Idle, GSL Shell
Зведала ўплыў C++, CLU, Modula, Scheme, SNOBOL
Паўплывала на GameMonkey, Io, JavaScript, Julia, MiniD, Red, Ring,[1] Ruby, Squirrel, MoonScript, C--
Ліцэнзія Ліцэнзія MIT
Сайт lua.org

Lua (лю́а; з парт.: lua [ˈlu.(w)ɐ], што азначае месяц) — легкаважная, высокаўзроўневая, шматпарадыгменная мова праграмавання, распрацаваная галоўным чынам для ўбудаванага выкарыстання ў прыкладных праграмах[2]. Lua з'яўляецца кросплатформавай мовай, паколькі інтэрпрэтатар скампіляванага байт-кода напісаны на ANSI C[3], і Lua мае адносна просты API для C, што спрашчае яе ўбудаванне ў прыкладных праграмах[4].

Lua паўстала ў 1993 годзе як мова для пашырэння прыкладнога ПЗ для задавальнення попыту на наладжванне, які ўзрастаў у той час. Яна забяспечвала асноўныя магчымасці большасці працэдурных моў праграмавання, але больш складаныя або прадметна-спецыфічныя магчымасці не былі ўключаны; хутчэй, яна ўключала механізмы для пашырэння мовы, што дазваляе праграмістам рэалізоўваць такія функцыі. Паколькі Lua задумвалася як агульная ўбудаваная мова пашырэнняў, праекціроўшчыкі Lua сканцэнтраваліся на паляпшэнні яе хуткасці, партатыўнасці, пашыральнасці і прастаты выкарыстання пры напісанні праграм.

Lua быў створаны ў 1993 годзе Раберта Ерусалімскім (Roberto Ierusalimschy), Луісам Энрыке дэ Фігейрэда (Luiz Henrique de Figueiredo) і Вальдэмарам Селесам (Waldemar Celes), членамі Групы тэхналогій камп'ютэрнай графікі (Tecgraf) у Папскім каталіцкім універсітэце Рыа-дэ-Жанэйра ў Бразіліі.

З 1977 па 1992 год у Бразіліі дзейнічала палітыка жорсткіх гандлёвых бар'ераў (так званых рынкавых рэзерваў) для камп'ютэрнага абсталявання і праграмнага забеспячэння. У такой атмасферы кліенты Tecgraf не маглі сабе дазволіць ні палітычна, ні фінансава купляць індывідуальнае праграмнае забеспячэнне з-за мяжы. Гэтыя прычыны падштурхнулі Tecgraf да распрацоўкі неабходных асноўных інструментаў з нуля.[5]

Папярэднікамі Lua былі мовы апісання/канфігурацыі даных SOL (мова простых аб'ектаў, англ.: Simple Object Language) і DEL (мова ўводу даных, англ.: data-entry language)[6]. Яны былі незалежна адна ад адной распрацаваны ў Tecgraf у 1992–1993 гадах, каб дадаць некаторую гнуткасць у два розныя праекты (абодва былі інтэрактыўнымі графічнымі праграмамі для інжынерных прыкладных праграм у кампаніі Petrobras). У SOL і DEL не хапала якіх-небудзь структур кіравання патокам, і Petrobras адчувала ўсё большую патрэбу ў тым, каб дадаць да іх поўную магутнасць праграмавання.

У «Эвалюцыі Lua» (The Evolution of Lua) аўтары мовы пісалі:[5]

« «У 1993, адзіным сапраўдным сапернікам быў Tcl, які быў выразна зпраектаваны каб быць убудаваным у прыкладное ПЗ. Тым не меней, Tcl меў незвычны сінтаксіс, не мог прапанаваць добрай падтрымкі апісання даных і мог запускацца толькі на Unix-платформах. Мы не разглядалі LISP або Scheme з прычыны іх недружалюбнага сінтаксіса. Python быў яшчэ ў зачатку. У свабоднай зрабі-сам атмасферы, якая пазней запанавала ў Tecgraf, было даволі натуральным паспрабаваць распрацаваць нашу асабістую сцэнарную мову ... З-за таго, што большая частка патэнцыйных карыстальнікаў не былі бы прафесійнымі праграмістамі, мова павінна была пазбягаць таямнічага сінтаксіса і семантыкі. Пры прыўнясенні новай мовы ў жыццё мы павінны былі зыходзіць з яе партатыўнасці, бо кліенты Tecgraf мелі вельмі разнастайны набор камп’ютарных платформ. І, нарэшце, паколькі мы чакалі, што іншым прадуктам Tecgraf спатрэбіцца ўбудаванне сцэнарнай мовы, новая мова павінна была прытрымлівацца прыкладу SOL і пастаўляцца як бібліятэка з API для C».
»

Lua 1.0 была распрацавана такім чынам, што яе канструктары аб'ектаў, у той час крыху адрозніваючыся ад цяперашняга лёгкага і гнуткага стылю, уключылі сінтаксіс апісання даных SOL (адсюль назва Lua: Sol азначае «Сонца» на партугальскай мове, а Lua азначае «Месяц»). Сінтаксіс Lua для структур кіравання ў асноўным быў запазычаны з Modula (if, while, repeat/until), але таксама быў пераняты ўплыў з CLU (шматлікія прызначэнні і шматлікія вяртанні з выклікаў функцый, як больш простая альтэрнатыва спасылачным параметрам або яўным паказальнікам), C++ («выдатная ідэя дазволіць аб’яўляць лакальную пераменную толькі там, дзе яна нам патрэбна»[5]), SNOBOL і AWK (асацыятыўныя масівы). У артыкуле, апублікаваным у часопісе Dr. Dobb's Journal, стваральнікі Lua таксама сцвярджаюць, што LISP і Scheme з іх адзіным усюдыісным механізмам структуры даных (спіс) аказалі вялікі ўплыў на іх рашэнне распрацаваць табліцу ў якасці асноўнай структуры даных Lua.[7]

З цягам часу семантыка Lua падвяргалася ўсё большаму ўплыву Scheme[5], асабліва з увядзеннем ананімных функцый і поўнага лексічнай вобласці. У новых версіях Lua было дададзена некалькі функцый.

Версіі Lua да версіі 5.0 выпускаліся пад ліцэнзіяй, падобнай да ліцэнзіі BSD . Пачынаючы з версіі 5.0 і далей, Lua карыстаецца ліцэнзіяй MIT. Абедзве з'яўляюцца дазвольнымі ліцэнзіямі на бясплатнае праграмнае забеспячэнне і амаль аднолькавыя.

Класічная праграма «Hello, World!» можа быць запісана наступным чынам:[8]

print("Hello, World!")

або як:

print 'Hello, World!'

Каментарый у Lua пачынаецца з падвойнага злучка і працягваецца да канца радка, падобна да Ada, Eiffel, Haskell, SQL і VHDL. Шматрадковы тэкст і каментарыі ўпрыгожваюцца падвойнымі квадратнымі дужкамі. Функцыя фактарыяла рэалізавана як функцыя ў наступным прыкладзе:

function factorial(n)
  local x = 1
  for i = 2, n do
    x = x * i
  end
  return x
end

Зноскі

  1. Ring Team. The Ring programming language and other languages(недаступная спасылка). ring-lang.net (5 снежня 2017). Архівавана з першакрыніцы 25 снежня 2018. Праверана 16 лістапада 2022.
  2. Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Filho, Waldemar Celes (June 1996). "Lua—An Extensible Extension Language". Software: Practice and Experience. 26 (6): 635–652. doi:10.1002/(SICI)1097-024X(199606)26:6<635::AID-SPE26>3.0.CO;2-P. ISSN 0038-0644. Праверана 24 October 2015.
  3. About Lua (англ.). Lua.org. Праверана 16.11.2022.
  4. Юры Тахцееў (Yuri Takhteyev). From Brazil to Wikipedia (англ.). Foreign Affairs (21 красавіка 2013).
  5. а б в г Roberto Ierusalimschy (2007). https://www.lua.org/doc/hopl.pdf (PDF). Proc. of ACM HOPL III. pp. 2–1–2–26. doi:10.1145/1238844.1238846. {{cite book}}: Адсутнічае загаловак у |contribution-url= (даведка)
  6. The evolution of an extension language: a history of Lua (2001).
  7. "Lua: an Extensible Embedded Language. A few metamechanisms replace a host of features". pp. 26–33.
  8. Programming in Lua : 1.