Don Syme

dblp:22/2801 · also Donald Robert Syme · DBLP profile ↗
← Back
15ranked-venue papers
4as first author
0since 2021 · last 2020
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 11 · 3 first-authorSystems, architecture and hardware · 2Artificial intelligence and machine learning · 1 · 1 first-authorHuman-computer interaction and ubiquitous computing · 1Theory of computation · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
4 papers
Programming languages and type systems · 78% Compilers and program optimization · 14% Runtime systems and virtual machines · 7%
Interdisciplinary, comprehensive, and emerging computing
1 paper
Computing education · 100%
Human-computer interaction and pervasive computing
1 paper
User interface design and tools · 100%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Electronic design automation · 100%
Artificial intelligence
1 paper
Probabilistic and Bayesian machine learning · 100%
Databases, data mining, and information retrieval
1 paper
Data integration and cleaning · 100%

Topics — the 16 heaviest of 19, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Computing education
programming education
0.212016
A Live, Multiple-Representation Probabilistic Programming Environment for Novices · CHI 2016
User interface design and tools
programming environments
0.212016
A Live, Multiple-Representation Probabilistic Programming Environment for Novices · CHI 2016
Programming languages and type systems › type systems › polymorphism
generics
0.122004
Formalization of generics for the .NET common language runtime · POPL 2004
Design and Implementation of Generics for the .NET Common Language Runtime · PLDI 2001
Machine learning › Probabilistic and Bayesian machine learning
probabilistic programming
0.112016
A Live, Multiple-Representation Probabilistic Programming Environment for Novices · CHI 2016
Compilers and program optimization › intermediate representation
intermediate language
0.122001
Typing a multi-language intermediate code · POPL 2001
Design and Implementation of Generics for the .NET Common Language Runtime · PLDI 2001
Electronic design automation › hardware verification and test
formal verification
0.112005
An industrially effective environment for formal hardware verification · IEEE Trans. Comput. Aided Des. Integr. Circuits Syst. 2005
Electronic design automation › hardware verification and test
hardware verification
0.112005
An industrially effective environment for formal hardware verification · IEEE Trans. Comput. Aided Des. Integr. Circuits Syst. 2005
Electronic design automation › hardware verification and test › formal verification
symbolic trajectory evaluation
0.112005
An industrially effective environment for formal hardware verification · IEEE Trans. Comput. Aided Des. Integr. Circuits Syst. 2005
Programming languages and type systems
type theory
0.012004
Formalization of generics for the .NET common language runtime · POPL 2004
Compilers and program optimization
intermediate representation
0.012001
Typing a multi-language intermediate code · POPL 2001
Programming languages and type systems › type systems › polymorphism
parametric polymorphism
0.012001
Design and Implementation of Generics for the .NET Common Language Runtime · PLDI 2001
Programming languages and type systems › language implementation
typed intermediate language
0.012001
Typing a multi-language intermediate code · POPL 2001
Programming languages and type systems › type systems
type soundness
0.012001
Typing a multi-language intermediate code · POPL 2001
Programming languages and type systems
type systems
0.012001
Typing a multi-language intermediate code · POPL 2001
Electronic design automation › hardware verification and test › formal verification
theorem proving
0.012005
An industrially effective environment for formal hardware verification · IEEE Trans. Comput. Aided Des. Integr. Circuits Syst. 2005
Programming languages and type systems › interoperability
language interoperability
0.012001
Design and Implementation of Generics for the .NET Common Language Runtime · PLDI 2001

Methods — techniques the papers use, named apart from their topics

controlled experiment · 0.8type soundness proof · 0.5model checking · 0.1higher-order logic theorem proving · 0.1theorem proving · 0.0formal semantics · 0.0
YearPublicationVenuePosition
2020 The early history of F#
abstract
This paper describes the genesis and early history of the F# programming language. I start with the origins of strongly-typed functional programming (FP) in the 1970s, 80s and 90s. During the same period, Microsoft was founded and grew to dominate the software industry. In 1997, as a response to Java, Microsoft initiated internal projects which eventually became the .NET programming framework and the C# language. From 1997 the worlds of academic functional programming and industry combined at Microsoft Research, Cambridge. The researchers engaged with the company through Project 7, the initial effort to bring multiple languages to .NET, leading to the initiation of .NET Generics in 1998 and F# in 2002. F# was one of several responses by advocates of strongly-typed functional programming to the "object-oriented tidal wave" of the mid-1990s. The development of the core features of F# 1.0 happened from 2004-2007, and I describe the decision-making process that led to the "productization" of F# by Microsoft in 2007-10 and the release of F# 2.0. The origins of F#'s characteristic features are covered: object programming, quotations, statically resolved type parameters, active patterns, computation expressions, async, units-of-measure and type providers. I describe key developments in F# since 2010, including F# 3.0-4.5, and its evolution as an open source, cross-platform language with multiple delivery channels. I conclude by examining some uses of F# and the influence F# has had on other languages so far.
Don Syme
Proc. ACM Program. Lang.1
2016 A Live, Multiple-Representation Probabilistic Programming Environment for Novices
abstract
We present a live, multiple-representation novice environment for probabilistic programming based on the Infer.NET language. When compared to a text-only editor in a controlled experiment on 16 participants, our system showed a significant reduction in keystrokes during introductory probabilistic programming exercises, and subsequently, a significant improvement in program description and debugging tasks as measured by task time, keystrokes and deletions.
Maria I. Gorinova 0001, Advait Sarkar, Alan F. Blackwell, Don Syme
CHI4
2016 Types from data: making structured data first-class citizens in F#
abstract
Most modern applications interact with external services and access data in structured formats such as XML, JSON and CSV. Static type systems do not understand such formats, often making data access more cumbersome. Should we give up and leave the messy world of external data to dynamic typing and runtime checks? Of course, not! We present F# Data, a library that integrates external structured data into F#. As most real-world data does not come with an explicit schema, we develop a shape inference algorithm that infers a shape from representative sample documents. We then integrate the inferred shape into the F# type system using type providers. We formalize the process and prove a relative type soundness theorem. Our library significantly reduces the amount of data access code and it provides additional safety guarantees when contrasted with the widely used weakly typed techniques.
Tomas Petricek 0001, Gustavo Guerra, Don Syme
PLDI3
2014 The F# Computation Expression Zoo
Tomas Petricek 0001, Don Syme
PADL2
2011 Extending monads with pattern matching
abstract
Sequencing of effectful computations can be neatly captured using monads and elegantly written using do notation. In practice such monads often allow additional ways of composing computations, which have to be written explicitly using combinators.
Tomas Petricek 0001, Alan Mycroft, Don Syme
Haskell3
2011 Joinads: A Retargetable Control-Flow Construct for Reactive, Parallel and Concurrent Programming
Tomas Petricek 0001, Don Syme
PADL2
2011 The F# Asynchronous Programming Model
Don Syme, Tomas Petricek 0001, Dmitry Lomov
PADL1
2010 Collecting hollywood's garbage: avoiding space-leaks in composite events
abstract
The reactive programming model is largely different to what we're used to as we don't have full control over the application's control flow. If we mix the declarative and imperative programming style, which is usual in the ML family of languages, the situation is even more complex. It becomes easy to introduce patterns where the usual garbage collector for objects cannot automatically dispose all components that we intuitively consider garbage.
Tomas Petricek 0001, Don Syme
ISMM2
2007 Extensible pattern matching via a lightweight language extension
abstract
Pattern matching of algebraic data types (ADTs) is a standard feature in typed functional programming languages, but it is well known that it interacts poorly with abstraction. While several partial solutions to this problem have been proposed, few have been implemented or used. This paper describes an extension to the .NET language F# called active patterns, which supports pattern matching over abstract representations of generic heterogeneous data such as XML and term structures, including where these are represented via object models in other .NET languages. Our design is the first to incorporate both ad hoc pattern matching functions for partial decompositions and "views" for total decompositions, and yet remains a simple and lightweight extension. We give a description of the language extension along with numerous motivating examples. Finally we describe how this feature would interact with other reasonable and related language extensions: existential types quantified at data discrimination tags, GADTs, and monadic generalizations of pattern matching.
Don Syme, Gregory Neverov, James Margetson
ICFP1
2005 An industrially effective environment for formal hardware verification
abstract
The Forte formal verification environment for datapath-dominated hardware is described. Forte has proven to be effective in large-scale industrial trials and combines an efficient linear-time logic model-checking algorithm, namely the symbolic trajectory evaluation (STE), with lightweight theorem proving in higher-order logic. These are tightly integrated in a general-purpose functional programming language, which both allows the system to be easily customized and at the same time serves as a specification language. The design philosophy behind Forte is presented and the elements of the verification methodology that make it effective in practice are also described.
Carl-Johan H. Seger, Robert B. Jones, John W. O'Leary, Tom Melham, Mark D. Aagaard, Clark W. Barrett, Don Syme
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.7
2004 Formalization of generics for the .NET common language runtime
abstract
We present a formalization of the implementation of generics in the .NET Common Language Runtime (CLR), focusing on two novel aspectsof the implementation: mixed specialization and sharing, and efficient support for run-time types. Some crucial constructs used in the implementation are dictionaries and run-time type representations. We formalize these aspects type-theoretically in a way that corresponds in spirit to the implementation techniques used in practice. Both the techniques and the formalization also help us understand the range of possible implementation techniques for other languages, e.g., ML, especially when additional source language constructs such as run-time types are supported. A useful by-product of this study is a type system for a subset of the polymorphic IL proposed for the .NET CLR.
Dachuan Yu, Andrew Kennedy, Don Syme
POPL3
2004 Transposing F to C#: expressivity of parametric polymorphism in an object-oriented language
abstract
Abstract We present a type‐preserving translation of System F (the polymorphic lambda calculus) into a forthcoming revision of the C♯ programming language supporting parameterized classes and polymorphic methods. The forthcoming revision of Java in JDK 1.5 also makes a suitable target. We formalize the translation using a subset of C♯ similar to Featherweight Java. We prove that the translation is fully type‐preserving and that it preserves behaviour via the novel use of environment‐style semantics for System F. We observe that whilst parameterized classes alone are sufficient to encode the parameterized datatypes and let‐polymorphism of languages such as ML and Haskell, it is the presence of dynamic dispatch for polymorphic methods that supports the encoding of the ‘first‐class polymorphism’ found in System F and recent extensions to ML and Haskell. Copyright © 2004 John Wiley & Sons, Ltd.
Andrew Kennedy, Don Syme
Concurr. Pract. Exp.2
2002 Automating Type Soundness Proofs via Decision Procedures and Guided Reductions
Don Syme, Andrew D. Gordon 0001
LPAR1
2001 Design and Implementation of Generics for the .NET Common Language Runtime
abstract
The Microsoft.NET Common Language Runtime provides a shared type system, intermediate language and dynamic execution environment for the implementation and inter-operation of multiple source languages. In this paper we extend it with direct support for parametric polymorphism (also known as generics), describing the design through examples written in an extended version of the C# programming language, and explaining aspects of implementation by reference to a prototype extension to the runtime.
Andrew Kennedy, Don Syme
PLDI2
2001 Typing a multi-language intermediate code
abstract
The Microsoft .NET Framework is a new computing architecture designed to support a variety of distributed applications and web-based services. .NET software components are typically distributed in an object-oriented intermediate language, Microsoft IL, executed by the Microsoft Common Language Runtime. To allow convenient multi-language working, IL supports a wide variety of high-level language constructs, including class-based objects, inheritance, garbage collection, and a security mechanism based on type safe execution.This paper precisely describes the type system for a substantial fragment of IL that includes several novel features: certain objects may be allocated either on the heap or on the stack; those on the stack may be boxed onto the heap, and those on the heap may be unboxed onto the stack; methods may receive arguments and return results via typed pointers, which can reference both the stack and the heap, including the interiors of objects on the heap. We present a formal semantics for the fragment. Our typing rules determine well-typed IL instruction sequences that can be assembled and executed. Of particular interest are rules to ensure no pointer into the stack outlives its target. Our main theorem asserts type safety, that well-typed programs in our IL fragment do not lead to untrapped execution errors.Our main theorem does not directly apply to the product. Still, the formal system of this paper is an abstraction of informal and executable specifications we wrote for the full product during its development. Our informal specification became the basis of the product team's working specification of type-checking. The process of writing this specification, deploying the executable specification as a test oracle, and applying theorem proving techniques, helped us identify several security critical bugs during development.
Andrew D. Gordon 0001, Don Syme
POPL2