Ero sivun ”Lua” versioiden välillä
p (<syntaxhighlight>) |
(Paranneltu ulkoasua. Mainittu LuaJIT. Lisätty lisäksi yksinkertaisempi esimerkkiohjelma.) |
||
(8 välissä olevaa versiota 2 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
{{Perustietoa}} | {{Perustietoa}} | ||
{{Ohjelmointikieli | {{Ohjelmointikieli | ||
| nimi=Lua | | nimi = Lua | ||
| paradigma=proseduaalinen, funktionaalinen, oliopohjainen | | logo = [[Tiedosto:Lua-Logo.svg|150px]] | ||
| tyypitys=heikko, dynaaminen | | paradigma = proseduaalinen, funktionaalinen, oliopohjainen | ||
| suoritusmalli=tulkattava | | tyypitys = heikko, dynaaminen | ||
| muistinhallinta= | | suoritusmalli = tulkattava, käännettävä | ||
| vakaaversio=5.4 | | muistinhallinta = [[wikipedia:fi:Automaattinen_roskienkeräys|automaattinen]] | ||
| vakaapvm=[https://www.lua.org/versions.html#5.4 | | tekijä = | ||
| kotisivu=[https://www.lua.org/ lua.org] | | kehittäjä = Roberto Ierusalimschy, Waldemar Celes, Luiz Henrique de Figueiredo | ||
| lähdekoodi=[https://www.lua.org/ftp/ lua.org/ftp/] | | moottori = | ||
| ensijulkaisu = 1993 | |||
| vakaaversio = 5.4.4 | |||
| vakaapvm = 26. tammikuuta 2022 [https://www.lua.org/versions.html#5.4] | |||
| kehitysversio = | |||
| kehityspvm = | |||
| ohjelmoitu = | |||
| käyttöliittymä = | |||
| tyyppi = ohjelmointikieli, kehitystyökalut | |||
| lisenssi = [[MIT]] | |||
| kotisivu = [https://www.lua.org/ lua.org] | |||
| lähdekoodi = [https://www.lua.org/ftp/ lua.org/ftp/] | |||
}} | }} | ||
'''Lua''' on proseduaalinen ja olio-pohjainen skriptikieli, joka on suunniteltu ohjelmien toiminnallisuuden laajentamiseen. Kielellä voi myös tehdä omia itsenäisiä ohjelmia. Lua on totetutettu pienenä C- | '''Lua''' on proseduaalinen ja olio-pohjainen skriptikieli, joka on suunniteltu ohjelmien toiminnallisuuden laajentamiseen. Kielellä voi myös tehdä omia itsenäisiä ohjelmia. Lua on totetutettu pienenä [[C]]-funktiokirjastona. Tämän ansiosta se toimii useilla käyttöjärjestelmillä. Automaatisen muistinhallinnan ja pienten muistivaatimuksiensa ansiosta sitä voi myös käyttää sulautetuissa järjestelmissä. Aivan kuten [[Python]] Lua-kieli on tulkattava ja se tarvitsee tulkin eli virtuaalikoneen. Lua on suunniteltu yhdistettäväksi muihin ohjelmointikieliin. Luodut ohjelmat voi kääntää virtuaalikoneen binääreiksi, mutta yleisin käyttötapa on kääntää ohjelma Lua:n muistiin ja suorittaa se suoraan virtuaalikoneessa. Lua-kieltä on käytetty monissa ohjelmissa kuten [[VLC]]:ssä, Lightroomissa ja peleissä mm. World of Warcraftissa. | ||
Esimerkki Linuxille sovitetusta Lua-virtuaalikoneesta [[C++]]-kielellä toteutettuna. Luodaan seuraavanlainen ohjelma. | '''LuaJIT''' on vaihtoehtoinen toteutus Lua-kielen versiosta 5.1 (LuaJIT sisältää myös eräitä lisäosia). Sen tekee erikoiseksi se, että se on toteutettu JIT-kääntäjällä, mikä takaa erittäin hyvän suorituskyvyn. | ||
== Esimerkkejä == | |||
Yksinkertainen esimerkki. | |||
<syntaxhighlight lang="lua"> | |||
#!/usr/bin/lua | |||
local taulukko = {} | |||
math.randomseed(os.time()) | |||
for i=1,20 do | |||
taulukko[i] = math.random(1, 10) | |||
end | |||
-- Taulukot alkavat indeksistä 1. | |||
-- Tämän esimerkin lisäksi, taulukot toimivat myös kuten Perlin silput (eng. "hash") tai Pythonin sanakirjat. | |||
-- Eli ne elävät tavallaan "kaksoiselämää". | |||
-- Mutta ei kuitenkaan käytetä tätä ominaisuutta tässä esimerkissä. | |||
local laskuri = 1 | |||
while laskuri <= 20 do | |||
if taulukko[laskuri] % 2 == 0 then | |||
print(taulukko[laskuri] .. " on parillinen!") | |||
end | |||
laskuri = laskuri + 1 | |||
end | |||
</syntaxhighlight> | |||
=== Luan käyttäminen C++ projektissa === | |||
Esimerkki Linuxille sovitetusta Lua-virtuaalikoneesta [[C++]]-kielellä toteutettuna. Luodaan seuraavanlainen C++-ohjelma. | |||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
extern "C" | extern "C" | ||
Rivi 54: | Rivi 95: | ||
bail(L, "lua_pcall() failed"); | bail(L, "lua_pcall() failed"); | ||
lua_getglobal(L, "tellme"); | lua_getglobal(L, "tellme"); /* Mikä funktio suoritetaan*/ | ||
if (lua_pcall(L, 0, 0, 0)) | if (lua_pcall(L, 0, 0, 0)) /* Suoritetaan funktio*/ | ||
bail(L, "lua_pcall() failed"); | bail(L, "lua_pcall() failed"); /* Virhe jos lua tiedostossa on virhe.*/ | ||
lua_close(L); | lua_close(L); | ||
Rivi 78: | Rivi 119: | ||
==Aiheesta muualla== | ==Aiheesta muualla== | ||
* [ | * [https://yaamboo.com/suomipelit/artikkeli.php?id=52 Suomipelit - LUA:n alkeet] | ||
* [https://lua.org/pil/contents.html Programming in Lua (first edition) - Ilmainen e-kirja] | |||
* [https://luarocks.org LuaRocks paketinhallintajärjestelmä Lualle] | |||
* [https://github.com/lunarmodules/luacheck luacheck - Lint-tyylinen ohjelma, jolla voi tarkistaa omat Lua-ohjelmat] | |||
* [https://luajit.org LuaJIT-projektin kotisivut] | |||
{{Pelinteko}} | |||
{{Ohjelmointikielet}} | |||
[[Luokka:Kehitystyökalut]] | [[Luokka:Kehitystyökalut]] |
Nykyinen versio 11. huhtikuuta 2025 kello 17.37
Lua | |
---|---|
![]() | |
Paradigma | proseduaalinen, funktionaalinen, oliopohjainen |
Tyypitys | heikko, dynaaminen |
Suoritusmalli | tulkattava, käännettävä |
Muistinhallinta | automaattinen |
Kehittäjä(t) | Roberto Ierusalimschy, Waldemar Celes, Luiz Henrique de Figueiredo |
Ensijulkaisu | 1993 |
Vakaa versio | 5.4.4 / 26. tammikuuta 2022 [1] |
Tyyppi | ohjelmointikieli, kehitystyökalut |
Lisenssi | MIT |
Kotisivu | lua.org |
Lähdekoodi | lua.org/ftp/ |
Lua on proseduaalinen ja olio-pohjainen skriptikieli, joka on suunniteltu ohjelmien toiminnallisuuden laajentamiseen. Kielellä voi myös tehdä omia itsenäisiä ohjelmia. Lua on totetutettu pienenä C-funktiokirjastona. Tämän ansiosta se toimii useilla käyttöjärjestelmillä. Automaatisen muistinhallinnan ja pienten muistivaatimuksiensa ansiosta sitä voi myös käyttää sulautetuissa järjestelmissä. Aivan kuten Python Lua-kieli on tulkattava ja se tarvitsee tulkin eli virtuaalikoneen. Lua on suunniteltu yhdistettäväksi muihin ohjelmointikieliin. Luodut ohjelmat voi kääntää virtuaalikoneen binääreiksi, mutta yleisin käyttötapa on kääntää ohjelma Lua:n muistiin ja suorittaa se suoraan virtuaalikoneessa. Lua-kieltä on käytetty monissa ohjelmissa kuten VLC:ssä, Lightroomissa ja peleissä mm. World of Warcraftissa.
LuaJIT on vaihtoehtoinen toteutus Lua-kielen versiosta 5.1 (LuaJIT sisältää myös eräitä lisäosia). Sen tekee erikoiseksi se, että se on toteutettu JIT-kääntäjällä, mikä takaa erittäin hyvän suorituskyvyn.
Esimerkkejä[muokkaa]
Yksinkertainen esimerkki.
#!/usr/bin/lua
local taulukko = {}
math.randomseed(os.time())
for i=1,20 do
taulukko[i] = math.random(1, 10)
end
-- Taulukot alkavat indeksistä 1.
-- Tämän esimerkin lisäksi, taulukot toimivat myös kuten Perlin silput (eng. "hash") tai Pythonin sanakirjat.
-- Eli ne elävät tavallaan "kaksoiselämää".
-- Mutta ei kuitenkaan käytetä tätä ominaisuutta tässä esimerkissä.
local laskuri = 1
while laskuri <= 20 do
if taulukko[laskuri] % 2 == 0 then
print(taulukko[laskuri] .. " on parillinen!")
end
laskuri = laskuri + 1
end
Luan käyttäminen C++ projektissa[muokkaa]
Esimerkki Linuxille sovitetusta Lua-virtuaalikoneesta C++-kielellä toteutettuna. Luodaan seuraavanlainen C++-ohjelma.
extern "C"
{
#include <lua5.2/lua.h>
#include <lua5.2/lauxlib.h>
#include <lua5.2/lualib.h>
#include <stdlib.h> /* For function exit() */
#include <stdio.h> /* For input/output */
#include <string.h>
}
// Aliohjelma virhetilanteen tulostamista varten
void bail(lua_State *L, const char *msg){
fprintf(stderr, "\nFATAL ERROR:\n %s: %s\n\n",
msg, lua_tostring(L, -1));
exit(1);
}
int main(void)
{
// Luodaan LUA-virtuaalikone.
lua_State *L;
L = luaL_newstate();
// Otetaan LUA:n kirjastot käyttöön.
luaL_openlibs(L);
// Ladataan skipti1.lua käyttöön, mutta ei suoriteta sitä
if (luaL_loadfile(L, "scripti1.lua"))
// Virhe jos tiedostoa ei voi lukea
bail(L, "luaL_loadfile() failed");
// Suorita skipti1.lua
if (lua_pcall(L, 0, 0, 0))
// Virhe jos tiedoston sisällössä on virhe
bail(L, "lua_pcall() failed");
lua_getglobal(L, "tellme"); /* Mikä funktio suoritetaan*/
if (lua_pcall(L, 0, 0, 0)) /* Suoritetaan funktio*/
bail(L, "lua_pcall() failed"); /* Virhe jos lua tiedostossa on virhe.*/
lua_close(L);
return 0;
}
Skripti1.lua sisältö voisi olla esimerkiksi tällainen.
function tellme()
io.write("Tämä tuloste luetaan Lua tellme-funktion kautta.\n")
end
Tiedosto ohjelma.cpp voidaan kääntää Linuxilla seuraavasti:
g++ ohjelma.cpp -o ohjelma
Katso myös[muokkaa]
- Löve on Lua-scriptikieltä käyttävä pelimoottori.
Aiheesta muualla[muokkaa]
- Suomipelit - LUA:n alkeet
- Programming in Lua (first edition) - Ilmainen e-kirja
- LuaRocks paketinhallintajärjestelmä Lualle
- luacheck - Lint-tyylinen ohjelma, jolla voi tarkistaa omat Lua-ohjelmat
- LuaJIT-projektin kotisivut
![]() | |
Käännettävät | Assembly | C | C++ | Go | Haxe | Haskell | Java | Pascal |
---|---|
Tulkattavat | Python | Perl | PHP | Ruby |
-skriptikielet | Lua | Bash |
GPGPU | OpenCL |
muut | GLSL |