<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Topics on My New Hugo Site</title>
    <link>https://drcicero.github.io/topics/</link>
    <description>Recent content in Topics on My New Hugo Site</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <atom:link href="https://drcicero.github.io/topics/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Choreographic Programming</title>
      <link>https://drcicero.github.io/topics/choreographic/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://drcicero.github.io/topics/choreographic/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://drcicero.github.io/#research-projects&#34;&gt;← Back to Home&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Write a whole distributed system as one script, and let the compiler split it up.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A distributed system is normally written as many separate programs, one per&#xA;participant, which have to agree on a protocol that exists nowhere in the code.&#xA;Choreographic programming writes the interaction &lt;em&gt;once&lt;/em&gt;, as a single program&#xA;that names every participant, and a compiler projects it onto the individual&#xA;endpoints. Protocol mismatches and whole classes of deadlock become programs&#xA;you cannot write in the first place.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Array &amp; Differentiable Programming</title>
      <link>https://drcicero.github.io/topics/array-programming/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://drcicero.github.io/topics/array-programming/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://drcicero.github.io/#research-projects&#34;&gt;← Back to Home&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Compilers for machine learning: derive and prove what ML frameworks hard-code.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Machine learning runs on a small set of operations (multiply these arrays,&#xA;differentiate this, invert that) that a compiler ought to derive rather than&#xA;have a human write out by hand. My work gives these transformations a&#xA;functional foundation, so they can be optimized aggressively and proved correct&#xA;rather than trusted.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Arrays:&lt;/strong&gt; a normal form for array programs in which partial evaluation and&#xA;common subexpression elimination become one algorithm (ECOOP&#39;24).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Derivatives:&lt;/strong&gt; automatic differentiation optimized by rewrite strategies,&#xA;with Timon Böhler (FTfJP&#39;23).&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Inverses:&lt;/strong&gt; a verified search for inverse functions, applied to normalizing&#xA;flows, with Timon Böhler and Benedict Smit (preprint).&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;awards&#34;&gt;&#xA;&lt;div class=&#34;awards-label&#34;&gt;Highlight&lt;/div&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;span class=&#34;badge&#34;&gt;🏅 Distinguished Paper&lt;/span&gt; &lt;em&gt;Compiling with Arrays&lt;/em&gt;, &lt;a href=&#34;https://2024.ecoop.org/track/ecoop-2024-awards&#34;&gt;ECOOP 2024&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div class=&#34;collab&#34;&gt;&#xA;&lt;div class=&#34;collab-label&#34;&gt;Collaborators&lt;/div&gt;&#xA;&lt;div class=&#34;collab-list&#34;&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Timon Böhler&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Jannis Brugger&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Mattia Cerrato&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Cedric Derstroff&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Stefan Kramer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Daniel Maninger&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Mira Mezini&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Viktor Pfanschilling&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Benedict Smit&lt;/span&gt;&#xA;&lt;/span&gt;&lt;span class=&#34;collab-item&#34;&gt;&#xA;&lt;span class=&#34;collab-avatar&#34;&gt;&lt;!--&#xA;tags: [person, account]&#xA;version: &#34;1.0&#34;&#xA;unicode: &#34;eb4d&#34;&#xA;category: System&#xA;--&gt;&#xA;&lt;svg aria-hidden=&#34;true&#34; class=&#34;hi-svg-inline collab-icon&#34; fill=&#34;none&#34; height=&#34;1em&#34; stroke=&#34;currentColor&#34; stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; viewBox=&#34;0 0 24 24&#34; width=&#34;1em&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&#xA;  &lt;path d=&#34;M8 7a4 4 0 1 0 8 0a4 4 0 0 0 -8 0&#34; /&gt;&#xA;  &lt;path d=&#34;M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2&#34; /&gt;&#xA;&lt;/svg&gt;&#xA;&lt;/span&gt;&#xA;&lt;span class=&#34;collab-name&#34;&gt;Pascal Weisenburger&lt;/span&gt;&#xA;&lt;/span&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;section class=&#34;paper-card&#34;&gt;&#xA;&lt;div class=&#34;paper-head&#34;&gt;&lt;div class=&#34;paper-headtext&#34;&gt;&lt;span class=&#34;paper-chip&#34;&gt;&lt;span class=&#34;paper-year&#34;&gt;2023&lt;/span&gt;&lt;span class=&#34;paper-venue&#34;&gt;FTfJP @ ECOOP · Short paper&lt;/span&gt;&lt;/span&gt;&lt;h3 class=&#34;paper-title&#34;&gt;Using Rewrite Strategies for Efficient Functional Automatic Differentiation&lt;/h3&gt;&lt;p class=&#34;paper-authors&#34;&gt;Timon Böhler, David &lt;strong&gt;Richter&lt;/strong&gt;, Mira Mezini&lt;/p&gt;</description>
    </item>
    <item>
      <title>Incremental &amp; Reactive Programming</title>
      <link>https://drcicero.github.io/topics/incremental/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://drcicero.github.io/topics/incremental/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://drcicero.github.io/#research-projects&#34;&gt;← Back to Home&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Compilers that turn plain functional code into computations that redo only what changed.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Most programs throw away their own work: change one cell of a matrix or one row&#xA;of a table, and the whole computation runs again from scratch. Incremental&#xA;programming derives from an ordinary functional program a second one that maps&#xA;a &lt;em&gt;change&lt;/em&gt; to the input to the corresponding &lt;em&gt;change&lt;/em&gt; to the output, reusing&#xA;everything that was already computed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Effects &amp; Type Theory</title>
      <link>https://drcicero.github.io/topics/effects-and-types/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://drcicero.github.io/topics/effects-and-types/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://drcicero.github.io/#research-projects&#34;&gt;← Back to Home&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Notations and type checkers that let programmers write what they mean, and still check it.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;A type system is a negotiation. The programmer wants to write what they mean;&#xA;the compiler wants a guarantee it can actually check. Push too hard on the&#xA;guarantee and the notation turns rigid (effects marshalled one per line,&#xA;motives spelled out by hand). Push too hard on convenience and the guarantee&#xA;evaporates. My work tries to move that boundary rather than pick a side:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
