Designed to support dynamic programming and data storage, IvoryScript provides:
| First-class names and types | Efficient handling of dynamically typed values and binding names |
| On-demand data | Separate data types for lazy expression values |
| No implicit evaluation | Full explicit control over when expressions are reduced |
| Pattern matching | Unrestricted data representation using constructor and deconstructor functions |
| Pragmatic update | Controlled mutability through reference values |
| Multiple environments | Native ability to interact with multiple environments |
| Persistence | Binary serialisation for all general data types |
Computer science has two and precisely two problems: the naming of values, and the time at which a value is bound to a name.
Why IvoryScript? A programming tool for both and an expansion of the second: the time at which a value is reduced to a simpler form.