# Research Themes @CompL

CompL is open to motivated associates (in form of PhD/MS scholars, BTech students, interns, and visitors alike), who would like to experience the beauty of solving seemingly hard but interesting problems, sincerely. Some of the themes around which we are currently working are listed below:

1. Improving Just-In-Time (JIT) Compilation

Programs written in modern languages such as Java and C# are translated in two stages: first from the source to a usually platform independent intermediate representation using a static compiler, and then to native code using a JIT compiler. The time spent during JIT compilation is critical, and is better spent analyzing programs based on wise decisions concerning the profitability of the enabled optimizations. In this space, we have been working on balancing the trade-offs between the /precision/ and the /efficiency/ of JIT analyses performed in OpenJDK HotSpot JVM and Eclipse OpenJ9 for Java (in collaboration with IBM Canada and IIT Madras), and more recently for R (in collaboration with ReactorLabs, Prague).

2. Scaling Precise Static Analyses

The precision of program analysis varies across several dimensions: field-sensitivity, flow-sensitivity, context-sensitivity, and so on. As the size of the program being analyzed increases, the scalability of precise program analyses becomes a challenge, and finding the balance therein has been a long-studied research problem. We have been working towards coming up with novel abstractions, specially for context-sensitive analyses, with a goal to represent only what is needed, and to compute only what will be useful. A promising idea here has been that of /staging/, which means spreading program analyses across multiple passes, and sometimes using the initial passes to gather insights for scaling the rest of the passes. Again, though most interesting for Java and C++, any language that involves dynamically allocated memory (heap) is a potentially suitable candidate.

3. Programmability and Concurrency

Writing programs is an art, with different nuances based on the underlying language and the paradigm of programming. In the modern PL ecosystem comprising of integrated development environments (IDEs), code checkers, linting tools etc., the onus of /producing/ beautiful and efficient programs shifts more on the involved tools rather than the programmer. Analyzing programs to find interesting patterns, such that they can be refactored to follow certain design principles or best practices, is something that finds immediate applicability. We are working towards developing effective program analysis based tools for OO, functional, and even hybrid languages (such as Java, Haskell, Scala, etc.) that either enhance programmability or make the program amenable to concurrency.

For a complete list of our publications across these themes (and more), please refer this page. In case you have questions or ideas, feel free to ping us over email.