Lua

Linux.fista
Versio hetkellä 24. maaliskuuta 2022 kello 18.55 – tehnyt Lahtis (keskustelu | muokkaukset)
(ero) ← Vanhempi versio | Nykyinen versio (ero) | Uudempi versio → (ero)
Siirry navigaatioon Siirry hakuun
Linux.fi-wikissä artikkelit käsittelevät yleensä aihettaan siltä osin, kuin se koskee Linuxia ja avoimia/vapaita ohjelmistoja. Yleisluontoisemman artikkelin tästä aiheesta löydät tietosanakirja Wikipediasta.
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.

Esimerkki Linuxille sovitetusta Lua-virtuaalikoneesta C++-kielellä toteutettuna. Luodaan seuraavanlainen 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

  • Löve on Lua-scriptikieltä käyttävä pelimoottori.

Aiheesta muualla

v  k  m
Peliohjelmointiin liittyvät artikkelit
 Yleiset  Peliohjelmointi Linuxilla | Musiikki ja äänet | Kuvankäsittely | Mallinnus | Lokalisointi
 2D 
 Pelimoottorit  Solar2D | Defold | Fife | LÖVE
  -Karttamuokkaimet  Tiled | OGMO Editor
 3D 
 Avoimet  Banshee 3D | Castle Game Engine | DarkPlaces | Defold | Godot Engine | Grit engine | Irrlicht Engine | id Tech (Quake) | ioquake3 | jMonkeyEngine | Lightfeather 3D | The Mirror | OGRE | O3DE | Panda3D | Range Engine | Serious | UPBGE | QFusion
 Suljetut  Axis Game Factory | CryEngine | Source | Unity3D | Unreal Engine
 Keskeytyneet  Crystal Space
  kuvankäsittely tekstuurikartoitus mallinnus 
 Kuvankäsittely  Gimp
  -Pikseligrafiikka  Aseprite | Pixelator
 Mallinnus  Blender | UPBGE | Bforartists | MakeHuman | Neobarok | ngPlant | ArbaroDust3D
  -Tekstuurikartoitus  AwesomeBump | Material Maker | Ptex
  -Tekstuurien luonti  ArmorLab
  -Pintakuviomaalaus  ArmorPaint
 Maastogeneraattorit  TerraForge3D
 Ohjelmointikielet 
  -Käännettävät  C | C++
  -Tulkattavat  Java | Python | Lua
  Ohjelmointimoduulit  pygame
  -Kirjastot  Assimp | OpenGL | Vulkan | SDL
v  k  m
Ohjelmointikielet
 Käännettävät  Assembly | C | C++ | Go | Haxe | Haskell | Java | Pascal
 Tulkattavat  Python | Perl | PHP | Ruby
 -skriptikielet  Lua | Bash
 GPGPU  OpenCL
 muut  GLSL