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 |
|