summaryrefslogtreecommitdiffstats
path: root/2021/talks/dsl.md
blob: a2a952ddd797d2d60c3f2f6389786399f4e22c8d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[[!meta title="Self-Describing Smart DSL's: The Next Magits"]]
[[!meta copyright="Copyright © 2021 Psionic"]]
[[!inline pages="internal(2021/info/dsl-nav)" raw="yes"]]

<!-- You can manually edit this file to update the abstract, add links, etc. --->


# Self-Describing Smart DSL's: The Next Magits
Psionic

[[!inline pages="internal(2021/info/dsl-schedule)" raw="yes"]]

When we begin programming, the promise is to automate away repetitive
tasks in life.  As those program's capability grows, we begin to need
configuration UI's.  We can start with a CLI, but as any CLI grows, we
run into the following issues:

-   As options pile up, the intuition of simplicity is lost in helps and
manpages

-   Stateless operation has no idea what to do next and loses terseness
- Frequent dispatch of commands to interrogate state required for the
operator to decide what action to perform

-   Composition compounds with all of these issues

Magit has the UI trifecta of being terse, intuitive, and intelligent.
Magit's UI input library, Transient, is a standalone package for
developing more killer UI's, and not just for CLI applications, but
also for server applications, Emacs applications, and Emacs itself.

While Transient's potential is to create the most highly productive
UI's short of thought control, going beyond simple command dispatchers
requires a deeper dive.  When we think like constructing a DSL for the
task and using transient to input that DSL, we get an intelligent,
self-describing modal programming system.


# Outline

-  Updates to Transient documentation and demos of API examples
-  Wrapping a custom CLI tool in Transient

<!---   40 minutes: Wrapping a server in Transient to make a new Emacs application -->


[[!inline pages="internal(2021/captions/dsl)" raw="yes"]]

[[!inline pages="internal(2021/info/dsl-nav)" raw="yes"]]