Bid Code Analysis

Big Code represents hundreds of billions of lines of open source code hosted in GitHub, SourceForge, etc. Big Code analysis is about analyzing billions of source code artifacts and it can be expensive. This project proposes novel techniques to accelerate Big Code analysis.


Panini is a capsule oriented programming language for making concurrent software development easier. The concurrent entities in Panini are called Capsules that communicate via message passing. The Panini’s message passing concurrency is similar to actors. Panini Capsules run on the JVM.
  • Process Graphs: A model for performance analysis of actor-like programs. This work proposes a graph-based model that encodes different concurrent entities and flows between them along with the execution information to expose performance problems due to excessive synchronization and communication overheads [Under submission].
  • Panini Capsules on multicore: For effectively utilizing the multiple cores, capsules needs to be mapped to cores efficiently. Towards this goal, my work proposes a static and modular technique to effectively map capsules to JVM threads. The key idea is that, often the local computation and communication behaviors of the message passing concurrent entities expose the globally beneficial mapping.
  • Automatic Garbage Collection of Capsules: The garbage collection of concurrent entities in the message passing concurrency is difficult. However in Panini, due to its static topology model, the complexity of garbage collection is reduced. I have implemented a static reference counting algorithm for automatic garbage collection of capsules in Panini. To deal with cyclic reference, I identify the capsule in the set of capsules that are part of the cycle, which has message handler with cycle breaking nature and forcibly initiate garbage collection at that message handler [Panini Github]
  • Duck Futures in Panini: We have implemented a generative approach for automatically handling futures in Panini. Panini capsules use duck futures to sending values and also for receiving results. The key idea is that duck futures is an efficient way of implementing transparent futures.
    • Eric Lin, Ganesha Upadhyaya, Sean L. Mooney, and Hridesh Rajan, Duck Futures: A Generative Approach to Transparent Futures, TR15-05, Computer Science, Iowa State University, June 2015 [TR]
  • Study of ordering problems in Panini: As part of this work, we analyzed the ordering problems that occur due to nondeterminism and relate them to the properties of the message passing concurrency model. Ordering problems leads to data races and deadlocks. Knowing the relationship between the ordering problems and the model properties such as messaging semantics (synchronous/asynchronous), message passing/processing semantics (such as FIFO) and data sharing semantics can help to reduce the testing efforts in the message passing concurrency model like Panini.
    • Yuheng Long, Mehdi Bagherzadeh, Eric Lin, Ganesha Upadhyaya and Hridesh Rajan On Ordering Problems in Message Passing Software, Modularity'16 [acm]
  • Hridesh Rajan, Steven M. Kautz, Eric Lin, Sean L. Mooney, Yuheng Long, and Ganesha Upadhyaya Capsule-oriented Programming in the Panini Language, Technical Report TR14-08, Computer Science, Iowa State University [TR].


Candoia platform and ecosystem addresses the challenge of transitioning MSR research to practice by presenting a novel approach where researchers and practitioners realize their prototypes as apps and Candoia platform (acting as an appstore) handles the details of integration with different VCS, bug databases, language parsers, visualizations, etc. This not only eases the process of building MSR research prototypes by eliminating the need to build the supporting tools, it also makes the prototypes easily accessible and applicable across different MSR project environments. Using Candoia, researchers prototype their research as Candoia apps and publish them. Other researchers and practitioners can browse through available apps, download them and if necessary customize them for their own needs.


I have worked on building the Candoia platform, specifically defining data scheme and allowing integration of different VCS and bug databases. I have also worked on building Candoia apps for variety of mining software repository tasks and contributed towards different technical writings of Candoia. For more information
  • Nitin M Tiwari, Ganesha Upadhyaya and Hridesh Rajan Candoia: A Platform and an Ecosystem for Building and Deploying Mining Software Repository Tools, ICSE'16 Poster [acm]
  • Nitin M Tiwari, Dalton D. Mills, Ganesha Upadhyaya, Eric Lin and Hridesh Rajan Candoia: A Platform and an Ecosystem for Building and Deploying Versatile Mining Software Repositories Tools, Technical Report TR15-13, Computer Science, Iowa State University [TR].


A Static Profiler to Help Parallelization. Parallelizing a sequential software requires first identifying parts that have potential in terms of computational requirements and then analyzing the dependencies. Often, static parallelization techniques directly perform dependency analyses on the whole software, which makes them complex and conservative. We propose a technique to statically identify parts that have potential and show that parallelism opportunities can be found with less dependency analyses efforts. We have shown that static hot paths may miss parallelism opportunities, hence we propose average case execution paths (ACEPs). For more information refer to parascan-webpage.
  • Ganesha Upadhyaya, Tyler Sondag, and Hridesh Rajan, ParaSCAN: A Static Profiler to Help Parallelization, TR14- 06, Computer Science, Iowa State University, June 2014 [TR][Web].