Ero sivun ”Lua” versioiden välillä
p (esimerkki skripti lua-virtuaalikoneesta C++ toteutettuna) |
|||
Rivi 2: | Rivi 2: | ||
'''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. | '''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. | ||
Esimerkki Linuxille sovitetusta Lua-virtuaalikoneesta C++-kielellä toteutettuna. Luodaan seuraavanlainen ohjelma. | |||
<pre> | |||
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; | |||
} | |||
</pre> | |||
Skripti1.lua sisältö voisi olla esimerkiksi tällainen. | |||
<pre> | |||
function tellme() | |||
io.write("Tämä tuloste luetaan Lua tellme-funktion kautta.\n") | |||
end | |||
</pre> | |||
Tiedosto <tt>ohjelma.cpp</tt> voidaan kääntää Linuxilla seuraavasti: | |||
g++ ohjelma.cpp -o ohjelma | |||
==Katso myös== | ==Katso myös== |
Versio 7. lokakuuta 2015 kello 00.56
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.
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.