Consider one single vat. There are objects in this vat. With the exception of some types, listed below, all objects are made of pure S code. The difference between a builtin type and an object made from S code is not visible from within the object space; for all objects, only message passing can be used to communicate and no object introspection is possible.
Note that "type" simply means "a template for an object." There is no visible difference between a function which returns an object and a type, nor is there any typechecking per se.
Here are some builtin types. This list is not yet exhaustive, but it won't get much longer. Types without literal syntax have a + next to them, and have quasiliteral syntax instead.
- int
- float
- str: Unicode strings.
- bytes+: Bytestrings. bytes is important because it is the type of objects which are used as identifiers and message names.
- list: An immutable ordered sequence. Performance is not specified.
- set: An immutable unordered unique collection.
- dict: An immutable hash table.
- hash+: Cryptographic (and non-cryptographic) hash functions.
- crypt+: Encryption primitives.
- regex+: Regular expressions.
- filepath+: Paths on the virtual filesystem. (More VFS discussion later.)
- I'd like to have a numeric tower. The benefits are just too great, and the downsides are negligible. I think that 99% of complaints are solved by having both / and // for division.
- Ugh, strings suck so hard. Unicode is essential these days, but Unicode source sucks from a readability and security standpoint. Message passing by attribute needs to desugar cleanly and predictably, so message names should be bytes, riiight?
- Regexes are popular literal objects in several popular languages (Perl, Lua, ES). I'm not a fan. Opinions?
- Resolved: Regexes will be available with QL syntax.
- XML literals in ES are actually really cool, but at the same time, people swear that ES supports JSON literals. Wonder if we should even bother with either?
- Resolved: XML and JSON will be standard library objects.
- Should all builtin objects have literal syntax?
- Resolved: No.