You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ElysianLua is a Lua binding API for interoping between the C++ and the Lua langauges. It is the core Lua framework powering the Elysian Shadows game engine and stack. The API is written in C++20, making heavy usage of variadic and metatemplates as well as leveraging the new concepts and constraints additions to the language. Furthermore, it is specifically targeting the latest Lua version 5.4.
2
+
ElysianLua is a Lua binding API for interoping between the C++ and the Lua languages. It is the core Lua framework powering the Elysian Shadows scripting engine within its tech stack. The API is written in C++20, making heavy usage of variadic and metatemplates as well as leveraging the new concepts and constraints additions to the language. Furthermore, it is specifically targeting the latest Lua version 5.4.
3
3
4
-
As this library is being used in a game engine running on the Sega Dreamcast, it attepts to be extremely performance-minded by going to great lengths to exploit fast paths for table lookups, avoiding using registry storage except for persistent data, primarily operating on the stack, favoring compile-time polymorphism, and providing mechanisms for resource managment and validation.
4
+
## Goals ##
5
+
As this library is being used in a game engine running on the Sega Dreamcast, it attepts to be extremely performance-minded by going to great lengths to exploit fast paths for table lookups, avoiding using registry storage except for persistent data, primarily operating on the stack, favoring compile-time polymorphism, and providing mechanisms for resource management and validation, despite still providing a higher-level C++-based API.
5
6
6
7
## Status ##
7
-
ElysianLua is still under development and is not quite feature-complete. I have lately been working on other areas of the ES tech stack, but I will absolutely be returning to finish the remaining feature support as this is the core of our scripting engine.
8
+
ElysianLua is still under development and is not quite feature-complete. I have lately been working on other areas of the ES tech stack, but I will absolutely be returning to finish the remaining feature support as this is the core of our scripting engine. In the meantime, it's more than usable and still has quite a lot to offer; however, it will not suffice as your only binding API in its current state.
8
9
9
10
## Features ##
10
11
* C++ wrapper API around the Lua stack C API
11
-
*varicially templated pushes/pulls
12
+
*variadically templated pushes/pulls
12
13
* push/pull pairs, tuples, and aggregate types
13
14
* optimized table accesses for integral keys
14
15
* optimized table accesses for global fields
15
16
* Extendible stack interop layer
16
17
* handles all builtin types
17
18
* extended via custom type traits
18
-
*handles push, pop, and checking stack values
19
+
*extension points for push, pop, and check stack type operations
19
20
* Collection of various statically typed different references + generic concept types
20
21
* implicit global lua_State vs explicit member lua_State storage
21
22
* registry references vs stack references
22
-
* fixed vs relative stack indices
23
+
* fixed vs relative stack indexed references
23
24
* references to table fields
24
25
* move semantics for reusing references
25
26
* Generic callable objects
26
27
* functions or tables/userdata with "call" metamethod
27
28
* supports custom error message handlers
28
29
* regular and protected call variants
29
-
* Generic table-style accesses for compatible static types
30
+
* Generic table-style operations for compatible static types
30
31
* getting/setting fields via metamethods + raw versions
31
32
* iterators, getLength(), getMetatable()
32
33
* generic concatenation via overloaded operators
@@ -35,22 +36,22 @@ ElysianLua is still under development and is not quite feature-complete. I have
35
36
* templated accessors and conversion operators
36
37
* beautiful std::initializer of pairs declarative initializaiton of arbitrary tables
37
38
* reference semantics for Lua functions, strings, and tables
38
-
* value semantics for C++ and Lua primtive value types
39
+
* value semantics for C++ and Lua primitive value types
39
40
* move semantics, weak references
40
41
* Dynamic byte array/string-style API built around luaL_Buffers
41
42
* Lua allocation tracking and statistics
42
43
* Resource Monitors and Scope Guards
43
44
* ensures # of items remains balanced within a given scope
44
-
* supports stack indices and reference counts
45
-
* manual and RAII style interfaces
45
+
* supports monitoring stack depth and reference counts
46
+
* manual and RAII style interfaces for managing their scope
46
47
* captures surrounding C++ source code context of surrounding scope
47
48
* raises appropriate Lua warnings/errors upon unexpected remaining item counts
48
49
49
50
## Notes ##
50
-
This library makes use of the ponter returned by lua_extraspace(), so if this is already in-use, there will be a conflict.
51
+
This library makes use of the pointer returned by lua_extraspace() to store its own internal state information, so if this is already in-use, there will be a conflict.
51
52
52
53
## Deficiences ##
53
54
ElysianLua's core functionality was pulled from our monolithic engine which had a hard requirement on the OOLua binding API. As we were already using (a heavily modified version of) it for our userdata binding, I did not see fit to implement userdata binding until the end. If you wish to use ElysianLua in a project, you will still need a binding API for binding your core classes to the Lua runtime. The best option available for this is currently the Sol3 project.
54
55
55
56
## Testing ##
56
-
Note that the testing folder utilizes a custom external testing framework with a dependency on Qt's QTest. This dependency has been removed from our tech stack, which now has it's own cross-platform test framework written from the ground-up. These tests need to be ported to the new model.
57
+
Note that the testing folder utilizes a custom external testing framework with a dependency on Qt's QTest. This dependency has been removed from our tech stack, which now has its own cross-platform test framework written from the ground-up. These tests need to be ported to the new model, but yes, they were passing before we broke them.
0 commit comments