+ 1 -

haskell introduction history

A History of Haskell : Being Lazy With Class

Paul Hudak John Hugues Simon Peyton Jones Philip Wadler (2007)

This paper describes the history of Haskell, including its genesis and principles, technical contributions, implementations and tools, and applications and impact.

Commenter

Lire maintenant ?

+ 1 -

JIT control flow optimization python

Allocation Removal by Partial Evaluation in a Tracing JIT

Carl Friedrich Bolz Antonio Cunia Maciej Fijałkowski Michael Leuschel Samuele Pedroni Armin Rigo (2010)

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.

Un commentaire

Lire maintenant ?

+ 1 -

type system real world dependent types data processing

The Next 700 Data Description Languages (PDF)

Kathleen Fisher Yitzhak Mandelbaum David Walker (2006)

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.

Commenter

Lire maintenant ?

+ 1 -

language design control flow error handling syntax

Exceptional syntax

Nick Benton Andrew Kennedy (2001)

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.

Un commentaire

Lire maintenant ?

+ 1 -

language implementation virtual machines JIT language tower

Optimization of dynamic languages using hierarchical layering of virtual machines

Alexander Yermolovich Christian Wimmer Michael Franz (2009)

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.

Commenter

Lire maintenant ?