[fine] Some design notes
Just like... write some stuff down.
This commit is contained in:
parent
741a729f8d
commit
fde5579479
1 changed files with 41 additions and 0 deletions
41
fine/design.md
Normal file
41
fine/design.md
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
# Design Notes for the Fine Language
|
||||||
|
|
||||||
|
This language is being designed as I go, because the main thing I'm
|
||||||
|
interested in is building something that's fun and productive for me
|
||||||
|
personally. That means, rather than being super careful, I'm just
|
||||||
|
building the thing that pleases me at any given moment.
|
||||||
|
|
||||||
|
Here are some notes. The notes are for me in the future, in case I'm
|
||||||
|
wondering why the language is one way instead of another way.
|
||||||
|
|
||||||
|
## The `new` keyword
|
||||||
|
|
||||||
|
I really like rust's "just use a type name with curly braces to
|
||||||
|
construct new values". It's really clean! Unfortunately it leads to an
|
||||||
|
ambiguity in the syntax that I don't like:
|
||||||
|
|
||||||
|
``` rust
|
||||||
|
if something { ...
|
||||||
|
```
|
||||||
|
|
||||||
|
In the code above, after I have parsed `something` and I see `{`, am I:
|
||||||
|
|
||||||
|
- Parsing an object construction expression for the type `something`?
|
||||||
|
- Parsing `something` as a boolean value reference and `{` as the
|
||||||
|
start of the block?
|
||||||
|
|
||||||
|
Naively you would expect the latter, but if I scan ahead a little more:
|
||||||
|
|
||||||
|
``` rust
|
||||||
|
if something { foo: true }.foo { }
|
||||||
|
```
|
||||||
|
|
||||||
|
Rust does not allow `struct` literals in the condition of the `if`,
|
||||||
|
which is correct, but that's more work than I want to do here. There's
|
||||||
|
just a lot of context flowing around about whether or not I can parse
|
||||||
|
a structure literal in any particular situation.
|
||||||
|
|
||||||
|
The `new` keyword is a compromise: we know that the context
|
||||||
|
immediately following the `new` keyword is always a type expression,
|
||||||
|
so we know that e.g. `<` or whatever means "generic type parameter"
|
||||||
|
and not "less than".
|
||||||
Loading…
Add table
Add a link
Reference in a new issue