Panagiotis Vekris

dblp:145/7809 · DBLP profile ↗
← Back
5ranked-venue papers
2as first author
0since 2021 · last 2017
—ORCID · none

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

Software engineering, systems software and programming languages · 5 · 2 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 · 70% Program verification · 15% Program analysis · 9%

Topics — the 12 heaviest of 13, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Programming languages and type systems
type systems
0.522017
Fast and precise type checking for JavaScript · Proc. ACM Program. Lang. 2017
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Program analysis
static analysis
0.312017
Fast and precise type checking for JavaScript · Proc. ACM Program. Lang. 2017
Programming languages and type systems
type checking
0.312017
Fast and precise type checking for JavaScript · Proc. ACM Program. Lang. 2017
Programming languages and type systems
type inference
0.312017
Fast and precise type checking for JavaScript · Proc. ACM Program. Lang. 2017
Programming languages and type systems › type systems
refinement types
0.212016
Refinement types for TypeScript · PLDI 2016
Programming languages and type systems › type systems › refinement types
refinement type system
0.212016
Refinement types for TypeScript · PLDI 2016
Program verification › type-based verification
refinement type verification
0.212016
Refinement types for TypeScript · PLDI 2016
Program verification
static verification
0.212016
Refinement types for TypeScript · PLDI 2016
Programming languages and type systems › type systems
gradual typing
0.212015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Compilers and program optimization
run-time checks
0.212015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Programming languages and type systems › type systems › gradual typing
sound gradual typing
0.212015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015
Programming languages and type systems › type systems
soundness
0.212015
Safe & Efficient Gradual Typing for TypeScript · POPL 2015

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

type inference · 0.3parallelization · 0.3incrementalization · 0.3flow-sensitive reasoning · 0.2SSA translation · 0.2simulation proof · 0.2runtime checks · 0.2
YearPublicationVenuePosition
2017 Fast and precise type checking for JavaScript
abstract
In this paper we present the design and implementation of Flow, a fast and precise type checker for JavaScript that is used by thousands of developers on millions of lines of code at Facebook every day. Flow uses sophisticated type inference to understand common JavaScript idioms precisely. This helps it find non-trivial bugs in code and provide code intelligence to editors without requiring significant rewriting or annotations from the developer. We formalize an important fragment of Flow's analysis and prove its soundness. Furthermore, Flow uses aggressive parallelization and incrementalization to deliver near-instantaneous response times. This helps it avoid introducing any latency in the usual edit-refresh cycle of rapid JavaScript development. We describe the algorithms and systems infrastructure that we built to scale Flow's analysis.
Avik Chaudhuri, Panagiotis Vekris, Sam Goldman, Marshall Roch, Gabriel Levi
Proc. ACM Program. Lang.2
2016 Refinement types for TypeScript
abstract
We present Refined TypeScript (RSC), a lightweight refinement type system for TypeScript, that enables static verification of higher-order, imperative programs. We develop a formal system for RSC that delineates the interaction between refinement types and mutability, and enables flow-sensitive reasoning by translating input programs to an equivalent intermediate SSA form. By establishing type safety for the intermediate form, we prove safety for the input programs. Next, we extend the core to account for imperative and dynamic features of TypeScript, including overloading, type reflection, ad hoc type hierarchies and object initialization. Finally, we evaluate RSC on a set of real-world benchmarks, including parts of the Octane benchmarks, D3, Transducers, and the TypeScript compiler. We show how RSC successfully establishes a number of value dependent properties, such as the safety of array accesses and downcasts, while incurring a modest overhead in type annotations and code restructuring.
Panagiotis Vekris, Benjamin Cosman, Ranjit Jhala
PLDI1
2015 Trust, but Verify: Two-Phase Typing for Dynamic Languages
abstract
A key challenge when statically typing so-called dynamic languages is the ubiquity of value-based overloading, where a given function can dynamically reflect upon and behave according to the types of its arguments. Thus, to establish basic types, the analysis must reason precisely about values, but in the presence of higher-order functions and polymorphism, this reasoning itself can require basic types. In this paper we address this chicken-and-egg problem by introducing the framework of two-phased typing. The first "trust" phase performs classical, i.e. flow-, path- and value-insensitive type checking to assign basic types to various program expressions. When the check inevitably runs into "errors" due to value-insensitivity, it wraps problematic expressions with DEAD-casts, which explicate the trust obligations that must be discharged by the second phase. The second phase uses refinement typing, a flow- and path-sensitive analysis, that decorates the first phase's types with logical predicates to track value relationships and thereby verify the casts and establish other correctness properties for dynamically typed languages.
Panagiotis Vekris, Benjamin Cosman, Ranjit Jhala
ECOOP1
2015 Safe & Efficient Gradual Typing for TypeScript
abstract
Current proposals for adding gradual typing to JavaScript, such as Closure, TypeScript and Dart, forgo soundness to deal with issues of scale, code reuse, and popular programming patterns. We show how to address these issues in practice while retaining soundness. We design and implement a new gradual type system, prototyped for expediency as a 'Safe' compilation mode for TypeScript. Our compiler achieves soundness by enforcing stricter static checks and embedding residual runtime checks in compiled code. It emits plain JavaScript that runs on stock virtual machines. Our main theorem is a simulation that ensures that the checks introduced by Safe TypeScript (1) catch any dynamic type error, and (2) do not alter the semantics of type-safe TypeScript code.
Aseem Rastogi, Nikhil Swamy, Cédric Fournet, Gavin M. Bierman, Panagiotis Vekris
POPL5
2011 Dynamic deadlock avoidance in systems code using statically inferred effects
abstract
Deadlocks can have devastating effects in systems code. We have developed a type and effect system that provably avoids them and in this paper we present a tool that uses a sound static analysis to instrument multithreaded C programs and then links these programs with a run-time system that avoids possible deadlocks. In contrast to most other purely static tools for deadlock freedom, our tool does not insist that programs adhere to a strict lock acquisition order or use lock primitives in a block-structured way, thus it is appropriate for systems code and OS applications. We also report some very promising benchmark results which show that all possible deadlocks can automatically be avoided with only a small run-time overhead. More importantly, this is done without having to modify the original source program by altering the order of resource acquisition operations or by adding annotations.
Prodromos Gerakios, Nikolaos S. Papaspyrou, Konstantinos Sagonas, Panagiotis Vekris
PLOS@SOSP4