A History of Haskell : Being Lazy With Class
This paper describes the history of Haskell, including its genesis and principles, technical contributions, implementations and tools, and applications and impact.
Lire maintenant ?
This paper describes the history of Haskell, including its genesis and principles, technical contributions, implementations and tools, and applications and impact.
Lire maintenant ?
The performance of many dynamic language implementations suffers from high allocation rates and runtime type checks. This makes dynamic languages less applicable to purely algorithmic problems, despite their growing popularity. In this paper we present a simple compiler optimization based on online partial evaluation to remove object allocations and runtime type checks in the context of a tracing JIT. We evaluate the optimization using a Python VM and find that it gives good results for all our (real-life) benchmarks.
Lire maintenant ?
An ad hoc data format is any non-standard data format. Typically, such formats do
not have parsing, querying, analysis, or transformation tools readily available. Every day,
network administrators, financial analysts, computer scientists, biologists, chemists, as-
tronomers, and physicists deal with ad hoc data in a myriad of complex formats. Figure 1
gives a partial sense of the range and pervasiveness of such data. Since off-the-shelf tools
for processing these ad hoc data formats do not exist or are not readily available, talented
scientists, data analysts, and programmers must waste their time on low-level chores like
parsing and format translation to extract the valuable information they need from their data.
[…]
The primary goal of this paper is to begin to understand the family of ad hoc data processing languages. We do so, as Landin did, by developing a semantic framework for defining, comparing, and contrasting languages in our domain. This semantic framework revolves around the definition of a data description calculus (DDCα). This calculus uses types from a dependent type theory to describe various forms of ad hoc data: base types to describe atomic pieces of data and type constructors to describe richer structures. We show how to give a denotational semantics to DDCα by interpreting types as parsing functions that map external representations (bits) to data structures in a typed lambda calculus. More precisely, these parsers produce both internal representations of the external data and parse descriptors that pinpoint errors in the original source.
Lire maintenant ?
From the points of view of programming pragmatics, rewriting and operational semantics, the syntactic construct used for exception handling in ML-like programming languages, and in much theoretical work on exceptions, has subtly undesirable features. We propose and discuss a more well-behaved construct.
Lire maintenant ?
Creating an interpreter is a simple and fast way to implement a dynamic programming language. With this ease also come major drawbacks. Interpreters are significantly slower than compiled machine code because they have a high dispatch overhead and cannot perform optimizations. To overcome these limitations, interpreters are commonly combined with just-in-time compilers to improve the overall performance. However, this means that a just-in-time compiler has to be implemented for each language.
We explore the approach of taking an interpreter of a dynamic language and running it on top of an optimizing trace-based virtual machine, i.e., we run a guest VM on top of a host VM. The host VM uses trace recording to observe the guest VM executing the application program. Each recorded trace represents a sequence of guest VM bytecodes corresponding to a given execution path through the application program. The host VM optimizes and compiles these traces to machine code, thus eliminating the need for a custom just-in-time compiler for the guest VM. The guest VM only needs to provide basic information about its interpreter loop to the host VM.
Lire maintenant ?