Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where Chris Seaton is active.

Publication


Featured researches published by Chris Seaton.


principles and practice of programming in java | 2014

An object storage model for the truffle language implementation framework

Andreas Wöß; Christian Wirth; Daniele Bonetta; Chris Seaton; Christian Humer

Truffle is a Java-based framework for developing high-performance language runtimes. Language implementers aiming at developing new runtimes have to design all the runtime mechanisms for managing dynamically typed objects from scratch. This not only leads to potential code duplication, but also impacts the actual time needed to develop a fully-fledged runtime. In this paper we address this issue by introducing a common object storage model (OSM) for Truffle that can be used by language implementers to develop new runtimes. The OSM is generic, language-agnostic, and portable, as it can be used to implement a great variety of dynamic languages. It is extensible, featuring built-in support for custom extension mechanisms. It is also high-performance, as it is designed to benefit from the optimizing compiler in the Truffle framework. Our initial evaluation indicates that the Truffle OSM can be used to implement high-performance language runtimes, with no performance overhead when compared to language-specific solutions.


programming language design and implementation | 2017

Practical partial evaluation for high-performance dynamic language runtimes

Thomas Würthinger; Christian Wimmer; Christian Humer; Andreas Wöß; Lukas Stadler; Chris Seaton; Gilles Duboscq; Doug Simon; Matthias Grimmer

Most high-performance dynamic language virtual machines duplicate language semantics in the interpreter, compiler, and runtime system. This violates the principle to not repeat yourself. In contrast, we define languages solely by writing an interpreter. The interpreter performs specializations, e.g., augments the interpreted program with type information and profiling information. Compiled code is derived automatically using partial evaluation while incorporating these specializations. This makes partial evaluation practical in the context of dynamic languages: It reduces the size of the compiled code while still compiling all parts of an operation that are relevant for a particular program. When a speculation fails, execution transfers back to the interpreter, the program re-specializes in the interpreter, and later partial evaluation again transforms the new state of the interpreter to compiled code. We evaluate our approach by comparing our implementations of JavaScript, Ruby, and R with best-in-class specialized production implementations. Our general-purpose compilation system is competitive with production systems even when they have been heavily optimized for the one language they support. For our set of benchmarks, our speedup relative to the V8 JavaScript VM is 0.83x, relative to JRuby is 3.8x, and relative to GNU R is 5x.


Proceedings of the 14th International Conference on Modularity | 2015

Dynamically composing languages in a modular way: supporting C extensions for dynamic languages

Matthias Grimmer; Chris Seaton; Thomas Würthinger

Many dynamic languages such as Ruby, Python and Perl offer some kind of functionality for writing parts of applications in a lower-level language such as C. These C extension modules are usually written against the API of an interpreter, which provides access to the higher-level languages internal data structures. Alternative implementations of the high-level languages often do not support such C extensions because implementing the same API as in the original implementations is complicated and limits performance. In this paper we describe a novel approach for modular composition of languages that allows dynamic languages to support C extensions through interpretation. We propose a flexible and reusable cross-language mechanism that allows composing multiple language interpreters, which run on the same VM and share the same form of intermediate representation - in this case abstract syntax trees. This mechanism allows us to efficiently exchange runtime data across different interpreters and also enables the dynamic compiler of the host VM to inline and optimize programs across multiple language boundaries. We evaluate our approach by composing a Ruby interpreter with a C interpreter. We run existing Ruby C extensions and show how our system executes combined Ruby and C modules on average over 3x faster than the conventional implementation of Ruby with native C extensions, and on average over 20x faster than an existing alternate Ruby implementation on the JVM (JRuby) calling compiled C extensions through a bridge interface. We demonstrate that cross-language inlining, which is not possible with native code, is performance-critical by showing how speedup is reduced by around 50% when it is disabled.


programming language design and implementation | 2015

Zero-overhead metaprogramming: reflection and metaobject protocols fast and without compromises

Stefan Marr; Chris Seaton; Stéphane Ducasse

Runtime metaprogramming enables many useful applications and is often a convenient solution to solve problems in a generic way, which makes it widely used in frameworks, middleware, and domain-specific languages. However, powerful metaobject protocols are rarely supported and even common concepts such as reflective method invocation or dynamic proxies are not optimized. Solutions proposed in literature either restrict the metaprogramming capabilities or require application or library developers to apply performance improving techniques. For overhead-free runtime metaprogramming, we demonstrate that dispatch chains, a generalized form of polymorphic inline caches common to self-optimizing interpreters, are a simple optimization at the language-implementation level. Our evaluation with self-optimizing interpreters shows that unrestricted metaobject protocols can be realized for the first time without runtime overhead, and that this optimization is applicable for just-in-time compilation of interpreters based on meta-tracing as well as partial evaluation. In this context, we also demonstrate that optimizing common reflective operations can lead to significant performance improvements for existing applications.


dynamic languages symposium | 2015

High-performance cross-language interoperability in a multi-language runtime

Matthias Grimmer; Chris Seaton; Roland Schatz; Thomas Würthinger

Programmers combine different programming languages because it allows them to use the most suitable language for a given problem, to gradually migrate existing projects from one language to another, or to reuse existing source code. However, existing cross-language mechanisms suffer from complex interfaces, insufficient flexibility, or poor performance. We present the TruffleVM, a multi-language runtime that allows composing different language implementations in a seamless way. It reduces the amount of required boiler-plate code to a minimum by allowing programmers to access foreign functions or objects by using the notation of the host language. We compose language implementations that translate source code to an intermediate representation (IR), which is executed on top of a shared runtime system. Language implementations use language-independent messages that the runtime resolves at their first execution by transforming them to efficient foreign-language-specific operations. The TruffleVM avoids conversion or marshaling of foreign objects at the language boundary and allows the dynamic compiler to perform its optimizations across language boundaries, which guarantees high performance. This paper presents an implementation of our ideas based on the Truffle system and its guest language implementations JavaScript, Ruby, and C.


Emergency Medicine Journal | 2015

The Mersey Burns App: evolving a model of validation

Jamie Barnes; Annie Duffy; Nathan Hamnett; Jane McPhail; Chris Seaton; Kayvan Shokrollahi; M Ian James; Paul McArthur; Rowan Pritchard Jones

Introduction ‘Mersey Burns App’ is a smartphone/tablet application that aids in the assessment of total burn surface area (TBSA) and calculation of fluid resuscitation protocols in burns. This paper presents two studies assessing the speed and accuracy of calculations using Mersey Burns (App) in comparison with a Lund and Browder chart (paper) when a burn is assessed by medical students and clinicians. Methods The first study compared the speed and accuracy of TBSA and resuscitation calculation for a photograph of a burn with App and paper using burns and plastics and emergency medicine trainees and consultants. Developing on some of the feedback and results of that study, a second study was then carried out using burns-naive medical students assessing a fully simulated burn with both modalities. Preference and ease of use of each modality were assessed anonymously. Results The clinician study showed a lower variance in TBSA and fluid calculations using the App (p<0.05). The student study showed no difference in mean TBSA estimations (p=0.7). Mean time to completion of calculations was faster and calculations were more likely to be correct with the App (p<0.001). Students favoured the App in the following categories: preference in emergency setting, confidence in output, accuracy, speed, ease of calculation, overall use and shading (p<0.0001). Conclusions Mersey Burns App can facilitate quicker and more accurate calculations than Lund and Browder charts. Students also preferred the App. This suggests a useful role for the App in the care of patients with burns by inexperienced staff.


acm workshop on programming languages and analysis for security | 2015

Memory-safe Execution of C on a Java VM

Matthias Grimmer; Roland Schatz; Chris Seaton; Thomas Würthinger

In low-level languages such as C, spatial and temporal safety errors (e.g. buffer overflows or dangling pointer dereferences) are hard to find and can cause security vulnerabilities. Modern high-level languages such as Java avoid these problems by running programs on a virtual machine that provides automated memory management. In this paper we show how we can safely execute C code on top of a modern runtime (e.g., a Java Virtual Machine) by allocating all data on the managed heap. We reuse the memory management of the runtime, hence, we can ensure spatial and temporal safety with little effort. Nevertheless, we retain all characteristics that are typical for unsafe languages (such as pointer arithmetic, pointers into objects, or arbitrary type casts).We discuss how our approach complies with the C99 standard. Compared to an optimized unsafe execution of a C program (compiled with the GNU C compiler and all optimizations enabled) our approach has overhead of 15% on average (peak-performance).


2012 Data-Flow Execution Models for Extreme Scale Computing | 2012

DFScala: High Level Dataflow Support for Scala

Daniel Goodman; Salman Khan; Chris Seaton; Yegor Guskov; Behram Khan; Mikel Luján; Ian Watson

In this paper we present DFScala, a library for constructing and executing dataflow graphs in the Scala language. Through the use of Scala this library allows the programmer to construct coarse grained dataflow graphs that take advantage of functional semantics for the dataflow graph and both functional and imperative semantics within the dataflow nodes. This combination allows for very clean code which exhibits the properties of dataflow programs, but we believe is more accessible to imperative programmers. We first describe DFScala in detail, before using a number of benchmarks to evaluate both its scalability and its absolute performance relative to existing codes. DFScala has been constructed as part of the Teraflux project and is being used extensively as a basis for further research into dataflow programming.


Annals of Plastic Surgery | 2012

Medical Innovation—A Starting Point for Plastic Surgeons

Stratos S. Sofos; Rowan Pritchard-Jones; Chris Seaton; John Dingley; Paul McArthur; Kayvan Shokrollahi

P roducing a novel product involves, in lesser part, an idea; in modest part, formulating that idea into a prototype or product; and in major part, the relevant know-how to make all of this into a viable product. We have developed a number of products, prototypes, and medical devices that fit into 2 possible business models. The first is a traditional business model, and the second is an ‘‘open-access’’ model. Using these products as example, we provide our insights into this minefield as a guide for innovation to the readership. 1. An electronic communication device designed to provide a solution for patients with burns unable to communicate because of presence of a tracheostomy and bandaged limbsVa prototype built, designed, and disseminated as an open-source product that can be assembled cheaply without a business model (Fig. 1). 2. ‘‘Mersey Burns’’ (Medicaps Ltd, Whitchurch, Shropshire, UK) (Fig. 2) is an iPhone/iPad application that produces detailed fluid resuscitation protocols for patients with burns and was awarded an Excellence in Innovation Award. It is the first United Kingdom smart phone application to be registered under the European Medical Device Directive (MDD) and thus carry a CE mark to denote its conformity with the appropriate regulations and is available for free. 3. ‘‘Tourniglo’’ (Fig. 3) is a combined tourniquet-torch, which was, recognized through a number of awards both nationally and internationally for innovation and design. In addition, the Tourniglo has received grants from the European Union and the Welsh Assembly.


implementation, compilation, optimization of object-oriented languages, programs and systems | 2015

Techniques and applications for guest-language safepoints

Benoit Daloze; Chris Seaton; Daniele Bonetta

Safepoints are a virtual machine mechanism that allows one thread to suspend other threads in a known state so that runtime actions can be performed without interruption and with data structures in a consistent state. Many virtual machines use safepoints as a mechanism to provide services such as stop-the-world garbage collection, debugging, and modification to running code such as installing or replacing classes. Languages implemented on these virtual machines may have access to these services, but not directly to the safepoint mechanism itself. We show that safepoints have many useful applications for the implementation of guest languages running on a virtual machine. We describe an API for using safepoints in languages that were implemented under the Truffle language implementation framework on the Java Virtual Machine and show several applications of the API to implement useful guest-language functionality. We present an efficient implementation of this API, when running in combination with the Graal dynamic compiler. We also demonstrate that our safepoints cause zero overhead with respect to peak performance and statistically insignificant overhead with respect to compilation time. We compare this to other techniques that could be used to implement the same functionality and demonstrate the large overhead that they incur.

Collaboration


Dive into the Chris Seaton's collaboration.

Top Co-Authors

Avatar
Top Co-Authors

Avatar

Matthias Grimmer

Johannes Kepler University of Linz

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Benoit Daloze

Johannes Kepler University of Linz

View shared research outputs
Top Co-Authors

Avatar

Christian Humer

Johannes Kepler University of Linz

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Mikel Luján

University of Manchester

View shared research outputs
Top Co-Authors

Avatar
Researchain Logo
Decentralizing Knowledge