Movatterモバイル変換


[0]ホーム

URL:


Jump to content
WikipediaThe Free Encyclopedia
Search

Lua

From Wikipedia, the free encyclopedia
(Redirected fromLua (programming language))
Lightweight programming language
For other uses, seeLua (disambiguation).
Lua
Screenshot of Lua code from aWikipedia Lua module using theMediaWikiScribunto extension
ParadigmMulti-paradigm:scripting,imperative (procedural,prototype-based,object-oriented),functional,meta,reflective
Designed byRoberto Ierusalimschy
Waldemar Celes
Luiz Henrique de Figueiredo
First appeared1993; 32 years ago (1993)
Stable release
5.4.8[1] Edit this on Wikidata / 4 June 2025; 5 months ago (4 June 2025)
Typing disciplineDynamic,strong,duck
Implementation languageANSI C
OSCross-platform
LicenseMIT
Filename extensions.lua
Websitelua.org
Majorimplementations
Lua,LuaJIT,LuaVela,MoonSharp,
Dialects
GSL Shell,Luau
Influenced by
C++,CLU,Modula,Scheme,SNOBOL
Influenced
GameMonkey,Io,JavaScript[citation needed],Julia,Red,Ring,[2]Ruby,[citation needed]Squirrel,C--,Luau,

Lua(/ˈlə/LOO; fromPortuguese:lua[ˈlu(w)ɐ] meaningmoon) is alightweight,high-level,multi-paradigmprogramming language designed mainly forembedded use in applications.[3] Lua iscross-platform software, since theinterpreter ofcompiledbytecode is written inANSI C,[4] and Lua has a relatively simple C application programming interface (API) to embed it into applications.[5]

Lua originated in 1993 as a language for extendingsoftware applications to meet the increasing demand for customization at the time. It provided the basic facilities of mostprocedural programming languages, but more complicated ordomain-specific features were not included; rather, it included mechanisms for extending the language, allowing programmers to implement such features. As Lua was intended to be a general embeddable extension language, the designers of Lua focused on improving itsspeed,portability, extensibility and ease-of-use in development.

History

[edit]

Lua was created in 1993 byRoberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes, members of the Computer Graphics Technology Group (Tecgraf) at thePontifical Catholic University of Rio de Janeiro, inBrazil.

From 1977 until 1992, Brazil had a policy of strongtrade barriers (called a market reserve) forcomputer hardware andsoftware, believing that Brazil could and should produce its own hardware and software. In that climate, Tecgraf's clients could not afford, either politically or financially, to buy customized software from abroad; under the market reserve, clients would have to go through a complex bureaucratic process to prove their needs couldn't be met by Brazilian companies. Those reasons led Tecgraf to implement the basic tools it needed from scratch.[6]

Lua's predecessors were the data-description and configuration languages Simple Object Language (SOL) and Data-Entry Language (DEL).[7] They had been independently developed at Tecgraf in 1992–1993 to add some flexibility into two different projects (both were interactive graphical programs for engineering applications atPetrobras company). There was a lack of any flow-control structures in SOL and DEL, and Petrobras felt a growing need to add full programming power to them.

InThe Evolution of Lua, the language's authors wrote:[6]

In 1993, the only real contender wasTcl, 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 considerLISP orScheme 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 was designed in such a way that its object constructors, being then slightly different from the current light and flexible style, incorporated the data-description syntax of SOL (hence the name Lua:Sol meaning "Sun" in Portuguese, andLua meaning "Moon"). Luasyntax for control structures was mostly borrowed fromModula (if,while,repeat/until), but also had taken influence fromCLU (multiple assignments and multiple returns from function calls, as a simpler alternative toreference parameters or explicitpointers),C++ ("neat idea of allowing alocal variable to be declared only where we need it"[6]),SNOBOL andAWK (associative arrays). In an article published inDr. Dobb's Journal, Lua's creators also state that LISP and Scheme with their single, ubiquitous data-structure mechanism (thelist) were a major influence on their decision to develop the table as the primary data structure of Lua.[8]

Luasemantics have been increasingly influenced by Scheme over time,[6] especially with the introduction ofanonymous functions and fulllexical scoping. Several features were added in new Lua versions.

Versions of Lua prior to version 5.0 were released under a license similar to theBSD license. From version 5.0 onwards, Lua has been licensed under theMIT License. Both arepermissive free software licences and are almost identical.

Features

[edit]

Lua is commonly described as a "multi-paradigm" language, providing a small set of general features that can be extended to fit different problem types. Lua does not contain explicit support forinheritance, but allows it to be implemented withmetatables. Similarly, Lua allows programmers to implementnamespaces,classes and other related features using its single table implementation;first-class functions allow the employment of many techniques fromfunctional programming and fulllexical scoping allows fine-grainedinformation hiding to enforce theprinciple of least privilege.

In general, Lua strives to provide simple, flexiblemeta-features that can be extended as needed, rather than supply a feature-set specific to one programming paradigm. As a result, the base language islight; the full referenceinterpreter is only about 247 kB compiled[4] and easily adaptable to a broad range of applications.

As adynamically typed language intended for use as an extension language orscripting language, Lua is compact enough to fit on a variety of host platforms. It supports only a small number of atomic data structures such asBoolean values, numbers (double-precisionfloating point and64-bitintegers by default) andstrings. Typical data structures such asarrays,sets,lists andrecords can be represented using Lua's single native data structure, the table, which is essentially a heterogeneousassociative array.

Lua implements a small set of advanced features such asfirst-class functions,garbage collection,closures, propertail calls,coercion (automatic conversion between string and number values at run time),coroutines (cooperative multitasking) anddynamic module loading.

Syntax

[edit]

The classic"Hello, World!" program can be written as follows, with or without parentheses:[9][a]

print("Hello, World!")
print"Hello, World!"

The declaration of a variable, without a value.

localvariable

The declaration of a variable with a value of 10.

localstudents=10

Acomment in Lua starts with a double-hyphen and runs to the end of the line, similar toAda,Eiffel,Haskell,SQL andVHDL. Multi-line strings and comments are marked with double square brackets.

-- Single line comment--[[Multi-line comment--]]

Thefactorial function is implemented in this example:

functionfactorial(n)localx=1fori=2,ndox=x*iendreturnxend

Control flow

[edit]

Lua has one type ofconditional test:if then end with optionalelse andelseif then execution control constructs.

The genericif then end statement requires all three keywords:

ifconditionthen--statement bodyend

An example of anif statement

ifx~=10thenprint(x)end

Theelse keyword may be added with an accompanying statement block to control execution when theif condition evaluates tofalse:

ifconditionthen--statement bodyelse--statement bodyend

An example of anif else statement

ifx==10thenprint(10)elseprint(x)end

Execution may also be controlled according to multiple conditions using theelseif then keywords:

ifconditionthen--statement bodyelseifconditionthen--statement bodyelse-- optional--optional default statement bodyend

An example of anif elseif else statement

ifx==ythenprint("x = y")elseifx==zthenprint("x = z")else-- optionalprint("x does not equal any other variable")end

Lua has four types of conditional loops: thewhile loop, therepeat loop (similar to ado while loop), the numericfor loop and the genericfor loop.

--condition = truewhileconditiondo--statementsendrepeat--statementsuntilconditionfori=first,last,deltado--delta may be negative, allowing the for loop to count down or up--statements--example: print(i)end

This genericfor loop would iterate over the table_G using the standard iterator functionpairs, until it returnsnil:

forkey,valueinpairs(_G)doprint(key,value)end

Loops can also benested (put inside of another loop).

localgrid={{11,12,13},{21,22,23},{31,32,33}}fory,rowinpairs(grid)doforx,valueinpairs(row)doprint(x,y,value)endend

Functions

[edit]

Lua's treatment of functions asfirst-class values is shown in the following example, where the print function's behavior is modified:

dolocaloldprint=print-- Store current print function as oldprintfunctionprint(s)--[[ Redefine print function. The usual print function can still be used      through oldprint. The new one has only one argument.]]oldprint(s=="foo"and"bar"ors)endend

Any future calls toprint will now be routed through the new function, and because of Lua'slexical scoping, the old print function will only be accessible by the new, modified print.

Lua also supportsclosures, as demonstrated below:

functionaddto(x)-- Return a new function that adds x to the argumentreturnfunction(y)--[[ When we refer to the variable x, which is outside the current      scope and whose lifetime would be shorter than that of this anonymous      function, Lua creates a closure.]]returnx+yendendfourplus=addto(4)print(fourplus(3))-- Prints 7--This can also be achieved by calling the function in the following way:print(addto(4)(3))--[[ This is because we are calling the returned function from 'addto(4)' with the argument '3' directly.  This also helps to reduce data cost and up performance if being called iteratively.]]

A new closure for the variablex is created every timeaddto is called, so that each new anonymous function returned will always access its ownx parameter. The closure is managed by Lua's garbage collector, just like any other object.

Tables

[edit]

Tables are the most important data structures (and, by design, the only built-incomposite data type) in Lua and are the foundation of all user-created types. They are associative arrays with addition of automatic numeric key and special syntax.

A table is a set of key and data pairs, where the data is referenced by key; in other words, it is ahashed heterogeneous associative array.

Tables are created using the{} constructor syntax.

a_table={}-- Creates a new, empty table

Tables are always passed by reference (seeCall by sharing).

A key (index) can be any value exceptnil andNaN, including functions.

a_table={x=10}-- Creates a new table, with one entry mapping "x" to the number 10.print(a_table["x"])-- Prints the value associated with the string key, in this case 10.b_table=a_tableb_table["x"]=20-- The value in the table has been changed to 20.print(b_table["x"])-- Prints 20.print(a_table["x"])-- Also prints 20, because a_table and b_table both refer to the same table.

A table is often used asstructure (orrecord) by usingstrings as keys. Because such use is very common, Lua features a special syntax for accessing such fields.[11]

point={x=10,y=20}-- Create new tableprint(point["x"])-- Prints 10print(point.x)-- Has exactly the same meaning as line above. The easier-to-read dot notation is just syntactic sugar.

By using a table to store related functions, it can act as a namespace.

Point={}Point.new=function(x,y)return{x=x,y=y}--  return {["x"] = x, ["y"] = y}endPoint.set_x=function(point,x)point.x=x--  point["x"] = x;end

Tables are automatically assigned a numerical key, enabling them to be used as anarray data type. The first automatic index is 1 rather than 0 as it is for many other programming languages (though an explicit index of 0 is allowed).

A numeric key1 is distinct from a string key"1".

array={"a","b","c","d"}-- Indices are assigned automatically.print(array[2])-- Prints "b". Automatic indexing in Lua starts at 1.print(#array)-- Prints 4.  # is the length operator for tables and strings.array[0]="z"-- Zero is a legal index.print(#array)-- Still prints 4, as Lua arrays are 1-based.

The length of a tablet is defined to be any integer indexn such thatt[n] is notnil andt[n+1] isnil; moreover, ift[1] isnil,n can be zero. For a regular array, with non-nil values from 1 to a givenn, its length is exactly thatn, the index of its last value. If the array has "holes" (that is, nil values between other non-nil values), then#t can be any of the indices that directly precedes anil value (that is, it may consider any such nil value as the end of the array).[12]

ExampleTable={{1,2,3,4},{5,6,7,8}}print(ExampleTable[1][3])-- Prints "3"print(ExampleTable[2][4])-- Prints "8"

A table can be an array of objects.

functionPoint(x,y)-- "Point" object constructorreturn{x=x,y=y}-- Creates and returns a new object (table)endarray={Point(10,20),Point(30,40),Point(50,60)}-- Creates array of points-- array = { { x = 10, y = 20 }, { x = 30, y = 40 }, { x = 50, y = 60 } };print(array[2].y)-- Prints 40

Using a hash map to emulate an array is normally slower than using an actual array; however, Lua tables are optimized for use as arrays to help avoid this issue.[13]

Metatables

[edit]

Extensible semantics is a key feature of Lua, and the metatable allows powerful customization of tables. The following example demonstrates an "infinite" table. For anyn,fibs[n] will give then-thFibonacci number usingdynamic programming andmemoization.

fibs={1,1}-- Initial values for fibs[1] and fibs[2].setmetatable(fibs,{__index=function(values,n)--[[__index is a function predefined by Lua,                                                   it is called if key "n" does not exist.]]values[n]=values[n-1]+values[n-2]-- Calculate and memoize fibs[n].returnvalues[n]end})

Object-oriented programming

[edit]

Although Lua does not have a built-in concept ofclasses,object-oriented programming can be emulated using functions and tables. An object is formed by putting methods and fields in a table.Inheritance (both single and multiple) can be implemented withmetatables, delegating nonexistent methods and fields to a parent object.

There is no such concept as "class" with these techniques; rather,prototypes are used, similar toSelf orJavaScript. New objects are created either with afactory method (that constructs new objects from scratch) or by cloning an existing object.

Creating a basicvector object:

localVector={}localVectorMeta={__index=Vector}functionVector.new(x,y,z)-- The constructorreturnsetmetatable({x=x,y=y,z=z},VectorMeta)endfunctionVector.magnitude(self)-- Another methodreturnmath.sqrt(self.x^2+self.y^2+self.z^2)endlocalvec=Vector.new(0,1,0)-- Create a vectorprint(vec.magnitude(vec))-- Call a method (output: 1)print(vec.x)-- Access a member variable (output: 0)

Here,setmetatable tells Lua to look for an element in theVector table if it is not present in thevec table.vec.magnitude, which is equivalent tovec["magnitude"], first looks in thevec table for themagnitude element. Thevec table does not have amagnitude element, but its metatable delegates to theVector table for themagnitude element when it's not found in thevec table.

Lua provides somesyntactic sugar to facilitate object orientation. To declaremember functions inside a prototype table, one can usefunctiontable:func(args), which is equivalent tofunctiontable.func(self,args). Calling class methods also makes use of the colon:object:func(args) is equivalent toobject.func(object,args).

That in mind, here is a corresponding class with: syntactic sugar:

localVector={}Vector.__index=VectorfunctionVector:new(x,y,z)-- The constructor-- Since the function definition uses a colon,-- its first argument is "self" which refers-- to "Vector"returnsetmetatable({x=x,y=y,z=z},self)endfunctionVector:magnitude()-- Another method-- Reference the implicit object using selfreturnmath.sqrt(self.x^2+self.y^2+self.z^2)endlocalvec=Vector:new(0,1,0)-- Create a vectorprint(vec:magnitude())-- Call a method (output: 1)print(vec.x)-- Access a member variable (output: 0)

Inheritance

[edit]

It is possible to use metatables to mimic the behavior of class inheritance in Lua.[14] In this example, we allow vectors to have their values multiplied by a constant in a derived class.

localVector={}Vector.__index=VectorfunctionVector:new(x,y,z)-- The constructor-- Here, self refers to whatever class's "new"-- method we call.  In a derived class, self will-- be the derived class; in the Vector class, self-- will be Vectorreturnsetmetatable({x=x,y=y,z=z},self)endfunctionVector:magnitude()-- Another method-- Reference the implicit object using selfreturnmath.sqrt(self.x^2+self.y^2+self.z^2)end-- Example of pseudo class inheritancelocalVectorMult={}VectorMult.__index=VectorMultsetmetatable(VectorMult,Vector)-- Make VectorMult a child of VectorfunctionVectorMult:multiply(value)self.x=self.x*valueself.y=self.y*valueself.z=self.z*valuereturnselfendlocalvec=VectorMult:new(0,1,0)-- Create a vectorprint(vec:magnitude())-- Call a method (output: 1)print(vec.y)-- Access a member variable (output: 1)vec:multiply(2)-- Multiply all components of vector by 2print(vec.y)-- Access member again (output: 2)

It is also possible to implementmultiple inheritance;__index can either be a function or a table.[15]Operator overloading can also be done; Lua metatables can have elements such as__add,__sub and so on.[16]

Implementation

[edit]

Lua programs are notinterpreted directly from the textual Lua file, but arecompiled into bytecode, which is then run on the Luavirtual machine (VM). The compiling process is typically invisible to the user and is performed duringrun-time, especially when ajust-in-time compilation (JIT) compiler is used, but it can be done offline to increase loading performance or reduce the memory footprint of the host environment by leaving out the compiler. Lua bytecode can also be produced and executed from within Lua, using thedump function from the string library and theload/loadstring/loadfile functions. Lua version 5.3.4 is implemented in approximately 24,000 lines of C code.[3][4]

Like most CPUs, and unlike most virtual machines (which arestack-based), the Lua VM isregister-based, and therefore more closely resembles most hardware design. The register architecture both avoids excessive copying of values, and reduces the total number of instructions per function. The virtual machine of Lua 5 is one of the first register-based pure VMs to have a wide use.[17]Parrot andAndroid'sDalvik are two other well-known register-based VMs. PCScheme's VM was also register-based.[18]

This example is the bytecode listing of the factorial function definedabove (as shown by theluac 5.1 compiler):[19]

function <factorial.lua:1,7> (9 instructions, 36 bytes at 0x8063c60)1 param, 6 slots, 0 upvalues, 6 locals, 2 constants, 0 functions1[2]LOADK    1 -1; 12[3]LOADK    2 -2; 23[3]MOVE     3 04[3]LOADK    4 -1; 15[3]FORPREP  2 1; to 76[4]MUL      1 1 57[3]FORLOOP  2 -2; to 68[6]RETURN   1 29[7]RETURN   0 1

C API

[edit]

Lua is intended to be embedded into other applications, and provides aCAPI for this purpose. The API is divided into two parts: the Lua core and the Lua auxiliary library.[20] The Lua API's design eliminates the need for manualreference counting (management) in C code, unlikePython's API. The API, like the language, is minimalist. Advanced functions are provided by the auxiliary library, which consists largely ofpreprocessormacros which assist with complex table operations.

The Lua C API isstack based. Lua provides functions to push and pop most simple C data types (integers, floats, etc.) to and from the stack, and functions to manipulate tables through the stack. The Lua stack is somewhat different from a traditional stack; the stack can be indexed directly, for example. Negative indices indicate offsets from the top of the stack. For example, −1 is the top (most recently pushed value), while positive indices indicate offsets from the bottom (oldest value).Marshalling data between C and Lua functions is also done using the stack. To call a Lua function, arguments are pushed onto the stack, and then thelua_call is used to call the actual function. When writing a C function to be directly called from Lua, the arguments are read from the stack.

Here is an example of calling a Lua function from C:

#include<stdio.h>#include<lua.h> // Lua main library (lua_*)#include<lauxlib.h> // Lua auxiliary library (luaL_*)intmain(void){// create a Lua statelua_State*L=luaL_newstate();// load and execute a stringif(luaL_dostring(L,"function foo (x,y) return x+y end")){lua_close(L);return-1;}// push value of global "foo" (the function defined above)// to the stack, followed by integers 5 and 3lua_getglobal(L,"foo");lua_pushinteger(L,5);lua_pushinteger(L,3);lua_call(L,2,1);// call a function with two arguments and one return valueprintf("Result: %d\n",lua_tointeger(L,-1));// print integer value of item at stack toplua_pop(L,1);// return stack to original statelua_close(L);// close Lua statereturn0;}

Running this example gives:

$cc-oexampleexample.c-llua$./exampleResult: 8

The C API also provides some special tables, located at various "pseudo-indices" in the Lua stack. AtLUA_GLOBALSINDEX prior to Lua 5.2[21] is the globals table,_G from within Lua, which is the mainnamespace. There is also a registry located atLUA_REGISTRYINDEX where C programs can store Lua values for later retrieval.

Modules

[edit]

Besides standard library (core) modules it is possible to write extensions using the Lua API. Extension modules areshared objects which can be used to extend the functions of the interpreter by providing native facilities to Lua scripts. Lua scripts may load extension modules usingrequire,[20] just like modules written in Lua itself, or withpackage.loadlib.[22] When a C library is loaded viarequire('foo') Lua will look for the functionluaopen_foo and call it, which acts as any C function callable from Lua and generally returns a table filled with methods. A growing set of modules termedrocks are available through apackage management system namedLuaRocks,[23] in the spirit ofCPAN,RubyGems andPython eggs. Prewritten Luabindings exist for most popular programming languages, including other scripting languages.[24] For C++, there are a number of template-based approaches and some automatic binding generators.

Applications

[edit]
Main article:List of applications using Lua

Invideo game development, Lua is widely used as ascripting language, mainly due to its perceived ease of embedding, fast execution, and shortlearning curve.[25] Notable games which use Lua includeRoblox,[26]Garry's Mod,World of Warcraft,Payday 2,Phantasy Star Online 2,Dota 2,Crysis,[27] and many others. Some games that do not natively support Lua programming or scripting have this function added by mods, as ComputerCraft does forMinecraft. Similarly, Lua API libraries, like Discordia, are used for platforms that do not natively support Lua.[28] Lua is used in an open-source 2-dimensional game engine called LOVE2D.[29] Also, Lua is used in non-video game software, such asAdobe Lightroom,Moho,iClone,Aerospike, and some system software inFreeBSD andNetBSD, and used as a template scripting language onMediaWiki using the Scribunto extension.[30]

In 2003, a poll conducted by GameDev.net showed that Lua was the most popular scripting language for game programming.[31] On 12 January 2012, Lua was announced as a winner of the Front Line Award 2011 from the magazineGame Developer in the category Programming Tools.[32]

Many non-game applications also use Lua for extensibility, such asLuaTeX, an implementation of theTeX type-setting language;Redis, akey-value database;ScyllaDB, awide-column store,Neovim, a text editor;Nginx, aweb server;Wireshark, a network packet analyzer; Discordia, aDiscord API library; andPure Data, a visual audio programming language (through the pdlua extension).

Derived languages

[edit]

Languages that compile to Lua

[edit]

Dialects

[edit]
  • LuaJIT, a just-in-time compiler of Lua 5.1.[39][40]
  • Luau developed byRoblox Corporation, a derivative of and backwards-compatible with Lua 5.1 withgradual typing, additional features, and a focus on performance.[41] Luau has improved sandboxing to allow for running untrusted code in embedded applications.[42]
  • Ravi, a JIT-enabled Lua 5.3 language with optional static typing. JIT is guided by type information.[43]
  • Shine, a fork ofLuaJIT with many extensions, including a module system and a macro system.[44]
  • Glua, a modified version embedded into the gameGarry's Mod as its scripting language.[45]
  • Teal, astatically typed Lua dialect written in Lua.[46]
  • PICO-8, a "fantasy video game console", uses a subset of Lua known as PICO-8 Lua.
  • Pluto, a superset of Lua 5.4 offering enhanced syntax, libraries, and better developer experience, all while staying compatible with regular Lua.[47]

In addition, the Lua users community provides somepower patches on top of the reference C implementation.[48]

See also

[edit]

Notes

[edit]
  1. ^Syntactic sugar, a table construct or literal string following an identifier is a valid function call.[10]

References

[edit]
  1. ^"[ANN] Lua 5.4.8 now available". 4 June 2025. Retrieved5 June 2025.
  2. ^Ring Team (5 December 2017)."The Ring programming language and other languages".ring-lang.net. Archived fromthe original on 25 December 2018. Retrieved5 December 2017.
  3. ^abIerusalimschy, Roberto; de Figueiredo, Luiz Henrique; Filho, Waldemar Celes (June 1996)."Lua—An Extensible Extension Language".Software: Practice and Experience.26 (6):635–652.doi:10.1002/(SICI)1097-024X(199606)26:6<635::AID-SPE26>3.0.CO;2-P.S2CID 61066194. Retrieved24 October 2015.
  4. ^abc"About Lua". Lua.org. Retrieved11 August 2011.
  5. ^Takhteyev, Yuri (21 April 2013)."From Brazil to Wikipedia".Foreign Affairs. Retrieved25 April 2013.
  6. ^abcdIerusalimschy, R.; Figueiredo, L. H.; Celes, W. (2007)."The evolution of Lua"(PDF).Proceedings of the third ACM SIGPLAN conference on History of programming languages. pp. 2–1–2–26.doi:10.1145/1238844.1238846.ISBN 978-1-59593-766-7.S2CID 475143.
  7. ^"The evolution of an extension language: a history of Lua". 2001. Retrieved18 December 2008.
  8. ^Figueiredo, L. H.; Ierusalimschy, R.; Celes, W. (December 1996)."Lua: an Extensible Embedded Language. A few metamechanisms replace a host of features".Dr. Dobb's Journal. Vol. 21, no. 12. pp. 26–33.
  9. ^"Programming in Lua : 1".
  10. ^"Lua 5.0 Reference Manual, 2.5.7, Function Calls".
  11. ^"Lua 5.1 Reference Manual". 2014. Retrieved27 February 2014.
  12. ^"Lua 5.1 Reference Manual". 2012. Retrieved16 October 2012.
  13. ^"Lua 5.1 Source Code". 2006. Retrieved24 March 2011.
  14. ^Roberto Ierusalimschy.Programming in Lua, 4th Edition. p. 165.
  15. ^"Programming in Lua : 16.3".Lua. Retrieved16 September 2021.
  16. ^"Metamethods Tutorial".lua-users wiki. Archived fromthe original on 16 September 2021. Retrieved16 September 2021.
  17. ^Ierusalimschy, R.; Figueiredo, L. H.; Celes, W. (2005)."The implementation of Lua 5.0".J. Of Universal Comp. Sci.11 (7):1159–1176.doi:10.3217/jucs-011-07-1159.
  18. ^Texas Instruments (1990).PC Scheme: Users Guide and Language Reference Manual, Trade Edition. MIP Press.ISBN 0-262-70040-9.
  19. ^Man, Kein-Hong (2006)."A No-Frills Introduction to Lua 5.1 VM Instructions"(PDF).
  20. ^ab"Lua 5.2 Reference Manual". Lua.org. Retrieved23 October 2012.
  21. ^Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar (2011–2013).Changes in the API. Lua.org. Retrieved9 May 2014.{{cite book}}:|work= ignored (help)
  22. ^Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Celes, Waldemar."Lua 5.4 Reference Manual".Lua. Retrieved1 June 2022.
  23. ^"LuaRocks". luarocks.org. Retrieved24 May 2009.
  24. ^"Binding Code To Lua". Lua-users wiki. Archived fromthe original on 27 July 2009. Retrieved24 May 2009.
  25. ^"Why is Lua considered a game language?".Stack Overflow. Archived fromthe original on 20 August 2013. Retrieved22 April 2017.
  26. ^"Why Luau?".Luau. Retrieved23 March 2022.
  27. ^"Introduction to Crysis server-side modding". Retrieved23 March 2022.
  28. ^"Discordia API". Retrieved2 July 2025.
  29. ^"LOVE2D Game Engine". Archived fromthe original on 5 March 2025. Retrieved2 July 2025.
  30. ^"Lua Functions".wow.gamepedia.com. Retrieved1 March 2021.
  31. ^"Poll Results". Archived from the original on 7 December 2003. Retrieved22 April 2017.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  32. ^"Front Line Award Winners Announced". Archived fromthe original on 15 June 2013. Retrieved22 April 2017.
  33. ^"Language Guide - MoonScript 0.5.0".moonscript.org. Retrieved25 September 2020.
  34. ^leaf (23 September 2020)."leafo/moonscript".GitHub. Retrieved25 September 2020.
  35. ^abGarzia, Andre Alves."Languages that compile to Lua".AndreGarzia.com. Retrieved25 September 2020.
  36. ^"Urn: A Lisp implementation for Lua | Urn".urn-lang.com. Retrieved12 January 2021.
  37. ^"Amulet ML".amulet.works. Retrieved12 January 2021.
  38. ^"LunarML, Standard ML compiler that produces Lua/JavaScript".GitHub.
  39. ^"LuaJIT".LuaJIT.
  40. ^"Extensions".LuaJIT.
  41. ^"Why Luau?".Luau. Retrieved3 August 2024.All of these motivated us to start reshaping Lua 5.1 that we started from into a new, derivative language that we call Luau. Our focus is on making the language more performant and feature-rich, and make it easier to write robust code through a combination of linting and type checking using a gradual type system.
  42. ^"Sandboxing".Luau. Retrieved27 March 2025.
  43. ^"Ravi Programming Language".GitHub.
  44. ^Hundt, Richard (22 April 2021)."richardhundt/shine".GitHub.
  45. ^"Garry's Mod Wiki".wiki.facepunch.com.
  46. ^"teal-language/tl".Teal language. 23 December 2024. Retrieved23 December 2024.
  47. ^"What is Pluto?".Pluto. Retrieved27 June 2025.
  48. ^"Lua Power Patches".lua-users.org. Archived fromthe original on 18 May 2021. Retrieved18 May 2021.

Further reading

[edit]

External links

[edit]
Wikibooks has a book on the topic of:Lua Programming
Lua at Wikipedia'ssister projects
Ports,distributions
Package manager
IDEs
Applications,frameworks
General
Software
packages
Community
Organisations
Licenses
Types and
standards
Challenges
Related
topics
International
National
Other
Portals:
Retrieved from "https://en.wikipedia.org/w/index.php?title=Lua&oldid=1323039620"
Categories:
Hidden categories:

[8]ページ先頭

©2009-2025 Movatter.jp