Lua | |
---|---|
Клас мовы | Шматпарадыгменная: сцэнарная, імператыўная (працэдурная, прататыпная, аб’ектна-арыентаваная), функцыянальная, мета, рэфлексіўная |
З’явілася ў | 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». Арыгінальны тэкст (англ.)
«In 1993, the only real contender was Tcl, which had been explicitly designed to be embedded into applications. However, Tcl had unfamiliar syntax, did not offer good support for data description, and ran only on Unix platforms. We did not consider LISP or Scheme because of their unfriendly syntax. Python was still in its infancy. In the free, do-it-yourself atmosphere that then reigned in Tecgraf, it was quite natural that we should try to develop our own scripting language ... Because many potential users of the language were not professional programmers, the language should avoid cryptic syntax and semantics. The implementation of the new language should be highly portable, because Tecgraf's clients had a very diverse collection of computer platforms. Finally, since we expected that other Tecgraf products would also need to embed a scripting language, the new language should follow the example of SOL and be provided as a library with a C API». |
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
{{cite book}}
: Адсутнічае загаловак у |contribution-url=
(даведка)