<?xml version="1.0" encoding="UTF-8"?>
<OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd">
  <responseDate>2026-08-11T00:28:29Z</responseDate>
  <request identifier="7273" metadataPrefix="oai_dc" verb="GetRecord">https://drops.dagstuhl.de/oai</request>
  <GetRecord>
    <record>
      <header>
        <identifier>oai:drops-oai.dagstuhl.de:7273</identifier>
        <datestamp>2024-03-12T11:58:43Z</datestamp>
        <setSpec>ddc:004</setSpec>
        <setSpec>open_access</setSpec>
      </header>
      <metadata>
        <oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd">
          <dc:title>Compiling Tree Transforms to Operate on Packed Representations</dc:title>
          <dc:creator>Vollmer, Michael</dc:creator>
          <dc:creator>Spall, Sarah</dc:creator>
          <dc:creator>Chamith, Buddhika</dc:creator>
          <dc:creator>Sakka, Laith</dc:creator>
          <dc:creator>Koparkar, Chaitanya</dc:creator>
          <dc:creator>Kulkarni, Milind</dc:creator>
          <dc:creator>Tobin-Hochstadt, Sam</dc:creator>
          <dc:creator>Newton, Ryan R.</dc:creator>
          <dc:subject>compiler optimization</dc:subject>
          <dc:subject>program transformation</dc:subject>
          <dc:subject>tree traversal</dc:subject>
          <dc:description>When written idiomatically in most programming languages, programs&#13;
that traverse and construct trees operate over pointer-based data&#13;
structures, using one heap object per-leaf and per-node. This&#13;
representation is efficient for random access and shape-changing&#13;
modifications, but for traversals, such as compiler passes, that&#13;
process most or all of a tree in bulk, it can be inefficient. In this&#13;
work we instead compile tree traversals to operate on&#13;
pointer-free pre-order serializations of trees. On modern&#13;
architectures such programs often run significantly faster than&#13;
their pointer-based counterparts, and additionally are directly suited&#13;
to storage and transmission without requiring marshaling.&#13;
&#13;
We present a prototype compiler, Gibbon, that compiles a&#13;
small first-order, purely functional language sufficient for tree&#13;
traversals. The compiler transforms this language into intermediate&#13;
representation with explicit pointers into input and output buffers&#13;
for packed data. The key compiler technologies include an effect&#13;
system for capturing traversal behavior, combined with an algorithm to&#13;
insert destination cursors. We evaluate our compiler on tree&#13;
transformations over a real-world dataset of source-code syntax trees.&#13;
For traversals touching the whole tree, such as maps and folds, packed&#13;
data allows speedups of over 2x compared to a highly-optimized&#13;
pointer-based baseline.</dc:description>
          <dc:publisher>Schloss Dagstuhl – Leibniz-Zentrum für Informatik</dc:publisher>
          <dc:contributor>Michael Vollmer and Sarah Spall and Buddhika Chamith and Laith Sakka and Chaitanya Koparkar and Milind Kulkarni and Sam Tobin-Hochstadt and Ryan R. Newton</dc:contributor>
          <dc:date>2017</dc:date>
          <dc:relation>Is Part Of LIPIcs, Volume 74, 31st European Conference on Object-Oriented Programming (ECOOP 2017)</dc:relation>
          <dc:type>InProceedings</dc:type>
          <dc:type>Text</dc:type>
          <dc:type>doc-type:ResearchArticle</dc:type>
          <dc:type>publishedVersion</dc:type>
          <dc:format>application/pdf</dc:format>
          <dc:identifier>doi:10.4230/LIPIcs.ECOOP.2017.26</dc:identifier>
          <dc:identifier>urn:nbn:de:0030-drops-72737</dc:identifier>
          <dc:identifier>https://drops.dagstuhl.de/entities/document/10.4230/LIPIcs.ECOOP.2017.26</dc:identifier>
          <dc:language>eng</dc:language>
          <dc:rights>https://creativecommons.org/licenses/by/3.0/legalcode</dc:rights>
        </oai_dc:dc>
      </metadata>
    </record>
  </GetRecord>
</OAI-PMH>
