What makes Slate cool?
From SlateWiki
| Table of contents |
[edit]
The Opportunity
Slate gives you the chance to influence the design of a new, clean system. The entire intent of the Slate effort is to provide a "mixing pot" for ideas and features that have shown up in many communities, and usually separately or not taken to their ideal final state due to lack of focus or getting bogged down in supporting legacy requirements.
[edit]
Objects and Messages
- Everything is an object in Slate including numbers, strings, characters, code blocks, and even methods.
- Message sending is the fundamental metaphor for requesting that some objects carry out an operation.
- No special constructs are needed such as control flow statements like other languages because everything is a message send.
[edit]
The Environment
- The environment structure is like a file system, having objects that link to each other act like files and directories, except that all the elements are live and have behavior.
- The system is interactive: expressions can be entered while the system is running and compiled instantly to investigate the system or change its behavior without rebuilding.
- The system is "alive". Saving and restarting the environments (called "images") gives you the exact moment that was last running. You can even save in the middle of a debugger and pass the image to a mentor who can open it and see exactly the same situation!
[edit]
Extensibility
- Slate environments run on a very tiny virtual machine we call a "nano-VM", which offers very minimal services and has a tiny (< 64kB) footprint.
- Slate's VM and build process are entirely written in itself or a low-level dialect which generates ANSI-portable C code. The project structure also makes it easy to add extra native support for new platforms.
- Interfaces to external libraries are straightforward to develop (although we are still working on even easier interfacing systems).
[edit]
Debugging
- The debugger is interactive and allows inspection of all stack frames.
- Evaluation and referral to named and non-named arguments and variables is easy within the debugger.
- The exception/error-handling system allows inspection of all stack frames, and does not unwind before handling can occur.
