The tutorial program enhances the technical program by providing a day of half-day tutorials offered in parallel tracks.
In 2013, tutorials will be held on Sunday June 16, 2013 (the day before the main conference). We expect half-day tutorials (3 hours plus a break).
The aim of this tutorial is to equip attendees with the knowledge and tools to develop high-performance DSLs and code generators. Lightweight Modular Staging (LMS) is a pragmatic approach to runtime code generation in Scala, and Delite is a compiler framework for embedded DSLs that simplifies the process of implementing DSLs for parallel computation and heterogeneous targets. This tutorial provides an overview of the technology stack, demonstrates use-cases where it has been successfully applied and guides the attendees step-by-step through creation of simple generators and DSLs.
Today, many of the applications that we use execute in the context of a web browser. These applications have been written using JavaScript and HTML, technologies that were originally designed roughly 20 years ago for a more static web. As web applications have become larger and more complex, these technologies have become a limiting factor in their continued evolution.
In this tutorial, we present the open source Dart project: an effort to address these concerns by offering a more suitable language and a richer, more extensible framework that runs on all modern browsers. First, we will explain the motivations and design decisions behind Dart by reviewing the existing web stack. We will give an overview of the Dart programming language and its optional type system. We will discuss how, along with a new language, we provide a cleaner and simpler HTML API that addresses some of the shortcomings of the existing JavaScript one. Second, we will discuss the challenges of implementing Dart in modern browsers. We will describe our efforts to compile Dart programs and APIs to efficient and compact JavaScript that runs well existing browsers and explain the inherent challenges of targeting JavaScript in general. We will also discuss our efforts to integrate a native Dart runtime into an experimental version of Google Chrome, and examine the benefits and challenges of this approach. Third, we present Dart Web UI, a higher level framework to provide greater extensibility, encapsulation, composition, and declarative data binding via a combination of language, compiler, and runtime mechanisms. Finally, we will give an overview of the Dart code base and resources. Dart development is open source, and all code is available with a liberal license. We will discuss how researchers, implementers, and developers can experiment with and contribute to Dart.
We are experiencing a technology shift: Powerful and easy-to-use mobile devices like smartphones and tablets are becoming more prevalent than traditional PCs and laptops. TouchDevelop is a novel programming environment and language that makes it possible to write applications directly on mobile devices, taking full advantage of touchscreens, and without the need for a separate PC.
TouchDevelop is freely available as a web app on PC, Mac, iOS, Android, and as a native app on Windows Phone. Since the first release in April 2011, TouchDevelop for Windows Phone has been downloaded more than 260,000 times, and over 70,000 registered users have published 20,000 scripts. All artefacts created by TouchDevelop users are publicly available for research purposes via REST-based APIs, enabling external researchers to analyze the massive number of mobile applications developed with TouchDevelop. TouchDevelop can be used in the classroom to teach programming concepts, and TouchDevelop is also ideal for classes on Mobile Computing, as it cuts the time required to write apps.
In this tutorial, participants will learn about developing software directly on their mobile devices. TouchDevelop comes with typed, structured programming language that built around the idea of only using a touchscreen as the input device to author code. Sensors such as accelerometer and GPS are available as a first-class citizens in the programming language. The programming model is based on the mostly-connected nature of mobile devices, with seamless transitions between online and offline modes.
We will present the JavaScript program analysis functionality available in the T.J. Watson Libraries for Analysis (WALA). As JavaScript becomes more pervasive, both in sophisticated client-side Web applications and on the server, JavaScript program analysis becomes increasingly important. It also poses particular challenges, as the dynamic nature of JavaScript is exacerbated by rich frameworks that make heavy use of JavaScript's dynamic features to engage in metaprogramming.
We have been using WALA as a basis to explore a variety of approaches to analyze client-side Web code; we will discuss those results and focus primarily on describing the infrastructure in WALA that we have developed in the course of this work. We shall summarize the basic capabilities of WALA, and we will focus on the following aspects of support for JavaScript: the HTML front end that creates analyzable programs from Web pages, the WALA IR features that we use to represent JavaScript, and support for code specialization and targeted analysis to cope with dynamic metaprogramming. We shall cover these topics at a detailed level and present our experiences using WALA in our own research.
Modern networks provide a wide variety of services including routing, load-balancing, traffic monitoring, authentication, and access control. These services are logically distinct, but they must be implemented on top of low-level networking hardware, which offers no support for modular programming. Network programs are thus written in a monolithic style, which complicates programs, makes reasoning difficult, and frequently leads to failures.
In recent years, several research groups have applied ideas from programming languages and formal methods to help make network programs safer and easier to write. The catalyst has been the emergence of software defined networking (SDN) and OpenFlow as a simple and open platform for developing network applications.
This tutorial will provide an introduction to languages and abstractions for programming networks, focusing both on the low-level OpenFlow protocol and the high-level Frenetic language. Participants will spend most of the tutorial engaged in programming exercises. We will assume proficiency with basic functional programming in OCaml and some familiarity with undergraduate-level networking concepts. The tutorial will cover all other background material.