Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Michael Furr

dblp:91/337 · DBLP profile ↗
← Back
5ranked-venue papers
5as first author
0since 2021 · last 2009
—ORCID · none

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

Software engineering, systems software and programming languages · 5 · 5 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
3 papers
Programming languages and type systems · 72% Program analysis · 25% Runtime systems and virtual machines · 3%

Topics — the 8 heaviest of 9, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Programming languages and type systems › type systems
type soundness
0.122008
Checking type safety of foreign function calls · ACM Trans. Program. Lang. Syst. 2008
Checking type safety of foreign function calls · PLDI 2005
Program analysis
static analysis
0.122008
Checking type safety of foreign function calls · ACM Trans. Program. Lang. Syst. 2008
Checking type safety of foreign function calls · PLDI 2005
Programming languages and type systems › type inference
static type inference
0.112009
Profile-guided static typing for dynamic scripting languages · OOPSLA 2009
Programming languages and type systems
type systems
0.122008
Checking type safety of foreign function calls · PLDI 2005
Checking type safety of foreign function calls · ACM Trans. Program. Lang. Syst. 2008
Programming languages and type systems › language implementation
foreign function interface
0.112005
Checking type safety of foreign function calls · PLDI 2005
Program analysis › data flow analysis
flow-sensitive analysis
0.012008
Checking type safety of foreign function calls · ACM Trans. Program. Lang. Syst. 2008
Program analysis
data flow analysis
0.012005
Checking type safety of foreign function calls · PLDI 2005
Runtime systems and virtual machines
garbage collection
0.012005
Checking type safety of foreign function calls · PLDI 2005

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

type inference · 0.1runtime instrumentation · 0.1dynamic analysis · 0.1unification-based analysis · 0.1singleton types · 0.1polymorphic type inference · 0.1representational types · 0.1data flow analysis · 0.1
YearPublicationVenuePosition
2009 The ruby intermediate language
abstract
Ruby is a popular, dynamic scripting language that aims to "feel natural to programmers" and give users the "freedom to choose" among many different ways of doing the same thing. While this arguably makes programming in Ruby easier, it makes it hard to build analysis and transformation tools that operate on Ruby source code. In this paper, we present the Ruby Intermediate Language (RIL), a Ruby front-end and intermediate representation that addresses these. RIL includes an extensible GLR parser for Ruby, and an automatic translation into an easy-to-analyze intermediate form. This translation eliminates redundant language constructs, unravels the often subtle ordering among side effecting operations, and makes implicit interpreter operations explicit. We also describe several additional useful features of RIL, such as a dynamic instrumentation library for profiling source code and a dataflow analysis engine. We demonstrate the usefulness of RIL by presenting a static and dynamic analysis to eliminate null pointer errors in Ruby programs. We hope that RIL's features will enable others to more easily build analysis tools for Ruby, and that our design will inspire the of similar frameworks for other dynamic languages.
Michael Furr, Jong-hoon (David) An, Jeffrey S. Foster, Michael Hicks 0001
DLS1
2009 Profile-guided static typing for dynamic scripting languages
abstract
Many popular scripting languages such as Ruby, Python, and Perl include highly dynamic language constructs, such as an eval method that evaluates a string as program text. While these constructs allow terse and expressive code, they have traditionally obstructed static analysis. In this paper we present PRuby, an extension to Diamondback Ruby (DRuby), a static type inference system for Ruby. PRuby augments DRuby with a novel dynamic analysis and transformation that allows us to precisely type uses of highly dynamic constructs. PRuby's analysis proceeds in three steps. First, we use run-time instrumentation to gather per-application profiles of dynamic feature usage. Next, we replace dynamic features with statically analyzable alternatives based on the profile. We also add instrumentation to safely handle cases when subsequent runs do not match the profile. Finally, we run DRuby's static type inference on the transformed code to enforce type safety.
Michael Furr, Jong-hoon (David) An, Jeffrey S. Foster
OOPSLA1
2008 Checking type safety of foreign function calls
abstract
Foreign function interfaces (FFIs) allow components in different languages to communicate directly with each other. While FFIs are useful, they often require writing tricky low-level code and include little or no static safety checking, thus providing a rich source of hard-to-find programming errors. In this article, we study the problem of enforcing type safety across the OCaml-to-C FFI and the Java Native Interface (JNI). We present O-Saffire and J-Saffire, a pair of multilingual type inference systems that ensure C code that uses these FFIs accesses high-level data safely. Our inference systems userepresentational typesto model C's low-level view of OCaml and Java values, and singleton types to track integers, strings, memory offsets, and type tags through C. J-Saffire, our Java system, uses a polymorphic flow-insensitive, unification-based analysis. Polymorphism is important because it allows us to precisely model user-defined wrapper functions and the more than 200 JNI functions. O-Saffire, our OCaml system, uses a monomorphic flow-sensitive analysis because, while polymorphism is much less important for the OCaml FFI flow-sensitivity is critical to track conditional branches, which are used when pattern matching OCaml data in C. O-Saffire also tracks garbage collection information to ensure that local C pointers to the OCaml heap are registered properly, which is not necessary for the JNI. We have applied O-Saffire and J-Saffire to a set of benchmarks and found many bugs and questionable coding practices. These results suggest that static checking of FFIs can be a valuable tool in writing correct multilingual software.
Michael Furr, Jeffrey S. Foster
ACM Trans. Program. Lang. Syst.1
2006 Polymorphic Type Inference for the JNI
Michael Furr, Jeffrey S. Foster
ESOP1
2005 Checking type safety of foreign function calls
abstract
We present a multi-lingual type inference system for checking type safety across a foreign function interface. The goal of our system is to prevent foreign function calls from introducing type and memory safety violations into an otherwise safe language. Our system targets OCaml's FFI to C, which is relatively lightweight and illustrates some interesting challenges in multi-lingual type inference. The type language in our system embeds OCaml types in C types and vice-versa, which allows us to track type information accurately even through the foreign language, where the original types are lost. Our system uses representational types that can model multiple OCaml types, because C programs can observe that many OCaml types have the same physical representation. Furthermore, because C has a low-level view of OCaml data, our inference system includes a dataflow analysis to track memory offsets and tag information. Finally, our type system includes garbage collection information to ensure that pointers from the FFI to the OCaml heap are tracked properly. We have implemented our inference system and applied it to a small set of benchmarks. Our results show that programmers do misuse these interfaces, and our implementation has found several bugs and questionable coding practices in our benchmarks.
Michael Furr, Jeffrey S. Foster
PLDI1