LuteFisk
LUTE - Light-weight UI Toolkit Engine Lutefisk - A dish served in Norway
Terminology
Value
- a single stored basic type value, such as an int, float, unsigned, bool, char, string etc
- not a complex type where you would need a struct or similar to hold multiple values
- string is a value for this definition, but obviously it could be argued it is a variable array of chars
Object
- a complex type which is composed of multiple values and or objects
- Objects have reflection and introspection
Mix-in
- A mix-in is adding in functionality to something outside of it
- In C++ a way to achieve this is using CRTP (Curiously Recurring Template Pattern)
- It is said to be static polymorphism - no virtual function call overhead, resolved at compile time
Inheritance
Polymorphism
Attribute
- similar to a property - not sure how to define how it is different
- perhaps attributes are named properties and how to access the property
- HTML DOM contains attributes, but JavaScript calls those attributes properties, so it is confused
- in C# it is meta info about something
- attributes are attributed to something - so an attribute is assigned to an object
- whereas a property exists without being attributed - in this way a property is intrinsic to something
- may want to consider swapping in the code Attributes and Properties
- could then make AbstractProperty references that are assigned to call those attributes
Property
- a property has a getter and setter
- a property has a signal that can notify when it has changed
- a property is available via reflection and introspection
- TODO: read-only properties. A base property class with no signal. Try to reduce the size overhead of a property
Signal
- a signal is like an event that can be raised and listened to to respond to when raised#
- multiple listeners can connect to a signal
Slot
- a slot is an end-point to connect a signal to and is called when a signal is raised
Variant
- a polymorphic value - it can morph in between value types
- example is a boolean, as a string it converts to "true" or "false", as an int it converts to 1 or 0 etc
Reflection
- reflection allows looking from the outside in
- without tight bindings, using reflection it is possible to lookup and find object types, create objects
- find properties and get or set them etc
Introspection
- introspection allows looking from inside inwardly
- it allows an object to find out about itself
- a object can look up what type it is and what it inherits from which together with reflection allows finding
- its properties.