
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.


