#+OPTIONS: H:8
#+AUTHOR: Aviral Goel

#+NAME:   fig:aviral
#+ATTR_HTML:  :style width:200px; border-radius: 50%; float:center; margin-left: auto; margin-right: auto; display: block;
./static/images/aviral.jpg

@@html:<div class="name-title">Aviral Goel</div>@@
#+begin_social
@@html:<i class="fas fa-envelope"></i>@@
@@html:<i class="ai ai-cv ai-lg"></i>@@
@@html:<i class="fab fa-github"></i>@@
@@html:<i class="ai ai-orcid"></i>@@
@@html:<i class="ai ai-dblp ai-lg"></i>@@
@@html:<i class="ai ai-google-scholar ai-lg"></i>@@
@@html:<i class="fab fa-linkedin"></i>@@
#+end_social

I am a Computer Science Ph.D. student at
Northeastern University. I am a member of the
Programming Research Laboratory, advised by
Professor Jan Vitek. I received a Bachelors degree in
Electronics and Communication Engineering from Netaji
Subhas Institute of Technology.

Previously, I interned at
Oracle
Labs, Austria, and worked at National Center for
Biological Sciences, and Yahoo!.

* Research

Broadly, my research involves two direction. First, I am interested in applying
programming language techniques to *improve data science tools*. Second, I am
interested in developing mechanisms for *data-driven evolution* of
mainstream programming languages. To explore these directions, I employ
empirical evaluations, dynamic, and static analyses.

I am working primarily on the migration of R from lazy-by-default to
lazy-on-demand semantics. The interaction of R's laziness with missing
arguments, side-effects, metaprogramming and reflective operations introduces
challenges for users, developers, and language implementors. I am trying to
develop tools and algorithms to switch R's semantics with minimal impact to
legacy code. To test the correctness and robustness of my approach, I am
leveraging millions of lines of code available from R's official package
repositories, CRAN and Bioconductor.

I am also involved in other projects related to R. For example, I am helping
retrofit a type system to R motivated by empirical insights from existing R
code.

* Publications 

@@html:<div class="publications">@@

- *=OOPSLA'20=* :: *Designing Types for R, Empirically* \\
   Alexi Turcotte , _Aviral Goel_ , Filip Křikava , Jan Vitek
   @@html:<div class='info'>@@
   ⸢doi:10.1145/3428249⸥ \nbsp\nbsp
   ⸢paper⸥ \nbsp\nbsp
   ⸢software⸥ \nbsp\nbsp
   ⸢talk⸥
   @@html:</ div>@@

-----

- *=OOPSLA'19=* :: *On the Design, Implementation, and Use of Laziness in R* \\
   _Aviral Goel_ , Jan Vitek
   @@html:<div class='info'>@@
   ⸢doi:10.1145/3360579⸥ \nbsp\nbsp
   ⸢paper⸥ \nbsp\nbsp
   ⸢software⸥ \nbsp\nbsp
   ⸢talk⸥ \nbsp\nbsp
   @@html:</ div>@@

-----

- *=POPL'18=* :: *Correctness of Speculative Optimizations with Dynamic Deoptimization* \\
   Olivier Flückiger , Gabriel Scherer , Ming-ho Yee , _Aviral Goel_ , Amal Ahmed , Jan Vitek
   @@html:<div class='info'>@@
   ⸢doi:10.1145/3158137⸥ \nbsp\nbsp
   ⸢paper⸥ \nbsp\nbsp
   @@html:</ div>@@

@@html:</div>@@

* Softwares

** Frameworks

@@html:<div class="softwares">@@

- =R-dyntrace= :: A modified R VM
  that provides an event framework for program execution. This forms the base of
  all our dynamic analyses and empirical evaluations of R. It supports over
  forty events related to function calls, side-effects, garbage collection,
  attributes, promises, environments, eval, metaprogramming, and dynamic
  dispatch.

-----

- =instrumentr= :: An R package that
  complements R-dyntrace by modeling all R objects and the R session for tracing
  and empirical evaluations. =instrumentr= is a culmination of years of
  experience writing tracers and provides a rich API to facilitate many complex
  analyses used in our research papers. It accumulates a lot of metadata about R
  objects and provides wrapper APIs to extract fine-grained information used in
  dynamic analyses for object tainting and event tracking.

-----

- =experimentr= :: An R package for
  large-scale program analysis experiments related to R. First, it provides
  utility functions for ranking R packages based on dependencies, extracting
  runnable programs, counting lines of code, and other routine tasks. Second, it
  exposes a DSL to express complex analysis pipelines as a graph of =step=
  abstractions with a facility to invoke the steps from command-line or a
  web-app based interface.

-----

- =dockr= :: A Docker image providing a
  comprehensive environment for R and C/C++ development, large-scale program
  analysis experiments, and setting up corpus of R programs. It provides
  standard development tools such as emacs, gdb, valgrind, and, perf, includes
  all the dependencies needed to build our in-house dynamic and static analysis
  softwares, and contains enough native dependencies to install most of the
  CRAN and
  Bioconductor repositories ( ~20,000 R packages
  with ~450,000 programs).

@@html:</div>@@

** Applications

@@html:<div class="softwares">@@

- =envtracer= :: A dynamic analyzer for
  tracking first-class environments and reflective frame access in R. We are
  using this to understand how R developers take advantage of the first-class
  nature of environments and function scopes.

-----

- =strictr= :: An R package that alters
  R semantics by eagerly evaluating function arguments based on strictness
  specifications. We are using this to study the impact of switching R's
  semantics from lazy-by-default to lazy-on-demand.

-----

- =lazr= :: A dynamic analyzer for profiling laziness in R applications and
  synthesizing strictness signatures. We are using this in conjunction with
  =strictr= to propose a semi-automated laziness removal technique.

-----

- =evil= :: A dynamic analyzer for
  analyzing the use of =eval= family of functions in R. We are using this to
  better understand how dynamic evaluation is employed by R package authors and
  how their usage patterns are different from those of Javascript developers.

-----

- =contractr= :: An R package that
  inserts function argument and return type contracts and monitors failures. We
  used this to evaluate the design of type signatures for R for 8.7K R packages
  with 98M assertions.

-----

- =tastr= :: A C++ library implementing a
  grammar of type signatures for R. It provides APIs to parse type signatures
  from input streams into C++ objects. This was used by =contractr= to generate
  type contracts for 22K R functions from 412 packages.

-----

- =promisedyntracer= :: A
  dynamic analysis tool to analyze use of laziness in R, specifically,
  evaluation of promises, side-effects, metaprogramming, and argument evaluation
  orders. It was used to study laziness in 230K R programs from 16,707 R
  packages. The tool generated 5.2 TB of execution traces from 271B promises
  (thunks).

@@html:</div>@@