|
|
|
|
|
by AriaMinaei
2862 days ago
|
|
Optic [0] caught my eye. They seem to have made possible a new kind of abstraction in code. Something that's different from both functions and macros. It's a kind of abstraction that can be arbitrarily customized at each call site, yet retain its identity across all of them. Example: foo = do_a()
bar = do_b(foo)
Example 2: foo = do_a()
bar = do_z(foo)
baz = do_b(bar)
Example 3: foo = do_a()
bar = foo + 10
baz = do_b(bar)
The three examples have strong similarity in their first and last statements. There is a pattern there, but that pattern cannot be abstracted into a single macro or a function. So this pattern does exist, and is recognizable to the human eye, but the language does not allow one to express it.What Optic seems to do is to recognize the pattern, create a single model out of it, and allow you to re-use that pattern elsewhere, or even transform it into new ones and re-use those new patterns elsewhere. Again, this would be a new kind of abstraction. One whose leaks are easier to fix. You can have your cake and eat it too! [0] https://useoptic.com |
|
You're definitely understanding the premise of our parser. It evaluates a regex-like set of rules on an AST tree to match different forms of code. These rules can be recursive as you can see in the first example of our home page [0]. In that example Optic matches an express js route and the headers, parameters and responses inside it. The result is a nice json object with shape {method, url, parameters: [], headers: [], responses" []}. OOTB the JS interpreter couldn't do this because it doesn't encounter the calls to req.query.param_name until that code runs.
PG wrote about building the language/abstraction to fit your problem [1]. In an ideal world we all would do this, but in practice there's always a gap between our program and the abstraction we describe it in. Today that gap is only bridged by a human understanding the code. Until now...Optic is allowing us to programmatically deal with these implicit abstractions.
We believe most of the dev tools created over the next decade will be built on top of your code in a way that allows them to collaborate with real developers. To realize this world we need a programatic interface to read, generate and mutate code so we created Optic.
[0] https://useoptic.com [1] http://www.paulgraham.com/progbot.html