<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Towards Meta-Level Engineering and Tooling for Complex Concurrent Systems</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Stefan Marr</string-name>
          <email>marr@jku</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Elisa Gonzalez Boixy</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Hanspeter Mossenbock</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Johannes Kepler University Linz</institution>
          ,
          <country country="AT">Austria</country>
        </aff>
      </contrib-group>
      <fpage>91</fpage>
      <lpage>95</lpage>
      <abstract>
        <p>With the widespread use of multicore processors, software becomes more and more diverse in its use of parallel computing resources. To address all application requirements, each with the appropriate abstraction, developers mix and match various concurrency abstractions made available to them via libraries and frameworks. Unfortunately, today's tools such as debuggers and pro lers do not support the diversity of these abstractions. Instead of enabling developers to reason about the high-level programming concepts, they used to express their programs, the tools work only on the library's implementation level. While this is a common problem also for other libraries and frameworks, the complexity of concurrency exacerbates the issue further, and reasoning on the higher levels of the concurrency abstractions is essential to manage the associated complexity. In this position paper, we identify open research issues and propose to build tools based on a common meta-level interface to enable developers to reasons about their programs based on the high-level concepts they used to implement them.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Co
        <xref ref-type="bibr" rid="ref13">pyright 2016</xref>
        for the individual papers by the papers' authors. Copying permitted for private and academic purposes. This volume
is published and copyrighted by its editors.
      </p>
      <p>Submission to: 9. Arbeitstagung Programmiersprachen, Vienna, Austria, 25 February 2016
Debugger</p>
      <p>Profiler</p>
      <p>Race
Detection
…</p>
      <p>DataFlow Fork/Join</p>
      <p>…
Meta-Level Tooling Interface</p>
      <p>Minimal Interference Instrumentation</p>
      <p>
        Language Implementation
of Scala programs [Tasharo
        <xref ref-type="bibr" rid="ref2">et al., 2013</xref>
        ] investigated why developers use thread-based abstractions in
actorbased applications. While the actor model avoids race conditions by design, because actors cannot share mutable
state, this property can severely a ect performance. Thus, developers combine it with threads. In addition, some
problems are expressed more naturally by de ning computations on shared memory. Unfortunately, combining
concurrency models can lead to unexpected bugs, e. g., race conditions or d
        <xref ref-type="bibr" rid="ref3">eadlocks [Swalens et al., 2014</xref>
        ].
      </p>
      <p>
        While the use of multiple concurrency models in the same application has been recognized as an issue [Haller,
2015, Swal
        <xref ref-type="bibr" rid="ref3">ens et al., 2014</xref>
        , Tasharo
        <xref ref-type="bibr" rid="ref2">et al., 2013</xref>
        ], the question of how to engineer and debug such systems has not
been approached. Yet software tools are an integral part of application development since they help developers
to cope with the complexity of software. On the one hand, tools such as inspectors, debuggers, and pro lers
need to be able to expose the high-level concurrency concepts such as transactions or asynchronous messages to
the developers. On the other hand, tools need to overcome the fundamental performance overhead of collecting
the runtime information on data access patterns, data races, con icting updates in transactions, or actors that
are sequential bottlenecks. To aid the development of complex concurrent applications, high-level debuggers are
sorely needed to help programmers to nd errors as well as to achieve a better understanding of the dynamic
application behavior.
2
      </p>
    </sec>
    <sec id="sec-2">
      <title>A Meta-Level Interface to Enable Tooling of Complex Concurrent Systems</title>
      <p>
        To bring tooling to the wide range of concurrency models, we envision a meta-level interface that allows tools
to connect to the language implementation and observe program execution as well as interact with it by using a
common set of basic concepts that underlie a wide range of concurrency abstractions. This idea is reminiscent
to classic metaobject protocols (MOP) [Kiczales et al., 1991], which reify the concepts of a language and its
implementation to enable tooling as well as dynamic adaptation from within a program. This idea can also be
seen in widely used VM tooling interfaces [Wurthin
        <xref ref-type="bibr" rid="ref17">ger et al., 2010</xref>
        ].
      </p>
      <p>Figure 1 visualizes the relation of the envisioned meta-level interface with respect to concurrency abstractions,
tools, and instrumentation at the level of language implementation. The key for making the interface independent
of concrete concurrency abstractions is to identify the fundamental building blocks for each abstraction. For
instance for message-passing approaches, the exchange of messages and the involved mailboxes or channels are
essential, because they allow developers to reason about the information ow between actors or processes. Shared
memory models on the other hand have other basic notions. In an STM, it is relevant to know in which order
transactions have been executed, which ones caused transaction aborts or retries. To understand applications
with locks, one needs however information on which resources are protected by locks, and how and when the
locks are acquired. Declarative concurrency models are again di erent, in that they typically express data
dependencies explicitly.
3</p>
    </sec>
    <sec id="sec-3">
      <title>Open Research Issues</title>
      <p>For such a meta-level interface, we need to distill the set of basic building blocks instead of merely enumerating
all high-level concepts. Thus, one of the challenges is to identify the common core concepts shared between
concurrency abstractions so that a wide range of concepts can be represented. However, this is not the only
challenge. The next section details the problems that need to be tackled to realize the vision of a common
meta-level interface for debugging.</p>
      <p>To build high-level debuggers and other tools for the development of complex concurrent systems, we face issues
in three areas: how to debug programs that employ multiple concurrency models, how to provide instrumentation
for such tooling that minimizes interference with program execution, and how to decouple these mechanisms from
concrete concurrency abstractions. We detail these problem brie y in the remainder of this section.
3.1</p>
      <sec id="sec-3-1">
        <title>Debuggers for Programs Employing Multiple Concurrency Models</title>
        <p>
          Prior research has studied debugging support for many of the individual concurrency models. However, debuggers
for programs that employ multiple concurrency models are unexplored. Generally, M
          <xref ref-type="bibr" rid="ref24">cDowell and Helmbold
[1989</xref>
          ] distinguish classic breakpoint-based debuggers and event-based ones. Event-based debuggers typically
record the history of events in an application and might provide analyses on top of these events. Depending on
the concurrency model, an event may be an API call, a memory load/store, or a message send/receive.
        </p>
        <p>
          As an approach that is especially relevant in the eld of concurrency, research on breakpoint-based debuggers
led to time-traveling d
          <xref ref-type="bibr" rid="ref3">ebuggers [Barr and Marron, 2014</xref>
          , Pluque
          <xref ref-type="bibr" rid="ref25">t et al., 2009</xref>
          , Pothier et al., 2007], which preserve
the dynamic program history to enable forward and backward step-by-step execution and state inspection.
Focusing on speci c models, breakpoint-based debuggers have been investigated for thread-based concurrency
models, S
          <xref ref-type="bibr" rid="ref35">TM [Zyulkyarov et al., 2010</xref>
          ], and event loops [Gonzal
          <xref ref-type="bibr" rid="ref8">ez Boix et al., 2011</xref>
          ].
        </p>
        <p>However, it remains open how to build a uniform debugger that supports a wide variety of concurrency models.
We see this as an open question both from the user perspective and the implementation perspective. Considering
typical scenarios, such a debugger needs to be able to help developers to understand their programs from di erent
perspectives or levels of granularity. For instance in an actor program, one might want to continue execution
until a message is processed completely, or one might want to see which messages caused which e ects to see
races or bottlenecks. In a transaction, one might want to complete a whole atomic block, or in a lock-based part
of the program continue execution until a lock is taken or released. All these are di erent concepts that have
to be carefully represented to be understandable for the user, but must also be realized in a way generic that is
enough so that the new en vogue concurrency concept of the day can be supported.
3.2</p>
      </sec>
      <sec id="sec-3-2">
        <title>Low-Interference Program Instrumentation</title>
        <p>
          For debugging, it is also still an open question how to record concurrent executions, while minimizing the
necessary data and instrumentation. Instrumentation of concurrent programs is generally problematic, because
it can interfere with the execution so that data races might never appear with the instrumentation. Thus, it is
essential to minimize general interference. Part of that is to minimize the amount of record
          <xref ref-type="bibr" rid="ref3">ed events [Barr and
Marron, 2014</xref>
          , Hofer et al., 2016, Lengauer et al., 2015, Pothier et al., 2007]. This could for instance go in the
direction of techniques for debugging message-passing s
          <xref ref-type="bibr" rid="ref14">ystems. Honda and Yonezawa [1988</xref>
          ] propose to raise the
abstraction level to debug systems on the level of object groups. This approach structures the event history in
terms of the tasks performed collectively by a group of objects, which is one relevant approach to present the
high-level concepts to developers.
        </p>
        <p>
          The main goal is, however, to identify techniques that are applicable to a wide range of concurrency models to
be able to represent high-level concepts to developers. Thus, relevant techniques include recording for re
          <xref ref-type="bibr" rid="ref11 ref12 ref20 ref21 ref9">play [Liu
et al., 2015</xref>
          , Prahof
          <xref ref-type="bibr" rid="ref8">er et al., 2011</xref>
          ], concurrency bug reproduction [Huang and Zhang, 2012], data ow [Tripp
          <xref ref-type="bibr" rid="ref8">et al., 2011</xref>
          ] and data depend
          <xref ref-type="bibr" rid="ref2">ency discovery [Bond et al., 2013</xref>
          ], as well as recording of performance-relat
          <xref ref-type="bibr" rid="ref3">ed
information [David et al., 2014</xref>
          , Hofer et al., 2015a]. So far, however, the known precise approaches cause
interferences in the execution or do not scale to complex systems. Imprecise, i. e., probabilistic approaches are
potentially a solution. Existing work investigates the use of hardware su
          <xref ref-type="bibr" rid="ref11 ref12 ref20 ref21 ref9">pport [Hofer et al., 2015</xref>
          b, Inoue and
Naka
          <xref ref-type="bibr" rid="ref25">tani, 2009</xref>
          ], and discusses how to derive high-level informa
          <xref ref-type="bibr" rid="ref35">tion [Jin et al., 2010</xref>
          , My
          <xref ref-type="bibr" rid="ref25">tkowicz et al., 2009</xref>
          ], but
has not yet been investigated in the context of multiple high-level concurrency models.
3.3
        </p>
      </sec>
      <sec id="sec-3-3">
        <title>Decoupling Infrastructure from Concrete Concurrency Models</title>
        <p>
          As mentioned in section 2, our goal is to de ne a meta-level interface that can be used to observe and to
interact with the execution of complex concurrent systems that use a wide range of concurrency abstractions.
We envision the use of a meta-level interface based on the insight that tools always have a tight connection to
meta-level programming. Thus, it is natural that programs are either manipulated (statically) or executed and
monitored (dynamically) by a tool, which can also be the program itself. The code of the tool interacts with
the code of the program by means of such a meta-level interface, which is tightly bound to the design of the
programming language. Examples are VM tooling interfaces [Wurthin
          <xref ref-type="bibr" rid="ref17">ger et al., 2010</xref>
          ] and metaobject protocols
(MOP) [Kiczales et al., 1991]. MOPs have been studied in the eld of distributed computing [Cazzola, 2003,
Gar
          <xref ref-type="bibr" rid="ref7">binato et al., 1994</xref>
          , McA er, 1995] as well as to realize individual concurrency models on the
          <xref ref-type="bibr" rid="ref22">same VM [Marr
and D'Hondt, 2012</xref>
          ]. However, it is still open which basic concepts such an interface needs to make it possible
to build a wide range of concurrency abstractions on top of it and to provide the necessary information about
interactions of concurrency abstractions for the purpose of building tools such as debuggers. Thus, we need to
nd ways to decouple the meta-level interface from concrete concurrency models, and to abstract from them.
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Conclusion</title>
      <p>For the development of complex concurrent systems, we need better tools! Currently, debugging and tooling is
only available on the implementation level and does not capture high-level concepts. With the complexity of
concurrent software especially when it mixes and matches di erent abstractions, it is essential to preserve these
abstractions also during debugging in order to understand a program's behavior.</p>
      <p>We see a meta-level interface that abstracts from concrete concurrency models as a way forward. However,
there are many open research questions: starting from how to build debuggers for di erent interacting
concurrency abstractions, over the question of how to avoid problematic interference with program execution, as well
as how to abstract from concrete concurrency models for such an interface.</p>
      <p>
        Recently, we started to investigate these issues in the context of the Tru e and Graal language implementation
platform [Wurthing
        <xref ref-type="bibr" rid="ref2">er et al., 2013</xref>
        ] of Oracle Labs. We intent to focus on this research, but with the large number
of open questions, we welcome collaborations and exchange of ideas that can lead to solving today's issues of
building complex concurrent applications.
      </p>
    </sec>
    <sec id="sec-5">
      <title>Acknowledgements</title>
      <p>This research is funded by a collaboration grant of the Austrian Science Fund (FWF) with the project I2491-N31
and the Research Foundation Flanders (FWO Belgium).</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <string-name>
            <given-names>G.</given-names>
            <surname>Agha. ACTORS</surname>
          </string-name>
          :
          <article-title>A Model of Concurrent Computation in Distributed Systems</article-title>
          . MIT Press, Cambridge, MA, USA,
          <year>1986</year>
          . ISBN 0-262-01092-5.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          <string-name>
            <given-names>E.</given-names>
            <surname>Bainomugisha</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A. Lombide</given-names>
            <surname>Carreton</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. Van</given-names>
            <surname>Cutsem</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Mostinckx</surname>
          </string-name>
          , and W. De Meuter.
          <article-title>A survey on reactive programming</article-title>
          .
          <source>ACM Comput. Surv.</source>
          ,
          <volume>45</volume>
          (
          <issue>4</issue>
          ):
          <volume>52</volume>
          :1{
          <fpage>52</fpage>
          :
          <fpage>34</fpage>
          ,
          <string-name>
            <surname>Aug</surname>
          </string-name>
          .
          <year>2013</year>
          . doi:
          <volume>10</volume>
          :1145/2501654:
          <fpage>2501666</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          <string-name>
            <given-names>E. T.</given-names>
            <surname>Barr</surname>
          </string-name>
          and
          <string-name>
            <given-names>M.</given-names>
            <surname>Marron</surname>
          </string-name>
          .
          <article-title>Tardis: A ordable time-travel debugging in managed runtimes</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>67</volume>
          {
          <fpage>82</fpage>
          . ACM,
          <year>2014</year>
          . doi:
          <volume>10</volume>
          :1145/2660193:
          <fpage>2660209</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          <string-name>
            <surname>M. D. Bond</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Kulkarni</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Cao</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>M. Fathi</given-names>
          </string-name>
          <string-name>
            <surname>Salmi</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Biswas</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Sengupta</surname>
            , and
            <given-names>J.</given-names>
          </string-name>
          <string-name>
            <surname>Huang</surname>
          </string-name>
          . Octet:
          <article-title>Capturing and controlling cross-thread dependences e ciently</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>693</volume>
          {
          <fpage>712</fpage>
          . ACM,
          <year>2013</year>
          . doi:
          <volume>10</volume>
          :1145/2509136:
          <fpage>2509519</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          <string-name>
            <given-names>W.</given-names>
            <surname>Cazzola</surname>
          </string-name>
          .
          <article-title>Remote method invocation as a rst-class citizen</article-title>
          .
          <source>Distributed Computing</source>
          ,
          <volume>16</volume>
          (
          <issue>4</issue>
          ):
          <volume>287</volume>
          {
          <fpage>306</fpage>
          ,
          <year>2003</year>
          . ISSN 0178-
          <fpage>2770</fpage>
          . doi:
          <volume>10</volume>
          :1007/s00446-003-0094-8.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          <string-name>
            <given-names>F.</given-names>
            <surname>David</surname>
          </string-name>
          , G. Thomas,
          <string-name>
            <given-names>J.</given-names>
            <surname>Lawall</surname>
          </string-name>
          , and
          <string-name>
            <given-names>G.</given-names>
            <surname>Muller</surname>
          </string-name>
          .
          <article-title>Continuously measuring critical section pressure with the free-lunch pro ler</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>291</volume>
          {
          <fpage>307</fpage>
          . ACM,
          <year>2014</year>
          . doi:
          <volume>10</volume>
          :1145/2660193:
          <fpage>2660210</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          <string-name>
            <given-names>B.</given-names>
            <surname>Garbinato</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Guerraoui</surname>
          </string-name>
          , and
          <string-name>
            <given-names>K.</given-names>
            <surname>Mazouni</surname>
          </string-name>
          .
          <article-title>Distributed programming in garf</article-title>
          . In R. Guerraoui,
          <string-name>
            <given-names>O.</given-names>
            <surname>Nierstrasz</surname>
          </string-name>
          , and M. Riveill, editors,
          <source>Object-Based Distributed Programming</source>
          , volume
          <volume>791</volume>
          <source>of LNCS</source>
          , pages
          <volume>225</volume>
          {
          <fpage>239</fpage>
          . Springer Berlin Heidelberg,
          <year>1994</year>
          . doi:
          <volume>10</volume>
          :1007/BFb0017543.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          <string-name>
            <given-names>E.</given-names>
            <surname>Gonzalez Boix</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Noguera</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T. Van</given-names>
            <surname>Cutsem</surname>
          </string-name>
          ,
          <string-name>
            <surname>W. De Meuter</surname>
          </string-name>
          , and
          <string-name>
            <surname>T. D'Hondt.</surname>
          </string-name>
          Reme-d:
          <article-title>A re ective epidemic message-oriented debugger for ambient-oriented applications</article-title>
          .
          <source>In Proc. of SAC</source>
          , pages
          <volume>1275</volume>
          {
          <fpage>1281</fpage>
          . ACM,
          <year>2011</year>
          . doi:
          <volume>10</volume>
          :1145/1982185:
          <fpage>1982463</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          <string-name>
            <given-names>P.</given-names>
            <surname>Haller</surname>
          </string-name>
          .
          <article-title>High-Level Concurrency Libraries: Challenges for Tool Support</article-title>
          ,
          <year>October 2015</year>
          . Keynote of Eclipse Technology eXchange Workshop, collocated with SPLASH '
          <volume>15</volume>
          . http://2015:splashcon:org/event /etx2015-keynote
          <article-title>-by-philipp-haller.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          <string-name>
            <given-names>C. A. R.</given-names>
            <surname>Hoare</surname>
          </string-name>
          .
          <article-title>Communicating sequential processes</article-title>
          .
          <source>Commun. ACM</source>
          ,
          <volume>21</volume>
          (
          <issue>8</issue>
          ):
          <volume>666</volume>
          {
          <fpage>677</fpage>
          ,
          <year>1978</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          <string-name>
            <given-names>P.</given-names>
            <surname>Hofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Gnedt</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Mo</surname>
          </string-name>
          <article-title>ssenbock. E cient Dynamic Analysis of the Synchronization Performance of Java Applications</article-title>
          .
          <source>In Proc. of the WODA Workshop</source>
          , pages
          <volume>14</volume>
          {
          <fpage>18</fpage>
          . ACM,
          <year>2015a</year>
          . doi:
          <volume>10</volume>
          :1145/2823363:
          <fpage>2823367</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          <string-name>
            <given-names>P.</given-names>
            <surname>Hofer</surname>
          </string-name>
          ,
          <string-name>
            <surname>F.</surname>
          </string-name>
          <article-title>Horschlager, and</article-title>
          <string-name>
            <given-names>H.</given-names>
            <surname>Mo</surname>
          </string-name>
          <article-title>ssenbock. Sampling-based Steal Time Accounting Under Hardware Virtualization</article-title>
          .
          <source>In Proc. of ICPE</source>
          , pages
          <volume>87</volume>
          {
          <fpage>90</fpage>
          . ACM,
          <year>2015b</year>
          . doi:
          <volume>10</volume>
          :1145/2668930:
          <fpage>2695524</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          <string-name>
            <given-names>P.</given-names>
            <surname>Hofer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Gnedt</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          <article-title>Schorgenhumer, and</article-title>
          <string-name>
            <surname>H.</surname>
          </string-name>
          <article-title>Mossenbock. E cient Tracing and Versatile Analysis of Lock Contention in Java Applications on the Virtual Machine Level</article-title>
          .
          <source>In Proc. of the ACM/SPEC Conf. on Performance Engineering (ICPE'16)</source>
          ,
          <year>March 2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          <string-name>
            <given-names>Y.</given-names>
            <surname>Honda</surname>
          </string-name>
          and
          <string-name>
            <given-names>A.</given-names>
            <surname>Yonezawa</surname>
          </string-name>
          .
          <article-title>Debugging concurrent systems based on object groups. In S. Gjessing and</article-title>
          K. Nygaard, editors,
          <source>Proc. of ECOOP</source>
          , volume
          <volume>322</volume>
          <source>of LNCS</source>
          , pages
          <volume>267</volume>
          {
          <fpage>282</fpage>
          . Springer Berlin Heidelberg,
          <year>1988</year>
          . doi:
          <volume>10</volume>
          :
          <issue>1007</issue>
          /
          <fpage>3</fpage>
          -540-45910-3
          <fpage>16</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          <string-name>
            <given-names>J.</given-names>
            <surname>Huang</surname>
          </string-name>
          and
          <string-name>
            <given-names>C.</given-names>
            <surname>Zhang</surname>
          </string-name>
          . Lean:
          <article-title>Simplifying concurrency bug reproduction via replay-supported execution reduction</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , volume
          <volume>47</volume>
          , pages
          <fpage>451</fpage>
          {
          <fpage>466</fpage>
          . ACM, Oct.
          <year>2012</year>
          . doi:
          <volume>10</volume>
          :1145/2398857:
          <fpage>2384649</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          <string-name>
            <given-names>H.</given-names>
            <surname>Inoue</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Nakatani</surname>
          </string-name>
          .
          <article-title>How a java vm can get more from a hardware performance monitor</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>137</volume>
          {
          <fpage>154</fpage>
          . ACM,
          <year>2009</year>
          . doi:
          <volume>10</volume>
          :1145/1640089:
          <fpage>1640100</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          <string-name>
            <given-names>G.</given-names>
            <surname>Jin</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Thakur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Liblit</surname>
          </string-name>
          , and
          <string-name>
            <given-names>S.</given-names>
            <surname>Lu</surname>
          </string-name>
          .
          <article-title>Instrumentation and sampling strategies for cooperative concurrency bug isolation</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>241</volume>
          {
          <fpage>255</fpage>
          . ACM,
          <year>2010</year>
          . doi:
          <volume>10</volume>
          :1145/1869459:
          <fpage>1869481</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          <string-name>
            <surname>W. M. Johnston</surname>
            ,
            <given-names>J. R. P.</given-names>
          </string-name>
          <string-name>
            <surname>Hanna</surname>
            , and
            <given-names>R. J.</given-names>
          </string-name>
          <string-name>
            <surname>Millar</surname>
          </string-name>
          .
          <article-title>Advances in data ow programming languages</article-title>
          .
          <source>ACM Comput. Surv.</source>
          ,
          <volume>36</volume>
          (
          <issue>1</issue>
          ):1{
          <fpage>34</fpage>
          ,
          <string-name>
            <surname>Mar</surname>
          </string-name>
          .
          <year>2004</year>
          . doi:
          <volume>10</volume>
          :1145/1013208:
          <fpage>1013209</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          <string-name>
            <given-names>G.</given-names>
            <surname>Kiczales</surname>
          </string-name>
          , J. des Rivieres, and
          <string-name>
            <given-names>D. G.</given-names>
            <surname>Bobrow.</surname>
          </string-name>
          <article-title>The Art of the Metaobject Protocol</article-title>
          . The MIT Press, Cambridge, MA, USA,
          <year>1991</year>
          . ISBN 9780262610742.
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          <string-name>
            <given-names>P.</given-names>
            <surname>Lengauer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Bitto</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Mo</surname>
          </string-name>
          <article-title>ssenbock. Accurate and e cient object tracing for java applications</article-title>
          .
          <source>In Proc. of ICPE</source>
          , pages
          <volume>51</volume>
          {
          <fpage>62</fpage>
          . ACM,
          <year>2015</year>
          . doi:
          <volume>10</volume>
          :1145/2668930:
          <fpage>2688037</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          <string-name>
            <given-names>P.</given-names>
            <surname>Liu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>X.</given-names>
            <surname>Zhang</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Tripp</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Zheng</surname>
          </string-name>
          . Light:
          <article-title>Replay via tightly bounded recording</article-title>
          .
          <source>In Proc. of PLDI</source>
          , pages
          <volume>55</volume>
          {
          <fpage>64</fpage>
          . ACM,
          <year>2015</year>
          . doi:
          <volume>10</volume>
          :1145/2737924:
          <fpage>2738001</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          <string-name>
            <given-names>S.</given-names>
            <surname>Marr</surname>
          </string-name>
          and
          <string-name>
            <surname>T. D'Hondt. Identifying</surname>
          </string-name>
          <article-title>a unifying mechanism for the implementation of concurrency abstractions on multi-language virtual machines</article-title>
          .
          <source>In Proc. of TOOLS</source>
          , volume
          <volume>7304</volume>
          <source>of LNCS</source>
          , pages
          <volume>171</volume>
          {
          <fpage>186</fpage>
          . Springer, May
          <year>2012</year>
          . doi:
          <volume>10</volume>
          :1007/
          <fpage>978</fpage>
          -3-
          <fpage>642</fpage>
          -30561-0
          <fpage>13</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          <string-name>
            <surname>J.</surname>
          </string-name>
          <article-title>McA er</article-title>
          .
          <article-title>Meta-level programming with coda</article-title>
          . In M. Tokoro and R. Pareschi, editors,
          <source>Proc. of ECOOP'95</source>
          , volume
          <volume>952</volume>
          <source>of LNCS</source>
          , pages
          <volume>190</volume>
          {
          <fpage>214</fpage>
          . Springer Berlin Heidelberg,
          <year>1995</year>
          . doi:
          <volume>10</volume>
          :
          <issue>1007</issue>
          /
          <fpage>3</fpage>
          -540-49538-X 10.
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          <string-name>
            <surname>C. E. McDowell</surname>
            and
            <given-names>D. P.</given-names>
          </string-name>
          <string-name>
            <surname>Helmbold</surname>
          </string-name>
          .
          <article-title>Debugging concurrent programs</article-title>
          .
          <source>ACM Comput. Surv.</source>
          ,
          <volume>21</volume>
          (
          <issue>4</issue>
          ):
          <volume>593</volume>
          {
          <fpage>622</fpage>
          ,
          <string-name>
            <surname>Dec</surname>
          </string-name>
          .
          <year>1989</year>
          . doi:
          <volume>10</volume>
          :1145/76894:
          <fpage>76897</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          <string-name>
            <given-names>T.</given-names>
            <surname>Mytkowicz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Coughlin</surname>
          </string-name>
          ,
          <article-title>and</article-title>
          <string-name>
            <given-names>A.</given-names>
            <surname>Diwan</surname>
          </string-name>
          .
          <article-title>Inferred call path pro ling</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>175</volume>
          {
          <fpage>190</fpage>
          . ACM,
          <year>2009</year>
          . doi:
          <volume>10</volume>
          :1145/1640089:
          <fpage>1640102</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          <string-name>
            <given-names>F.</given-names>
            <surname>Pluquet</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Langerman</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R.</given-names>
            <surname>Wuyts</surname>
          </string-name>
          .
          <article-title>Executing code in the past: E cient in-memory object graph versioning</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>391</volume>
          {
          <fpage>408</fpage>
          . ACM,
          <year>2009</year>
          . doi:
          <volume>10</volume>
          :1145/1640089:
          <fpage>1640118</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          <string-name>
            <given-names>G.</given-names>
            <surname>Pothier</surname>
          </string-name>
          , E. Tanter, and
          <string-name>
            <given-names>J.</given-names>
            <surname>Piquer</surname>
          </string-name>
          .
          <article-title>Scalable omniscient debugging</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>535</volume>
          {
          <fpage>552</fpage>
          . ACM,
          <year>2007</year>
          . doi:
          <volume>10</volume>
          :1145/1297027:
          <fpage>1297067</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          <string-name>
            <given-names>H.</given-names>
            <surname>Pr</surname>
          </string-name>
          ahofer,
          <string-name>
            <given-names>R.</given-names>
            <surname>Schatz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Wirth</surname>
          </string-name>
          , and
          <string-name>
            <surname>H.</surname>
          </string-name>
          <article-title>Mossenbock. A comprehensive solution for deterministic replay debugging of softplc applications</article-title>
          .
          <source>Industrial Informatics</source>
          , IEEE Transactions on,
          <volume>7</volume>
          (
          <issue>4</issue>
          ):
          <volume>641</volume>
          {
          <fpage>651</fpage>
          ,
          <string-name>
            <surname>November</surname>
          </string-name>
          <year>2011</year>
          . ISSN 1551-
          <fpage>3203</fpage>
          . doi:
          <volume>10</volume>
          :1109/TII:
          <year>2011</year>
          :
          <fpage>2166768</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          <string-name>
            <given-names>N.</given-names>
            <surname>Shavit</surname>
          </string-name>
          and
          <string-name>
            <given-names>D.</given-names>
            <surname>Touitou</surname>
          </string-name>
          .
          <article-title>Software transactional memory</article-title>
          .
          <source>In Proc. of PODC '95</source>
          , pages
          <fpage>204</fpage>
          {
          <fpage>213</fpage>
          . ACM,
          <year>1995</year>
          . doi:
          <volume>10</volume>
          :1145/224964:
          <fpage>224987</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          <string-name>
            <given-names>J.</given-names>
            <surname>Swalens</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Marr</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. De Koster</surname>
            , and
            <given-names>T. Van</given-names>
          </string-name>
          <string-name>
            <surname>Cutsem</surname>
          </string-name>
          .
          <article-title>Towards composable concurrency abstractions</article-title>
          .
          <source>In Proc. of the PLACES Workshop</source>
          , volume
          <volume>155</volume>
          , pages
          <fpage>54</fpage>
          {
          <fpage>60</fpage>
          ,
          <string-name>
            <surname>April</surname>
          </string-name>
          <year>2014</year>
          . doi:
          <volume>10</volume>
          :4204/EPTCS:155:
          <fpage>8</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          <string-name>
            <given-names>S.</given-names>
            <surname>Tasharo</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Dinges</surname>
          </string-name>
          , and
          <string-name>
            <given-names>R. E.</given-names>
            <surname>Johnson</surname>
          </string-name>
          .
          <article-title>Why do scala developers mix the actor model with other concurrency models? In ECOOP 2013 { Object-Oriented Programming</article-title>
          , volume
          <volume>7920</volume>
          <source>of LNCS</source>
          , pages
          <volume>302</volume>
          {
          <fpage>326</fpage>
          . Springer Berlin Heidelberg,
          <year>2013</year>
          . doi:
          <volume>10</volume>
          :1007/
          <fpage>978</fpage>
          -3-
          <fpage>642</fpage>
          -39038-8
          <fpage>13</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          <string-name>
            <given-names>O.</given-names>
            <surname>Tripp</surname>
          </string-name>
          , G. Yorsh,
          <string-name>
            <given-names>J.</given-names>
            <surname>Field</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Sagiv</surname>
          </string-name>
          . Hawkeye:
          <article-title>E ective discovery of data ow impediments to parallelization</article-title>
          .
          <source>In Proc. of OOPSLA</source>
          , pages
          <volume>207</volume>
          {
          <fpage>224</fpage>
          . ACM,
          <year>2011</year>
          . doi:
          <volume>10</volume>
          :1145/2048066:
          <fpage>2048085</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref33">
        <mixed-citation>
          <string-name>
            <surname>P. Van Roy</surname>
            and
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Haridi. Concepts</surname>
          </string-name>
          ,
          <string-name>
            <surname>Techniques</surname>
          </string-name>
          , and
          <article-title>Models of Computer Programming</article-title>
          . MIT Press, Cambridge, MA, USA, March
          <year>2004</year>
          . ISBN 0262220695.
        </mixed-citation>
      </ref>
      <ref id="ref34">
        <mixed-citation>
          <string-name>
            <given-names>T.</given-names>
            <surname>Wu</surname>
          </string-name>
          rthinger,
          <string-name>
            <given-names>C.</given-names>
            <surname>Wimmer</surname>
          </string-name>
          , A. Wo ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Stadler</surname>
          </string-name>
          , G. Duboscq,
          <string-name>
            <given-names>C.</given-names>
            <surname>Humer</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Richards</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Simon</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Wolczko</surname>
          </string-name>
          .
          <article-title>One VM to Rule Them All</article-title>
          .
          <source>In Proc. of Onward!</source>
          , pages
          <fpage>187</fpage>
          {
          <fpage>204</fpage>
          . ACM,
          <year>2013</year>
          . doi:
          <volume>10</volume>
          :1145/2509578:
          <fpage>2509581</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref35">
        <mixed-citation>
          <string-name>
            <given-names>T.</given-names>
            <surname>Wu</surname>
          </string-name>
          <article-title>rthinger,</article-title>
          <string-name>
            <surname>M. L. Van De Vanter</surname>
            , and
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Simon</surname>
          </string-name>
          <article-title>. Multi-level virtual machine debugging using the java platform debugger architecture</article-title>
          .
          <source>In Perspectives of Systems Informatics</source>
          , volume
          <volume>5947</volume>
          <source>of LNCS</source>
          , pages
          <volume>401</volume>
          {
          <fpage>412</fpage>
          . Springer Berlin Heidelberg,
          <year>2010</year>
          . doi:
          <volume>10</volume>
          :1007/
          <fpage>978</fpage>
          -3-
          <fpage>642</fpage>
          -11486-1
          <fpage>34</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref36">
        <mixed-citation>
          <string-name>
            <given-names>F.</given-names>
            <surname>Zyulkyarov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Harris</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O. S.</given-names>
            <surname>Unsal</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Cristal</surname>
          </string-name>
          , and
          <string-name>
            <given-names>M.</given-names>
            <surname>Valero</surname>
          </string-name>
          .
          <article-title>Debugging programs that use atomic blocks and transactional memory</article-title>
          .
          <source>In Proc. of PPoPP</source>
          , pages
          <volume>57</volume>
          {
          <fpage>66</fpage>
          . ACM,
          <year>2010</year>
          . doi:
          <volume>10</volume>
          :1145/1693453:
          <fpage>1693463</fpage>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>