{"title":"A Generic Approach to Flow-Sensitive Polymorphic Effects","authors":"Colin S. Gordon","doi":"10.4230/LIPIcs.ECOOP.2017.13","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2017.13","url":null,"abstract":"Effect systems are lightweight extensions to type systems that can verify a wide range of important properties with modest developer burden. But our general understanding of effect systems is limited primarily to systems where the order of effects is irrelevant. Understanding such systems in terms of a lattice of effects grounds understanding of the essential issues, and provides guidance when designing new effect systems. By contrast, sequential effect systems --- where the order of effects is important --- lack a clear algebraic characterization. \u0000We derive an algebraic characterization from the shape of prior concrete sequential effect systems. We present an abstract polymorphic effect system with singleton effects parameterized by an effect quantale --- an algebraic structure with well-defined properties that can model a range of existing order-sensitive effect systems. We define effect quantales, derive useful properties, and show how they cleanly model a variety of known sequential effect systems. We show that effect quantales provide a free, general notion of iterating a sequential effect, and that for systems we consider the derived iteration agrees with the manually designed iteration operators in prior work. Identifying and applying the right algebraic structure led us to subtle insights into the design of order-sensitive effect systems, which provides guidance on non-obvious points of designing order-sensitive effect systems. Effect quantales have clear relationships to the recent category theoretic work on order-sensitive effect systems, but are explained without recourse to category theory. In addition, our derived iteration construct should generalize to these semantic structures, addressing limitations of that work.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"52 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2017-05-05","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122554646","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"muPuppet: A Declarative Subset of the Puppet Configuration Language","authors":"Weili Fu, R. Perera, P. Anderson, J. Cheney","doi":"10.4230/LIPIcs.ECOOP.2017.12","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2017.12","url":null,"abstract":"Puppet is a popular declarative framework for specifying and managing complex system configurations. The Puppet framework includes a domain-specific language with several advanced features inspired by object-oriented programming, including user-defined resource types, 'classes' with a form of inheritance, and dependency management. Like most real-world languages, the language has evolved in an ad hoc fashion, resulting in a design with numerous features, some of which are complex, hard to understand, and difficult to use correctly. \u0000We present an operational semantics for $mu$Puppet, a representative subset of the Puppet language that covers the distinctive features of Puppet, while excluding features that are either deprecated or work-in-progress. Formalising the semantics sheds light on difficult parts of the language, identifies opportunities for future improvements, and provides a foundation for future analysis or debugging techniques, such as static typechecking or provenance tracking. Our semantics leads straightforwardly to a reference implementation in Haskell. We also discuss some of Puppet's idiosyncrasies, particularly its handling of classes and scope, and present an initial corpus of test cases supported by our formal semantics.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"53 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-08-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"126916246","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Lightweight Session Programming in Scala","authors":"A. Scalas, N. Yoshida","doi":"10.4230/LIPIcs.ECOOP.2016.21","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2016.21","url":null,"abstract":"Designing, developing and maintaining concurrent applications is an \u0000error-prone and time-consuming task; most difficulties arise because \u0000compilers are usually unable to check whether the inputs/outputs \u0000performed by a program at runtime will adhere to a given protocol \u0000specification. To address this problem, we propose lightweight session programming in Scala: we leverage the native features of the Scala \u0000type system and standard library, to introduce (1) a representation of session types as Scala types, and (2) a library, called lchannels, with a convenient API for session-based programming, supporting local and distributed communication. We generalise the idea of Continuation-Passing Style Protocols (CPSPs), studying their formal relationship with session types. We illustrate how session programming can be carried over in Scala: how to formalise a communication protocol, and represent it using Scala classes and lchannels, letting the compiler help spotting protocol violations. We attest the practicality of our approach with a complex use case, and evaluate the performance of lchannels with a series of benchmarks.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"33 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-07-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121067599","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Johannes Späth, Lisa Nguyen Quang Do, Karim Ali, E. Bodden
{"title":"Boomerang: Demand-Driven Flow- and Context-Sensitive Pointer Analysis for Java","authors":"Johannes Späth, Lisa Nguyen Quang Do, Karim Ali, E. Bodden","doi":"10.4230/LIPIcs.ECOOP.2016.22","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2016.22","url":null,"abstract":"Many current program analyses require highly precise pointer \u0000information about small, tar- geted parts of a given program. This \u0000motivates the need for demand-driven pointer analyses that compute \u0000information only where required. Pointer analyses generally compute \u0000points-to sets of program variables or answer boolean alias \u0000queries. However, many client analyses require richer pointer \u0000information. For example, taint and typestate analyses often need to \u0000know the set of all aliases of a given variable under a certain \u0000calling context. With most current pointer analyses, clients must \u0000compute such information through repeated points-to or alias queries, increasing complexity and computation time for them. \u0000 \u0000This paper presents Boomerang, a demand-driven, flow-, field-, and \u0000context-sensitive pointer analysis for Java programs. Boomerang \u0000computes rich results that include both the possible allocation sites of a given pointer (points-to information) and all pointers that can point to those allocation sites (alias information). For increased precision and scalability, clients can query Boomerang with respect to particular calling contexts of interest. \u0000 \u0000Our experiments show that Boomerang is more precise than existing \u0000demand-driven pointer analyses. Additionally, using Boomerang, the \u0000taint analysis FlowDroid issues up to 29.4x fewer pointer queries \u0000compared to using other pointer analyses that return simpler pointer \u0000infor- mation. Furthermore, the search space of Boomerang can be \u0000significantly reduced by requesting calling contexts from the client \u0000analysis.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"14 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"122942085","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"IceDust: Incremental and Eventual Computation of Derived Values in Persistent Object Graphs","authors":"D. Harkes, D. Groenewegen, E. Visser","doi":"10.4230/LIPIcs.ECOOP.2016.11","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2016.11","url":null,"abstract":"Derived values are values calculated from base values. They can be \u0000expressed in object-oriented languages by means of getters calculating the derived value, and in relational or logic databases by means of (materialized) views. However, switching to a different calculation strategy (for example caching) in object-oriented programming requires invasive code changes, and the databases limit expressiveness by disallowing recursive aggregation. \u0000 \u0000In this paper, we present IceDust, a data modeling language for \u0000expressing derived attribute values without committing to a calculation strategy. IceDust provides three strategies for calculating derived values in persistent object graphs: Calculate-on-Read, Calculate-on-Write, and Calculate-Eventually. We have developed a path-based abstract interpretation that provides static dependency analysis to generate code for these strategies. Benchmarks show that different strategies perform better in different scenarios. In addition we have conducted a case study that suggests that derived value calculations of systems used in practice can be expressed in IceDust.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"174 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-07-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"116389777","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
G. Delbianco, Ilya Sergey, Aleksandar Nanevski, A. Banerjee
{"title":"Concurrent Data Structures Linked in Time","authors":"G. Delbianco, Ilya Sergey, Aleksandar Nanevski, A. Banerjee","doi":"10.4230/LIPIcs.ECOOP.2017.8","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2017.8","url":null,"abstract":"Arguments about correctness of a concurrent data structure are typically carried out by using the notion of linearizability and specifying the linearization points of the data structure's procedures. Such arguments are often cumbersome as the linearization points' position in time can be dynamic (depend on the interference, run-time values and events from the past, or even future), non-local (appear in procedures other than the one considered), and whose position in the execution trace may only be determined after the considered procedure has already terminated. In this paper we propose a new method, based on a separation-style logic, for reasoning about concurrent objects with such linearization points. We embrace the dynamic nature of linearization points, and encode it as part of the data structure's auxiliary state, so that it can be dynamically modified in place by auxiliary code, as needed when some appropriate run-time event occurs. We name the idea linking-in-time, because it reduces temporal reasoning to spatial reasoning. For example, modifying a temporal position of a linearization point can be modeled similarly to a pointer update in separation logic. Furthermore, the auxiliary state provides a convenient way to concisely express the properties essential for reasoning about clients of such concurrent objects. We illustrate the method by verifying (mechanically in Coq) an intricate optimal snapshot algorithm due to Jayanti, as well as some clients.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"30 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"114286024","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Composing Interfering Abstract Protocols","authors":"Filipe Militão, Jonathan Aldrich, Luís Caires","doi":"10.4230/LIPIcs.ECOOP.2016.16","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2016.16","url":null,"abstract":"The undisciplined use of shared mutable state can be a source of program errors when aliases unsafely interfere with each other. \u0000While protocol-based techniques to reason about interference abound, they do not address two practical concerns: the decidability of protocol composition and its integration with protocol abstraction. \u0000We show that our composition procedure is decidable and that it ensures safe interference even when composing abstract protocols. \u0000To evaluate the expressiveness of our protocol framework for safe shared memory interference, we show how this same protocol framework can be used to model safe, typeful message-passing concurrency idioms.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2016-04-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115189739","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
Carl Friedrich Bolz-Tereick, Darya Kurilova, L. Tratt
{"title":"Making an Embedded DBMS JIT-friendly","authors":"Carl Friedrich Bolz-Tereick, Darya Kurilova, L. Tratt","doi":"10.4230/LIPIcs.ECOOP.2016.4","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2016.4","url":null,"abstract":"While database management systems (DBMSs) are highly optimized, interactions across the boundary between the programming language (PL) and the DBMS are costly, even for in-process embedded DBMSs. In this paper, we show that programs that interact with the popular embedded DBMS SQLite can be significantly optimized - by a factor of 3.4 in our benchmarks - by inlining across the PL / DBMS boundary. We achieved this speed-up by replacing parts of SQLite's C interpreter with RPython code and composing the resulting meta-tracing virtual machine (VM) - called SQPyte - with the PyPy VM. SQPyte does not compromise stand-alone SQL performance and is 2.2% faster than SQLite on the widely used TPC-H benchmark suite.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"9 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-12-10","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133114097","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Scalable and Precise Static Analysis of JavaScript Applications via Loop-Sensitivity","authors":"Changhee Park, Sukyoung Ryu","doi":"10.4230/LIPIcs.ECOOP.2015.735","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2015.735","url":null,"abstract":"The numbers and sizes of JavaScript applications are ever growing but static analysis techniques for analyzing large-scale JavaScript applications are not yet ready in a scalable and precise manner. Even when building complex software like compilers and operating systems in JavaScript, developers do not get much benefits from existing static analyzers, which suffer from mutually intermingled problems of scalability and imprecision. \u0000 \u0000In this paper, we present Loop-Sensitive Analysis (LSA) that improves the analysis scalability by enhancing the analysis precision in loops. LSA distinguishes loop iterations as many as needed by automatically choosing loop unrolling numbers during analysis. We formalize LSA in the abstract interpretation framework and prove its soundness and precision theorems using Coq. We evaluate our implementation of LSA using the analysis results of main web pages in the 5 most popular websites and those of the programs that use top 5 JavaScript libraries, and show that it outperforms the state-of-the-art JavaScript static analyzers in terms of analysis scalability. Our mechanization and implementation of LSA are both publicly available.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"125 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-07-10","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121791882","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Concrete Types for TypeScript","authors":"G. Richards, Francesco Zappa Nardelli, J. Vitek","doi":"10.4230/LIPIcs.ECOOP.2015.76","DOIUrl":"https://doi.org/10.4230/LIPIcs.ECOOP.2015.76","url":null,"abstract":"Typescript extends JavaScript with optional type annotations that are, by design, unsound and, that the Typescript compiler discards as it emits code. This design point preserves programming idioms developers are familiar with, and allows them to leave their legacy code unchanged, while offering a measure of static error checking in parts of the program that have type annotations. We present an alternative design for TypeScript, one where it is possible to support the same degree of dynamism, but where types can be strengthened to provide hard guarantees. We report on an implementation, called StrongScript, that improves runtime performance of typed programs when run on a modified version of the V8 JavaScript engine.","PeriodicalId":172012,"journal":{"name":"European Conference on Object-Oriented Programming","volume":"6 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-07-05","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127147163","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}