How Deforestation Made Us Smile

Highlights:
- Specifying both naive and deforested semantics as part of defining each deforestable form (
map, filter, etc.)
- Deforesting
drop aka list-tail
- A glimpse of extending deforestation to other sequences besides lists
- Can we derive naive and deforested runtimes from a common abstract specification of a stream operation?
- Writing out the semantics of a language using pen and paper as a first step to formalization
- Cameo appearance by an experimental language integrating Racket and Qi
Oh, and if you've been following along with our explorations of DAG binding structures, Dominik's sequel blog post about a futures-backed let binding form foreshadows a similar use of them planned for Qi!
1 Like
Looks like I forgot to share the previous week's notes, so it's a twofer this week:
Aug 13: Streamlining Producers
Highlights:
- In what way is Qi essentially different from Racket? (and implications for
qi/list vs racket/list)
- On the road to separately injecting naive and optimized (deforested) runtimes for sequence operations, we're now tackling producers (e.g.,
range)
- A first draft of a "pen and paper" semantic model for Qi (towards formalization in Redex)
- Comprehensive vs convenient unit testing
- Web development in Racket is much better than in Python!
- Can we haz a nice
init system
for Emacs? 
- A big, new release of Symex for Emacs is coming soon.

Aug 20: Doing More With Less
Highlights:
- Debugging a tricky expansion issue within the onion-layered multi-language setting of a hosted DSL

- "Stream algebra" --- should we make streams an integral part of the Qi core language? (towards Qi Enterprise Editionā¢
)
- How to use Racket contracts on syntax extracted from Qi macros?
Enjoy!
Last week's notes:
Bringing a Knife to a Power Tool Fight
So much good stuff in there!
Highlights:
- Sam released Uke, a library providing an immutable dataframe type, and Machete, for data sciency wrangling of said immutable dataframe type --- I, for one, am very stoked about this.
- Exploring interesting and unusual applications of Resyntax's automated refactoring.
- We're making good progress streamlining the API for defining stream producers such as
range
- A preview of reduction and congruence relations towards formalizing Qi semantics
- "Once you can partition the data, you can do magic." - on getting the most out of Racket's new parallel threads.
- Some very fancy Emacs developer tools in the works.

3 Likes
Last week's notes:
Two Bugs for the Price of One
Highlights:
- a bug (well, two bugs) when using bindings with
qi/list
- designing deforestation around lists vs improper lists

- you're never too old to climb a tree
- use any editor you like! (as long as it's Emacs)
Catching up on these. Last week's notes:
Chai for Zero or More
- Sam presented Chai, an arity solver and optimizing compiler for Qi
- running afoul of Greenspun's Tenth Rule
- compiling flows to graph nodes called
connects
- should we use syntax properties or IR modifications to encode arity?
- design consideration: analysis vs transformation?
- how to handle sequential information loss across compiler passes?
- a renaissance in Emacs package management??
Previous weeks:
Dope Docstrings, where we considered a design for what could be the best docstrings in any language (powered by Scribble, of course!)
Minimizing the Second Derivative, when we took charge of our ballooning to-do list.