adding some readme info

master
Jordan Orelli 10 years ago
parent 9d1b2b2df5
commit 5ef3aad074

@ -1 +1,102 @@
This is a toy configuration language. If you want to know why, see the [WHY](WHY.md) doc.
# stability
This isn't even remotely stable. Don't use this in an actual project, I
promise you I will break this.
# What it is
Moon is a configuration language intended to replace JSON as a configuration
format in Go projects. The syntax is fairly similar, with a few changes:
- instead of having some hand-wavy "number" thing without ever specifying the
valid ranges or anything like that, there are two number types: int and
float64. Int means int32 on 32bit systems and int64 on 64bit systems. Maybe
I'll go back on that because it sounds really dumb when I type it out.
- support for complex numbers. The only reason I included this is that it's
included in the text/template package in the standard library and I stole the
number-parsing code from that library.
- comments. There are no comments in JSON and that's incredibly annoying.
Moon has them.
- variables. In moon, you can make a reference to a value that was already
defined.
- hidden variables. This sounds really dumb but it quickly became apparent
that if you're using variables to compose something, those variables end up
polluting the namespace of the moon document. Variables whose name starts
with a period are hidden; they are only valid in the context of the moon
document in which they appear, and they are not accessible to the host
program.
- a command-line tool. I'm sure these exist for json but there's no official
"this is the tool, that one isn't" decree.
- something kinda like xpath that lets you select elements in a document.
# How it works
json and similar formats parse text and render some kind of parse tree. We do
the same thing in moon, but then we walk the tree and evaluate it, which is why
variables are a thing.
# Types
Moon defines the following types:
- integers: right now this is an int based on Go semantics; it's a 32 bit int
on 32 bit CPUs, and a 64 bit int on 64 bit CPUs. These are some integers:
```
1
2
-1
-12348
0
+0
```
- floats: they're all float64. These are some floats:
```
1.0
1.2
-9.3
3.14
1e9
```
- complex numbers: they're complex128 values in Go. These are some complex numbers:
```
1+2i
-9+4i
```
- strings: they're strings. They're not explicitly required to be composed of
UTF-8 runes but I haven't really been testing binary data, so for the moment,
all bets are off here. They're quoted, but maybe I'll go back on that.
These are strings:
```
"this one"
'that one'
```
You can use single or double quotes. Escape quotes with a backslash.
- objects: or maybe you call them hashes, objects, or associative arrays. Moon
calls them objects, but you'd never know it because it's actually the
`map[string]interface{}` type in Go, which is effectively the same thing.
Unlike json objects, and unlike strings, the keys in objects are not quoted.
Also there are no commas between the values but I'm not sure I like this yet,
so it might change. These are some objects:
```
{name: "jordan" age: 28}
{
one: 1
two: "two is also a number"
pi: 3.14
}
```
- lists: they're `[]interface{}` values. They're not typed, and they can be
heterogenous. Values are separated by spaces. I might put commas back in,
that's kinda up in the air right now. These are some lists:
```
[1 2 3]
[
"one"
2
3.14
]
```

Loading…
Cancel
Save