# Today's Qi meeting notes

**URL:** <https://racket.discourse.group/t/todays-qi-meeting-notes/2323>\
**Category:** General\
**Tags:** event, qi\
**Created:** [September 17, 2023, 5:25pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323 "2023-09-17T17:25:43Z")\
**Posts on this page:** 20\
**Page:** 4

<div class="post-metadata">

**Author:** ![benknoble](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/benknoble/32/16_2.png) [@benknoble](https://racket.discourse.group/u/benknoble)\
**Post date:** [December 17, 2024, 1:29pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/61 "2024-12-17T13:29:24Z")

</div>

(PS to avoid losing context, there are ways—perhaps only accessible to moderators?—to split posts into new topics.)

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [December 17, 2024, 3:09pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/62 "2024-12-17T15:09:34Z")

</div>

> [@benknoble](#):
>
> PS to avoid losing context, there are ways—perhaps only accessible to moderators?—to split posts into new topics.)

Yes. You can either let me know where you want to split or I can look at assigning the permission

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [February 11, 2025, 7:13pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/63 "2025-02-11T19:13:01Z")

</div>

FYI we will be taking a break this week after the recent release, so there will be **no meeting** this Friday Feb 14. If you missed the notes from the release party, there's a lot there to catch up on:

[**An Unexpected Party**](https://github.com/drym-org/qi/wiki/Qi-Meeting-Jan-17-2025)

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [February 23, 2025, 5:24am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/64 "2025-02-23T05:24:02Z")

</div>

Yesterday's notes:

[**Lexing and Parsing**](https://github.com/drym-org/qi/wiki/Qi-Meeting-Feb-21-2025)

**Important** : As the notes mention, now that we're back from break after the recent release, this week we did the "lexing" step on identifying next steps for the project --- that is, just looking at the accumulated list of todos and cleaning them up. **Next week** , we'd like to do the parsing step, as it were, of identifying directions for the project that community members are interested in and would like to participate in. If you have any medium or long term goals you'd like to see Qi move toward, or ideas or hopes for the project, please join the discussion next week. If you can't make it, feel free to DM me or another Qi regular, either here or on Discord, and we can bring up your thoughts to the group.

Qi is community infrastructure, built by community members for the community. It is whatever we want it to be, and whatever we make it. There are [many awesome directions](https://github.com/drym-org/qi/wiki/Qi-Meeting-Jan-17-2025#whats-next-for-qi) for the project that have already been identified, and surely more that you might think of. Where we choose to go and whether we get there really is up to you!

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [March 4, 2025, 5:27am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/65 "2025-03-04T05:27:09Z")

</div>

Last week's notes:

[_ **Compile Time** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-Feb-28-2025)

This was our "goal setting" meeting following the recent Qi 5 release, to identify the next things we want to work on as a community (and for the community). Some interesting discussions, esp. re: "transducers."

**Highlights:**

- Comparing (Clojure) transducers vs stream fusion
- could we implement transducers in continuations in the Racket interpreter?
- LOP at the VM level??

Feedback welcome!

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [March 8, 2025, 8:16am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/66 "2025-03-08T08:16:41Z")

</div>

Today's notes:

[_ **The Best of Three Worlds** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-Mar-7-2025)

Highlights:

- list comprehensions vs higher-order functions: the definitive analysis?
- towards Clojure transducers
- some rudimentary benchmarking of Racket's `sequence` type

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [March 21, 2025, 4:31am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/67 "2025-03-21T04:31:28Z")

</div>

Last week's notes:

[_ **A Puzzling Performance** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-Mar-14-2025)

**Highlights** :

- Qi and Rhombus?
- We investigated a performance puzzle and figured it out! ... or did we? 🐿
- Join us tomorrow if you want to help us get to the bottom of it! 🕵 🔎

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [March 22, 2025, 4:19am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/68 "2025-03-22T04:19:17Z")

</div>

This was a fun one.

[_ **Into the Depths** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-Mar-21-2025)

Highlights:

- We didn't solve the performance puzzle, but we got some reliable data
- Just read till the end 🙂

---

<div class="post-metadata">

**Author:** ![gus-massa](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/gus-massa/32/507_2.png) [@gus-massa](https://racket.discourse.group/u/gus-massa)\
**Post date:** [March 22, 2025, 9:24pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/69 "2025-03-22T21:24:50Z")

</div>

I'm very curious.

I usually use something like `33333` instead of `3` so it's easier to find it in the middle of of a big expansion. If you want a square minus one, I just got

```
11115556 -> 11115555
44448889 -> 44448888

```

It would be useful to compare the output of each phase. If they are equal after `cp0`, it would be useful to find the first one where they are different again.

I remember the BC had some hidden info, for example after some internal optimizations steps `(lambda (x) ...)` has a fag to signal it's single valued and another to signal it doesn't do interesting things with (tail?) continuations marks. So the later compilations steps can generate more efficient code.

I'm not sure about the hidden information in CS. But references, call and other stuff have in the internal representation an internal field `preinfo` that I never understood and I think is hidden in the "friendly" output.

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [March 24, 2025, 8:22pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/70 "2025-03-24T20:22:14Z")

</div>

Ah, thanks, that's a very helpful insight re: the possibility of "hidden" information!

That reminds me of something similar in the Qi compiler, where we currently rely on a compile-time struct to hold some information that isn't explicit in the IR, for the purposes of doing deforestation (in a dedicated deforestation pass). Doing it this way allowed us to achieve deforestation by introducing a single new core language form (called `#%deforestable`, designating any deforestable operation). At the time, we had assumed that without this approach, we would need to significantly inflate the core language in order to support all deforestable operations.

But it now seems possible that we could introduce just a handful of forms, e.g., `#%producer`, `#%transformer` and `#%consumer`, which would allow us to make all of the metadata from the compile-time struct explicit in the IR, retaining the generality and extensibility of our current approach. I think the tradeoff might be that doing it via "hidden" info could potentially reduce compile time by reducing the size of generated code, but I don't know much about this. I wonder if a similar translation could always avoid hidden information (i.e., even in the case of CS), and whether that would be advisable. Do you have any thoughts or preferences on this?

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [April 15, 2025, 8:11am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/71 "2025-04-15T08:11:16Z")

</div>

Notes from Friday:

[_ **Two Directions in Deforestation Architecture** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-Apr-11-2025)

There's some interesting stuff there for the patient reader.

**Highlights** :

- Representing not just deforestable but _deforested_ sequences in the Qi core language
- Clearly separating formal compilation rules (e.g., for abstract stream fusion) from code generation (i.e., to Racket) which includes the actual deforested runtime
- We've had the ["probe" debugger](https://docs.racket-lang.org/qi/Field_Guide.html#%28part._.Using_a_.Probe%29) for a while, for local testing. Maybe we can also have "tap" for holistic visibility?
- The independent compilation divide in multi-language settings, and ways to overcome it

Btw @gus-massa , we decided to take a break from the "fantastic voyage" into the Racket and Chez Scheme compiler this time, as we didn't want to get sucked too far down that rabbit hole just yet. But it's very interesting (likely for a lot of folks on here), so we felt we could return to it in a little while, ideally with more hands on deck (want to join for that?), so that more people share in the fun and we have a chance to learn some new tricks 😄

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [April 24, 2025, 7:35am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/72 "2025-04-24T07:35:50Z")

</div>

Last week's notes:

[_ **Thesis Defense** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-Apr-18-2025) 🎓

We discussed some challenges to proposed changes in the design of deforestation in the initial round of feedback. It's pretty in-the-weeds of the implementation, of necessity, but it's a nice dialogue and a view into iterating the design of a core component of the compiler.

Enjoy!

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [May 2, 2025, 3:32am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/73 "2025-05-02T03:32:07Z")

</div>

Last week's notes:

[_ **Outlining Inlining** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-Apr-25-2025)

We discussed how and why we should introduce inlining in the Qi compiler.

Also Qi Enterprise Edition​:trade\_mark: (QiEE​:trade\_mark:) has received buy-in from all stakeholders in upper management including C-levels 🧑‍💼 💼 📈 and we have received the go-ahead to conduct market surveys to establish product/market fit by connecting with early adopters and tech evangelists.

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [May 9, 2025, 9:28am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/74 "2025-05-09T09:28:07Z")

</div>

Last week's notes:

[_ **Test Drive** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-May-2-2025)

Highlights:

- a sketch for inferring naive and deforested semantics for the same sequence operation (e.g., `map`) from a common set of defining parameters (ideas welcome!)
- formally specifying semantics of deforestation is a rabbit hole we'd like to avoid
- Qi Enterprise Edition™ and formal verification opportunities
- for inlining with bindings present, `gensyms` are bad. `make-syntax-introducer` is good.
- On the road in the Swiss Alps 🚐 🌄

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [May 18, 2025, 4:07am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/75 "2025-05-18T04:07:24Z")

</div>

Notes from Friday:

[_ **Parsin's Pleasure** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-May-16-2025)

Highlights:

- using a "persistent symbol table" to facilitate inlining of separately defined flows
- rabbit holes involving parsing approaches, terminals from the future, and Emacs

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [May 26, 2025, 4:20pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/76 "2025-05-26T16:20:28Z")

</div>

Friday's notes:

[_ **A Clever Substitution** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-May-23-2025)

We're making progress on inlining separately-defined flows 🛼

**Highlights** :

- Using transformer bindings as a sub-in for a free identifier table
- Capturing flow syntax at the definition site in compile-time metadata
- Inlining that syntax in a new compiler pass at the start of compilation
- How to solve the problem of inlining _surface_ syntax _post-expansion_? ( **ideas welcome!** )

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [June 3, 2025, 6:40am UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/77 "2025-06-03T06:40:15Z")

</div>

Friday's notes:

[_ **OOPs, I Did It Again** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-May-30-2025)

**Highlights:**

- We got inlining of separately defined flows to work!
- Jair demoed "immutable OOP" with Qi
- A thin `qi/class` in the works, for 100% compatible immutable OOP with `racket/class`
- Are we doing OOP wrong?
- Jurassic lessons on persistent data structures from the Allosaur 🦖
- When your sanity check fails 🤪
- Unique compiler challenges in multi-language settings
- How to run the DrRacket macro stepper from Emacs

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [June 16, 2025, 11:08pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/78 "2025-06-16T23:08:17Z")

</div>

Notes from Friday:

[_ **Syntax Property Walker, Texas Ranger** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-June-13-2025)

**Highlights** :

- discussion of strategies to avoid infinite code generation in inlining separately defined flows
- we implemented a "syntax property walker" to do it
- a neat way to test for termination of code
- publish or perish!
- a compelling revenue model for Qi Enterprise Edition™
- turns out you can (and should, surely) run Emacs on your phone

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [July 11, 2025, 8:37pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/79 "2025-07-11T20:37:26Z")

</div>

[_ **Qi: Top Chef Edition** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-July-9-2025)

Highlights:

- pizza!
- lexical scope, dynamic scope, ... and "well-ordered" scope?
- closing the box on "Cassandra's binding": can we enforce "DAG structured" scoping rules in the compiler to complement the tree-structured checks we get for free from Syntax Spec?
- edge cases in binding across languages
- how Qi's tee junction is like `let`

---

<div class="post-metadata">

**Author:** ![countvajhula](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/countvajhula/32/65_2.png) [@countvajhula](https://racket.discourse.group/u/countvajhula)\
**Post date:** [July 17, 2025, 7:58pm UTC](https://racket.discourse.group/t/todays-qi-meeting-notes/2323/80 "2025-07-17T19:58:59Z")

</div>

[_ **Augie Doggie, Dodgy DAGy** _](https://github.com/drym-org/qi/wiki/Qi-Meeting-July-16-2025)

[Dominik's blog post](https://trustica.cz/en/blog/2025/07/17/tree-versus-dag-bindings/) on the topic of tree vs DAG bindings explains the challenges well. We discussed some approaches to addressing them.

[Previous page](https://racket.discourse.group/t/todays-qi-meeting-notes/2323.md?page=3)

[Next page](https://racket.discourse.group/t/todays-qi-meeting-notes/2323.md?page=5)
