OILS / yaks / old / tea.md View on Github | oilshell.org

49 lines, 33 significant
1Tea Language
2============
3
4This is an experiment! Background:
5
6- <http://www.oilshell.org/blog/2020/10/big-changes.html#appendix-the-tea-language>
7- <https://old.reddit.com/r/ProgrammingLanguages/comments/jb5i5m/help_i_keep_stealing_features_from_elixir_because/g8urxou/>
8- <https://lobste.rs/s/4hx42h/assorted_thoughts_on_zig_rust#c_mqpg6e>
9- <https://news.ycombinator.com/item?id=24845983>: mycpp origins, related to
10 mycpp and ShedSkin
11- There's no good language for writing languages:
12 <https://lobste.rs/s/vmkv3r/first_thoughts_on_rust_vs_ocaml#c_v5ch1q>
13
14tl;dr Tea is a cleanup of Oil's metalanguages, which can be called "statically
15typed Python with sum types". (Zephyr ASDL is pretty clean, but mycpp is
16messy, and needs cleanup.)
17
18- Tea Grammar: <https://github.com/oilshell/oil/blob/master/oil_lang/grammar.pgen2#L363>
19- Tea ASDL Schema: <https://github.com/oilshell/oil/blob/master/frontend/syntax.asdl#L324>
20- Python-like "transformer" from CST to AST:
21 <https://github.com/oilshell/oil/blob/master/oil_lang/expr_to_ast.py>. This
22 code is repetitive, but it's how CPython did it for 25+ years.
23
24## Metaphors
25
26- "Oil + Tea" is like "Shell + C". :)
27- Oil could be the metaprogramming language for Tea. "So Oil + Tea" is like
28 the "C preprocessor + C".
29
30## Demo
31
32 $ bin/tea -n -c 'var x = 42'
33
34 $ bin/oil -O parse_tea -n -c 'var x = 42'
35
36 # Similar to both of the above
37 $ tea/run.sh parse-one tea/testdata/hello.tea
38
39Note that Tea stands alone as a language, but it can also be intermingled with
40Oil, which I think will be useful for metaprogramming.
41
42## Testing
43
44This is currently run in the continuous build
45(<http://travis-ci.oilshell.org/jobs/>).
46
47 tea/run.sh soil-run
48
49