Publications

Cloud Computing Curriculum: Developing Exemplar Modules for General Course Inclusion (Report)

The accelerating evolution and adoption of cloud computing services is generating increased demand for job skills in this domain. To address this growth, higher education has identified the importance of cloud computing courses that deliver practical and hands-on material relevant to this rapidly evolving field. This is especially relevant as cloud services are quickly becoming the standard computing model for many new computational approaches, including advanced subjects such as machine learning and data science. Since cloud computing influences a number of other traditional computing subjects such as networking and data storage, the ability to incorporate specific components of cloud computing teaching content into a variety of courses has also become important. However, a lack of availability of high-quality teaching material that is easy to integrate, when teaching rapidly evolving cloud-related concepts, continues to be a challenge for instructors. As the volume of teaching material that educators and other providers are willing to share increases, it is important that the content is easily discoverable and accurately catalogued. Using appropriate Learning Objectives (LOs) and tags associated with the correct course material contributes toward a reliable and trustworthy source for faculty. This Working Group (WG) has addressed these challenges by 1) creating a canonical list of LOs, based on the LOs included in the Knowledge Areas (KAs) developed by the ITiCSE working groups in 2018 and 2019; 2) searching for existing teaching material, cataloging the material by LO and then combining the LOs into exemplar modules for some of the more common classes that adopt cloud computing; 3) creating sample syllabi for these exemplars following the ACM Computer Science Curricula 2013 approach; and 4) developing a solution for disseminating the materials and keeping them up to date.

Meta-Language Support for Type-Safe Access to External Resources

Meta-programming applications often require access to heterogeneous sources of information, often from different technological spaces (grammars, models, ontologies, databases), that have specialized ways of defining their respective data schemas. Without direct language support, obtaining typed access to this external, potentially changing, information is a tedious and error-prone engineering task. The Rascal meta-programming language aims to support the import and manipulation of all of these kinds of data in a type- safe manner. The goal is to lower the engineering effort to build new meta programs that combine information about software in unforeseen ways. In this paper we describe built-in language support, so called resources, for incorporating external sources of data and their corresponding data-types while maintaining type safety. We demonstrate the applicability of Rascal resources by example, showing resources for RSF files, CSV files, JDBC- accessible SQL databases, and SDF2 grammars. For RSF and CSV files this requires a type inference step, allowing the data in the files to be loaded in a type-safe manner without requiring the type to be declared in advance. For SQL and SDF2 a direct translation from their respective schema languages into Rascal is instead constructed, providing a faithful translation of the declared types or sorts into equivalent types in the Rascal type system. An overview of related work and a discussion conclude the paper.

A One-Stop-Shop for Software Evolution Tool Construction
A Modular Rewriting Approach to Language Design, Evolution and Analysis

Software is becoming a pervasive presence in our lives, powering computing systems in the home, in businesses, and in safety-critical settings. In response, languages are being defined with support for new domains and complex computational abstractions. The need for formal techniques to help better understand the languages we use, correctly design new language abstractions, and reason about the behavior and correctness of programs is now more urgent then ever.

In this dissertation we focus on research in programming language semantics and program analysis, aimed at building and reasoning about programming languages and applications. In language semantics, we first show how to use formal techniques during language design, presenting definitional techniques for object-oriented languages with concurrency features, including the Beta language and a paradigmatic language called KOOL. Since reuse is important, we then present a module system for K, a formalism for language definition that takes advantage of the strengths of rewriting logic and term rewriting techniques. Although currently specific to K, parts of this module system are also aimed at other formalisms, with the goal of providing a reuse mechanism for different forms of modular semantics in the future. Finally, since performance is also important, we show techniques for improving the executable and analysis performance of rewriting logic semantics definitions, specifically focused on decisions around the representation of program values and configurations used in semantics definitions.

The work on performance, with a discussion of analysis performance, provides a good bridge to the second major topic, program analysis. We present a new technique aimed at annotation-driven static analysis called policy frameworks. A policy framework consists of analysis domains, an analysis generic front-end, an analysis-generic abstract language semantics, and an abstract analysis semantics that defines the semantics of the domain and the annotation language. After illustrating the technique using SILF, a simple imperative language, we then describe a policy framework for C. To provide a real example of using this framework, we have defined a units of measurement policy for C. This policy allows both type and code annotations to be added to standard C programs, which are then used to generate modular analysis tasks checked using the CPF semantics in Maude.