1 Tea Language
2 ============
3
4 This 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
14 tl;dr Tea is a cleanup of Oil's metalanguages, which can be called "statically
15 typed Python with sum types". (Zephyr ASDL is pretty clean, but mycpp is
16 messy, 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
39 Note that Tea stands alone as a language, but it can also be intermingled with
40 Oil, which I think will be useful for metaprogramming.
41
42 ## Testing
43
44 This is currently run in the continuous build
45 (<http://travis-ci.oilshell.org/jobs/>).
46
47 tea/run.sh soil-run
48
49