These abstracts are for talks at this event.

NEPLS is a venue for ongoing research, so the abstract and supplemental material associated with each talk is necessarily temporal. The work presented here may be in a state of flux. In all cases, please consult the authors' Web pages for up-to-date information. Please don't refer to these pages as a definitive source.


Languages and tools for supporting programmers at design time

Rustan Leino (Microsoft Research)

A programming language is a programmer's primary way to express
software implementations. Mainstream languages today are geared toward
providing the compiler with information that makes its job of emitting
executable code easy. Sometimes, additional information can be useful,
if not to the compiler, to the programmer and to other tools. In this
talk, I will convey a vision for what programming can be like in a
future where language features are geared more toward expressing
designs correctly, where efficiency concerns are addressed separately,
and where tools do more deep semantic analysis while the program is
being developed. During the talk, I will illustrate some of the vision
by demoing tool-supported language features for specifying the intent
of a program (verification), staging the conceptual development of a
program (refinement), and automatically generating code from
data-structure invariants (synthesis).


Programming with People: Integrating Human-Based and Digital Computation

Emery Berger (University of Massachusetts Amherst)

Humans can perform many tasks with ease that remain difficult or
impossible for computers. Crowdsourcing platforms like Amazon's
Mechanical Turk make it possible to harness human-based computational
power on an unprecedented scale. However, their utility as a
general-purpose computational platform remains limited. The lack of
complete automation makes it difficult to orchestrate complex or
interrelated tasks. Scheduling human workers to reduce latency costs
real money, and jobs must be monitored and rescheduled when workers
fail to complete their tasks. Furthermore, it is often difficult to
predict the length of time and payment that should be budgeted for a
given task. Finally, the results of human-based computations are not
necessarily reliable, both because human skills and accuracy vary
widely, and because workers have a financial incentive to minimize
their effort.

This talk presents AutoMan, the first fully automatic crowdprogramming
system. AutoMan integrates human-based computations into a standard
programming language as ordinary function calls, which can be
intermixed freely with traditional functions. This abstraction allows
AutoMan programmers to focus on their programming logic. An AutoMan
program specifies a confidence level for the overall computation and a
budget. The AutoMan runtime system then transparently manages all
details necessary for scheduling, pricing, and quality control.
AutoMan automatically schedules human tasks for each computation until
it achieves the desired confidence level; monitors, reprices, and
restarts human tasks as necessary; and maximizes parallelism across
human workers while staying under budget.

Joint work with Dan Barowy, Charlie Curtsinger, and Andrew McGregor (UMass Amherst). AutoMan and an associated technical report (in submission) are available for download at Web.


A Framework for Verifying Low-level Programs

Gregory Malecha (Harvard University), Adam Chlipala, Patrick Hulin, and Edward Yang (MIT)

High level languages provide abstractions that assist programmers;
however these abstractions are not always sufficient and, in some
cases, they get in the way of writing efficient or functioning correct
code. In this work we develop Bedrock2, a Coq framework for
foundational reasoning about low-level programs using a program logic
based on Ni and Shao's. Bedrock2 is an extension and rewrite of
Chlipala's Bedrock language.

Bedrock2 allows programmers to define both control and data
abstractions and integrate them into the system in a first-class
way. Control abstractions, e.g. conditionals and function calls, are
defined by providing a denotation into the core language and derived
inference rules are verified in a foundational way with respect to the
core language semantics. These inference rules are used by the
verification condition generator simplify the proof obligations
provided to the programmer. Verification conditions are expressed as
pre- and post-conditions on execution traces allowing the bulk of the
work to be done by symbolic evaluation. Unlike Bedrock, the Bedrock2
symbolic evaluator incorporates user-defined abstract predicates to
enable efficient manipulation of arrays, structures, stack frames, and
other data abstractions. Final verification conditions are discharged
using a cancellation-based separation logic prover. Proofs are
generated using computational reflection to enable good performance
that, experiences suggest, will scale to larger programs than previous
work. Bedrock2 embraces a more realistic machine model that exposes
machine word sizes, byte ordering, and finite memory. We are working
to extend the language to more interesting abstractions, real assembly
languages, and concurrency.


Precise Enforcement of Progress-Sensitive Security

Scott Moore, Aslan Askarov, and Stephen Chong (Harvard University)

Program progress (or termination) is a covert channel that may leak
sensitive information. To control information leakage on this channel,
semantic definitions of security should be _progress sensitive_ and
enforcement mechanisms should restrict the channel's
capacity. However, state-of-the-art language-based information-flow
mechanisms are progress insensitive -- allowing arbitrary information
leakage through this channel -- and current progresssensitive
enforcement techniques are overly restrictive.

We propose a type system and instrumented semantics that together
precisely enforce progress-sensitive security. Our system is
permissive in that it is able to accept programs in which the
termination behavior depends only on low-security information (and are
thus secure). We extend the system to permit controlled leakage
through the progress channel, with the leakage bound by an explicit
budget.


Reagents: expressing and composing fine-grained concurrency

Aaron Turon (Northeastern University)

Achieving parallelism is all about eliminating communication costs.
The past two decades have produced a sizable collection of algorithms
for low-cost, fine-grained communication; they lie at the the heart of
industrialstrength libraries like java.util.concurrent.  But while
concurrency libraries are indispensable, they are an enormous
undertaking, and they generally provide a set of primitives that users
cannot easily extend or compose.

In this talk, I will present an approach to building concurrency
libraries based on reagents, a new abstraction for finegrained
communication.  With reagents, algorithms no longer need to be
constructed from "whole cloth" by using system-level primitives
directly. Instead, they can be built incrementally, by composing
abstract primitives. Common patterns can be baked into the primitives
or captured in new abstractions built from them.  Library writers
benefit, because they can express algorithms at a higher level, with
more reuse, *without* sacrificing scalability. Library users benefit,
because composition empowers them to extend and tailor the library
without knowing the details of its underlying algorithms.


ParaSail: A Simplified Approach to Parallel Programming

S. Tucker Taft (AdaCore)

ParaSail (for "Parallel Specification and Implementation Language") is
a language that marries a pervasively parallel computation model with
formal methods. ParaSail achieves most of its power by *removing*
features from the language that act as impediments to parallelization
and formal analysis.  Nevertheless, the language remains very
flexible, and preserves a familiar syntax and generic/objectoriented
programming model similar to that of Java, C#, and C++, using
(generic) interfaces and classes.


Problems of First-Class Functions over Space-Time

Jacob Beal (BBN Technologies)

Aggregate-level abstractions are a useful tool for programming
distributed systems: with an appropriate choice of abstractions, many
of the details of networking, fault recovery, and dynamic scaling can
be made implicit.  The necessity of being able to simultaneously view
a system in terms of aggregate computations and the local computations
that implement them, however, leads to problems in the definition of
distributed function calls, since a distributed function-call may
originate in many locations simultaneously.

I will discuss these problems in the context of Proto, a LISP-like
space-time programming language that abstracts a network of devices as
an approximation of a continuous manifold.  In particular, I will
discuss progress on the following challenges that must be overcome in
order to have first-class functions over aggregates: recursion,
higher-order functions, closures, runtime function definition, and
function equality.


Modeling and Reasoning about DOM Events

Benjamin S. Lerner, Matthew J. Carroll, Dan P. Kimmel, Hannah Quay-de la Vallee and Shriram Krishnamurthi (Brown University)

Web applications are fundamentally reactive. Code in a web page runs
in reaction to events, which are triggered either by external stimuli
or by other events. The DOM, which specifies these behaviors, is
therefore central to the behavior of web applications. We define the
first formal model of event behavior in the DOM, with high fidelity to
the DOM specification. Our model is concise and executable, and can
therefore be used for testing and verification. We have applied it in
several settings: to establish some intended metaproperties of the
DOM, as an oracle for testing the behavior of browsers (where it found
real errors), to demonstrate unwanted interactions between extensions
and validate corrections to them, and to examine the impact of a web
sandbox. The model composes easily with models of other web
components, as a step toward full formal modeling of the web.

The semantics and related materials can be found on the Web.


Blocks Languages for Creating Tangible Artifacts

Franklyn Turbak (Wellesley College)

Logo turtles and Peter Henderson's picture language have long been
used to teach computational thinking in contexts where learners are
inspired to construct programs that create complex geometric
designs. We have developed TurtleBlocks and PictureBlocks, visual
blocks-based versions of these languages whose outputs are tangible
artifacts produced by laser and vinyl cutters. Our languages embody
two novel features. First, they use constructive area geometry to
convert the geometric designs generated by our programs into formats
suitable for laser and vinyl cutters. Second, they leverage static
typing and polymorphism to handle variable references more sensibly
than in other blocks languages.

This talk describes work done with Wellesley College undergraduate students Karishma Chadha, Erin Davis, Emily Erdman, Olivia Kotsopoulos, Johanna Okerlund, and Smaranda Sandu.


Representing Expressive Types in Blocks Programming Languages

Marie Vasek (Wellesley College)

In blocks programming languages, such as Scratch and App Inventor,
programs are created by connecting visual program fragments shaped
like jigsaw puzzle pieces. The shapes of these blocks help novices
avoid frustrating syntax errors commonly encountered in textual
programming languages by strongly suggesting how expressions and
statements are composed to form programs. The shapes of the block
connectors can be used to indicate type, but they currently handle
only base types and do so in an ad hoc and confusing fashion.

The goal of this project is to create a blocks version of a language
similar to ML. Towards this goal, I developed TypeBlocks, which
extends the blocks framework ScriptBlocks with arbitrary compositions
of list, tuple, and function type constructors represented by unique
connector shapes. TypeBlocks also can express polymorphism via special
connectors that change shape according to the context in which they
are used. This project aims to help programmers better understand the
types used in functional programming languages.


Last modified Sunday, May 6th, 2012 3:27:11am