DiSL is a domain-specific language and framework for Java bytecode instrumentation developed in cooperation between University of Lugano, Charles University in Prague and Shanghai Jiao Tong University.

DiSL is inspired by AOP, but in contrast to mainstream AOP languages, it features an open join point model where any region of bytecodes can be selected as a join point (i.e., code location to be instrumented). DiSL reconciles high-level language constructs resulting in concise instrumentations, high expressiveness, and efficiency of the inserted instrumentation code. Thanks to the pointcut/advice model adopted by DiSL, instrumentations are similarly compact as aspects written in AspectJ. However, in contrast to AspectJ, DiSL does not restrict the code locations that can be instrumented, and the code generated by DiSL avoids expensive operations (such as object allocations that are not visible to the programmer). Furthermore, DiSL supports instrumentations with complete bytecode coverage out-of-the-box and avoids structural modifications of classes that would be visible through reflection and could break the instrumented code.


  • Unix
  • Java 6 or later
  • Ant 1.8
  • GCC 4.8
  • make 3.82




  • Lukáš Marek
  • Yudi Zheng
  • Walter Binder
  • Lubomír Bulej
  • František Haas
  • Danilo Ansaloni
  • Aibek Sarimbekov
  • Alex Villazon


  • Lubomír Bulej, lubomir.bulej(at)d3s.mff.cuni.cz
    Charles University, Faculty of Mathematics and Physics, Department of Distributed and Dependable Systems
    Malostranské náměstí 25, 118 00 Praha 1, Malá Strana, Czech Republic




Apache License, Version 2.0


Related publications and projects

  • Lukáš Marek, Alex Villazón, Yudi Zheng, Danilo Ansaloni, Walter Binder, and Zhengwei Qi, DiSL: a domain-specific language for bytecode instrumentation, in: Proceedings of the 11th annual international conference on Aspect-oriented Software Development (AOSD '12), Potsdam, Germany, pages 239-250, ACM, New York, NY, USA, 2012.
  • Yudi Zheng, Danilo Ansaloni, Lukas Marek, Andreas Sewe, Walter Binder, Alex Villazón, Petr Tůma, Zhengwei Qi, and Mira Mezini, Turbo DiSL: Partial Evaluation for High-Level Bytecode Instrumentation, in: Proceedings of the 50th International Conference on Objects, Models, Components, Patterns (TOOLS 2012), Prague, Czech Republic, pages 353-368, Springer, 2012.
  • Lukáš Marek, Stephen Kell, Yudi Zheng, Lubomír Bulej, Walter Binder, Petr Tůma, Danilo Ansaloni, Aibek Sarimbekov, and Andreas Sewe, ShadowVM: Robust and Comprehensive Dynamic Program Analysis for the Java Platform, in: Proceedings of the 12th International Conference on Generative Programming: Concepts & Experiences (GPCE'13), Indianapolis, IN, USA, pages 105-114, ACM, 2013.