VLDB 2026 Research / reviewers in the wild / expert
John Hannan
dblp:13/5825
· DBLP profile ↗
14ranked-venue papers
11as first author
0since 2021 · last 2004
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 9 · 8 first-authorTheory of computation · 4 · 3 first-authorArtificial intelligence and machine learning · 1Systems, architecture and hardware · 1
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 |
Compilers and program optimization · 53% Programming languages and type systems · 47% | |
| Theoretical computer science
1 paper |
Logic in computer science · 100% | |
| Computer architecture, parallel and distributed computing, and storage systems
1 paper |
Processor architecture and microarchitecture · 100% |
Topics — the 11 heaviest of 12, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems › type systems › polymorphism
let-polymorphism |
0.0 | 1 | 1998 | Higher-Order unCurrying · POPL 1998 |
Programming languages and type systems
type systems |
0.0 | 1 | 1998 | Higher-Order unCurrying · POPL 1998 |
Compilers and program optimization
compiler construction |
0.0 | 1 | 1994 | Operational Semantics-Directed Compilers and Machine Architectures · ACM Trans. Program. Lang. Syst. 1994 |
Compilers and program optimization
intermediate representation |
0.0 | 1 | 1994 | Operational Semantics-Directed Compilers and Machine Architectures · ACM Trans. Program. Lang. Syst. 1994 |
Processor architecture and microarchitecture
instruction set architecture |
0.0 | 1 | 1994 | Operational Semantics-Directed Compilers and Machine Architectures · ACM Trans. Program. Lang. Syst. 1994 |
Compilers and program optimization
verified compilation |
0.0 | 1 | 1992 | Compiler Verification in LF · LICS 1992 |
Logic in computer science › proof theory
logical frameworks |
0.0 | 1 | 1992 | Compiler Verification in LF · LICS 1992 |
Logic in computer science › logic programming › answer set programming
loop formulas |
0.0 | 1 | 1992 | Compiler Verification in LF · LICS 1992 |
Logic in computer science › proof theory
proof transformation |
0.0 | 1 | 1992 | Compiler Verification in LF · LICS 1992 |
Programming languages and type systems › language semantics › formal semantics
operational semantics |
0.0 | 1 | 1994 | Operational Semantics-Directed Compilers and Machine Architectures · ACM Trans. Program. Lang. Syst. 1994 |
Programming languages and type systems
functional programming |
0.0 | 1 | 1992 | Compiler Verification in LF · LICS 1992 |
Methods — techniques the papers use, named apart from their topics
term-rewriting systems · 0.0staging transformation · 0.0pass separation · 0.0operational semantics · 0.0deductive system · 0.0algorithm w · 0.0logical frameworks · 0.0categorical abstract machine · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2004 | Energy-Efficient Scheduling Algorithms of Object Retrieval on Indexed Parallel Broadcast ChannelsabstractWith the goal of providing "timely and reliable" access to information in a mobile computing environment, mobile units and the wireless medium operate under constraints on energy, bandwidth, and connectivity. Among these limitations, power limitation of mobile units is one of the key issues. In a mobile computing environment, broadcasting has proved to be an effective method to distribute public data. Efficient methods for allocating and retrieving objects on parallel indexed broadcast channels have been proposed to manage power consumption and access latency. Employment of parallel channels also brings out the notion of conflicts. To minimize the effect of conflicts on both access latency and power consumption, one has to develop schemes to schedule access to the objects that minimizes the number of passes over the parallel channels. This work extends our past efforts and proposes two new scheduling algorithms that can find the minimum number of passes and inside channel switches. The simulation results show that the proposed scheduling algorithms relative to our previous work have a great impact on energy consumption and access latency. The proposed scheduling algorithms are simulated and results are presented. Bingjun Sun, Ali R. Hurson, John Hannan |
ICPP | 3 |
| 2003 | Specification and correctness of lambda liftingabstractWe present a formal and general specification of lambda lifting and prove its correctness with respect to a call-by-name operational semantics. We use this specification to prove the correctness of a lambda lifting algorithm similar to the one proposed by Johnsson. Lambda lifting is a program transformation that eliminates free variables from functions by introducing additional formal parameters to function definitions and additional actual parameters to function calls. This operation supports the transformation from a lexically-structured functional program into a set of recursive equations. Existing results provide specific algorithms and only limited correctness results. Our work provides a more general specification of lambda lifting (and related operations) that supports flexible translation strategies, which may result in new implementation techniques. Our work also supports a simple framework in which the interaction of lambda lifting and other optimizations can be studied and from which new algorithms might be obtained. Adam Fischbach, John Hannan |
J. Funct. Program. | 2 |
| 1998 | Higher-Order Arity RaisingabstractArity raising, also known as variable splitting or flattening, is the program optimization which transforms a function of one argument into a function of several arguments by decomposing the structure of the original one argument into individual components in that structure. This optimization eliminates the need for the structuring of the components and also allows more arguments to be passed in registers during a function call. We present a formal specification of arity raising for a higher-order functional language. This specification supports the general arity raising of functions, even for functions which are passed as arguments or returned as values. We define a practical algorithm, based on algorithm W, which implements arity raising, and we prove this algorithm sound with respect to the deductive system. These results provide a declarative framework for reasoning about arity raising and support a richer form of the transformation than is currently found in compilers for functional languages. John Hannan, Patrick Hicks |
ICFP | 1 |
| 1998 | Higher-Order unCurryingabstractWe present a formal specification of unCurrying for a higherorder, functional language with ML-style let-polymorphism. This specification supports the general unCurrying of functions, even for functions which are passed as arguments or returned as values. The specification also supports partial unCurrying of any consecutive parameters of a function, rather than only unCurrying all of a function's parameters. We present the specification as a deductive system which axiomatizes a judgment relating a source term with an unCurried form of the term. We prove that this system relates only typable terms and that it is correct with respect to an operational semantics. We define a practical algorithm, based on algorithm W, which implements the unCurrying and prove this algorithm sound and complete with respect to the deductive system. This algorithm generates maximally unCurried forms of source terms. These results provide a declarative framework for reasoning about unCurrying and support a richer form of unCurrying than is currently found in compilers for functional languages. John Hannan, Patrick Hicks |
POPL | 1 |
| 1998 | A Type-Based Escape Analysis for Functional LanguagesabstractAn important issue faced by implementors of higher-order functional programming languages is the allocation and deallocation of storage for variables. The possibility of variables escaping their scope during runtime makes traditional stack allocation inadequate. We consider the problem of detecting when variables in such languages do not escape their scope, and thus can have their bindings allocated in an efficient manner. We use an annotated type system to infer information about the use of variables in a higher-order, strict functional language and combine this system with a translation to an annotated language which explicitly indicates which variables do not escape. The type system uses a notion of annotated types which extends the traditional simple type system with information about the extent of variables. To illustrate the use of this information we define an operational semantics for the annotated language which supports both stack and environment allocation of variable bindings. Only the stack allocated bindings need follow the protocol for stacks: their extent may not exceed their scope. Environment allocated bindings can have any extent, and their allocation has no impact on the stack allocated ones. We prove the analysis and translation correct with respect to this operational semantics by adapting a traditional type consistency proof to our setting. We have encoded the proof into the Elf programming language and typechecked it, providing a partially machine-checked proof. John Hannan |
J. Funct. Program. | 1 |
| 1995 | A Type-based Analysis for Stack Allocation in Functional Languages
John Hannan |
SAS | 1 |
| 1994 | Operational Semantics-Directed Compilers and Machine ArchitecturesabstractWe consider the task of automatically constructing intermediate-level machine architectures and compilers generating code for these architectures, given operational semantics for source languages. We use operational semantics in the form of abstract machines given by rewrite systems in which the rewrite rules operate on terms representing states of computations. To construct compilers and new architectures we employ a particular strategy called pass separation, a form of staging transformation, that takes a program p and constructs a pair of programs p 1 , p 2 such that p(x, y) = p 2 (p 1 (x), y) ) for all x,y . If p represents an operational semantics for a language, with arguments x and y denoting a source program and its input data, then pass separation constructs programs p 1 and p 2 corresponding to a compiler and an executor. The compiler translates the source language into an intermediate-level target language, and the executor provides the definition for this language. Our use of pass separation supports the automatic definition of target languages or architectures, and the structure of these architectures is directed by the structure of the given source semantics. These architectures resemble abstract machine languages found in hand-crafted compilers. Our method is restricted to a limited class of abstract machines given as term-rewriting systems, but we argue that this class encompasses a large set of language definitions derived from more natural operational semantics. We provide two examples of our method by constructing compilers and target architectures for a simple functional language and a simple imperative language. Though we construct these architectures automatically, they bear a striking resemblance to existing architectures constructed by hand. John Hannan |
ACM Trans. Program. Lang. Syst. | 1 |
| 1993 | Searching For SemanticsabstractWe consider the task of generating operational semantics, defined as axiomatizations of relations such as e → v, from an equality theory, given as a set of equations {e1 = e2}. We generate these semantics by constructing derived rules based on equations provable in this equality theory and constrained by a simple correctness criteria. This criteria, which we have previously used in verifying compiler correctness, states that the generated semantics correctly implements a given source language. We use Elf, a logic programming language, to axiomatize source language semantics, equality theories for target languages, and translations between source and target languages, and to construct the derived rules, based on these axiomatizations, for the target languages. During the process of constructing derived rules we simultaneously construct a correctness proof, relating these new rules to a given source language and the translation between languages. Previous uses of Elf (in compiler construction and language manipulation) have focused on the language's type system to express statements of correctness. We focus here on Elf's search paradigm, exploiting it in a crucial way to construct objects representing semantic specifications. We have only considered operational semantics for simple functional languages, but we expect that our results can be generalized to a wider class of languages. John Hannan |
PEPM | 1 |
| 1993 | Extended Natural SemanticsabstractAbstract We extend the definition of natural semantics to include simply typed λ-terms, instead of first-order terms, for representing programs, and to include inference rules for the introduction and discharge of hypotheses and eigenvariables. This extension, which we call extended natural semantics , affords a higher-level notion of abstract syntax for representing programs and suitable mechanisms for manipulating this syntax. We present several examples of semantic specifications for a simple functional programming language and demonstrate how we achieve simple and elegant manipulations of bound variables in functional programs. All the examples have been implemented and tested in λProlog, a higher-order logic programming language that supports all of the features of extended natural semantics. John Hannan |
J. Funct. Program. | 1 |
| 1992 | Compiler Verification in LFabstractA methodology for the verification of compiler correctness based on the LF logical framework as realized within the Elf programming language is presented. This technique is used to specify, implement, and verify a compiler from a simple functional programming language to a variant of the Categorical Abstract Machine (CAM).> John Hannan, Frank Pfenning |
LICS | 1 |
| 1992 | From Operational Semantics for Abstract MachinesabstractWe consider the problem of mechanically constructing abstract machines from operational semantics, producing intermediate-level specifications of evaluators guaranteed to be correct with respect to the operational semantics. We construct these machines by repeatedly applying correctness-preserving transformations to operational semantics until the resulting specifications have the form of abstract machines. Though not automatable in general, this approach to constructing machine implementations can be mechanized, providing machine-verified correctness proofs. As examples, we present the transformation of specifications for both call-by-name and call-by-value evaluation of the untyped λ-calculus into abstract machines that implement such evaluation strategies. We also present extensions to the call-by-value machine for a language containing constructs for recursion, conditionals, concrete data types, and built-in functions. In all cases, the correctness of the derived abstract machines follows from the (generally transparent) correctness of the initial operational semantic specification and the correctness of the transformations applied. John Hannan, Dale Miller 0001 |
Math. Struct. Comput. Sci. | 1 |
| 1991 | Staging Transformations for Abstract MachinesabstractDatalogi, Abstract Machines, Compilation, Staging Transformations John Hannan |
PEPM | 1 |
| 1989 | Deriving Mixed Evaluation from Standard Evaluation for a Simple Functional Language
John Hannan, Dale Miller 0001 |
MPC | 1 |
| 1988 | Lambda-Prolog: An Extended Logic Programming Language
Amy P. Felty, Elsa L. Gunter, John Hannan, Dale Miller 0001, Gopalan Nadathur, Andre Scedrov |
CADE | 3 |