Records
Dark v1 problems
- updating records
- confusion between records and dicts
You access records fields by:
myRecord.x
If the field doesn't exist: DError. But there will be a type checker to ensure the field exists
Description
Dark v1 Problems
Problem: Records and dicts are the same thing.
In v1 of Dark, there are only DObjs, and both records and dictionaries use the same value type. This leads to significant confusion:
- It's unclear whether the
{}syntax creates a record or a dict Dict::functions work on Records- Record access syntax (
x.y) works on Dictionaries
Solution:
A solution needs to hit the following notes:
- how do we create records and dictionaries
- what do we do with the current records and dictionaries
One possible solution that was considered was to have a type constructor, like in rust. This had the problem of what happens if you pass a record into something with another type but the same shape, when you have polymorphic traits on it (actually this problem might exist anyway).
Actual solution:
- existing things become records (
DObj becomes DRecord)- existing
Dict::values work on records, and are deprecated and replaced with syntax
- existing
- new dictionary type (
DDict)
Status: Spec'ed or not spec'ed
v2 Spec
v2 Language definition
v2 Standard library