Ero sivun ”Lua” versioiden välillä

Siirry navigaatioon Siirry hakuun
EgoLuser (keskustelu | muokkaukset)
Paranneltu ulkoasua. Mainittu LuaJIT. Lisätty lisäksi yksinkertaisempi esimerkkiohjelma.
 
(18 välissä olevaa versiota 4 käyttäjän tekeminä ei näytetä)
Rivi 1: Rivi 1:
{{Perustietoa}}
{{Perustietoa}}
{{Ohjelmointikieli
| nimi            = Lua
| logo            = [[Tiedosto:Lua-Logo.svg|150px]]
| paradigma      = proseduaalinen, funktionaalinen, oliopohjainen
| tyypitys        = heikko, dynaaminen
| suoritusmalli  = tulkattava, käännettävä
| muistinhallinta = [[wikipedia:fi:Automaattinen_roskienkeräys|automaattinen]]
| tekijä          =
| kehittäjä      = Roberto Ierusalimschy, Waldemar Celes, Luiz Henrique de Figueiredo
| 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]]-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.


'''Lua''' on proseduaalinen ja olio-pohjainen scriptikieli, joka on suunniteltu ohjelmien toiminnallisuuden laajentamiseen. Kielellä voi muös tehdä omia itsenäisiä ohjelmia. Lua on totetutettu pienenä C-functiokirjastona. 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ä ==
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">
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;
}
</syntaxhighlight>
 
Skripti1.lua sisältö voisi olla esimerkiksi tällainen.
<syntaxhighlight lang="lua">
function tellme()
io.write("Tämä tuloste luetaan Lua tellme-funktion kautta.\n")
end
</syntaxhighlight>
 
Tiedosto <tt>ohjelma.cpp</tt> voidaan kääntää Linuxilla seuraavasti:
g++ ohjelma.cpp -o ohjelma


==Katso myös==
==Katso myös==
Rivi 7: Rivi 119:


==Aiheesta muualla==
==Aiheesta muualla==
* [http://www.lua.org/ Ohjelman kotisivu]
* [https://yaamboo.com/suomipelit/artikkeli.php?id=52 Suomipelit - LUA:n alkeet]
* [http://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]]
Noudettu kohteesta ”https://www.linux.fi/wiki/Lua