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.
Here are the most recent notes from last week, lots of interesting stuff!
Vacuum Fluctuations
Highlights:
- Two approaches to formalizing bindings in Qi (using Redex)
- "Generalized flow values" as the (one) ultiimate meaning of a flow
- How to do nothing and get everything
There are many interesting questions to be answered even aside from bindings, including: (1) how to formalize effects in Qi? Flows can be seen, ultimately, to produce values and perform effects. But the relationship of effects to values is subtle and not obvious, and does not directly follow from the semantics of values although it is dependent upon them. (2) What about modeling first class continuations in Qi? How would that affect the semantics?
More from the last few weeks to catch up on:
Combined notes from Nov 14 and Nov 21:
The Many Worlds Interpretation
We're continuing to work on formal semantics of Qi, and this discussion brought up a lot of deep issues, especially about the meaning of ambiguity in Qi.
Highlights:
- The problems of expressing DAG (as opposed to tree) binding structure remain unresolved
- There are two kinds of ambiguity --- of value and of binding
- There are three interpretations of ambiguity --- the "many worlds" interpretation, the "Copenhagen" interpretation, and the "classical" interpretation!

- A proposed (and rejected) scoping structure not expressible using set-of-scopes
- Avoiding accidental dynamic scope in semantics when we mean to describe lexical scope
- Cartesian Closed Categories could be a good semantic model for Qi?
- Comonads, real life flow oriented programming, atmospheric rivers, and Rhombus is the new Python!
cc @NoahStoryM 
2 Likes

And if one try to make a Quantum computer with those "ambiguities" you will have to wait it for a very,very,very long time....
1 Like
i had put an example of Qi operator in infix in my doc near this anchor.
update: html anchor does not seem to work, this link should make it:
2 Likes
Running Qi on an actual quantum backend is really not such a bad idea 
And that's a good point, Scheme+ provides yet another infix alternative (in addition to Rhombus) for potential python refugees!
2 Likes