Network


Latest external collaboration on country level. Dive into details by clicking on the dots.

Hotspot


Dive into the research topics where John H. G. van Groningen is active.

Publication


Featured researches published by John H. G. van Groningen.


international conference on functional programming | 1991

Generating efficient code for lazy functional languages

Sjaak Smetsers; Eric Nöcker; John H. G. van Groningen; Rinus Plasmeijer

In this paper we will discuss how a good code generator can be built for (lazy) functional languages. Starting from Concurrent Clean, an experimental lazy functional programming language, code is generated for an intermediate abstract machine: the ABC machine. In this first pass many well-known optimisation techniques are included. However, we will also present some new ideas in this area, like the way in which strictness can be incorporated, and the implementation of higher order functions. In a second pass, the ABC code is translated to concrete target code for the Motorola MC680x0 processor. Again many optimisation methods appear to be applicable. Some of them (for example register allocation algorithms) are common for the implementation of other types of languages, but have to be adapted because of the specific properties of both source language and target machine. Other optimisations are specific for lazy functional languages, e.g. the implementation of higher order functions, efficient memory management and the optimised graph reduction. Measurements demonstrate that due to the optimisations of both passes very fast code can be generated. We have compared Concurrent Clean with two other functional languages, namely Lml and Hope, and also with the imperative language C. With respect to both functional languages this comparison clearly goes in favour of Concurrent Clean. Furthermore, we can conclude that, when using the presented compilation techniques, a lazy functional language is able to compete even with an imperative language such as C.


implementation and application of functional languages | 1996

The Implementation and Efficiency of Arrays in Clean 1.1

John H. G. van Groningen

We present a new approach to implementing arrays in a pure lazy functional programming language. The arrays can be updated destructively by using uniqueness typing, and the elements can be unboxed. We describe the implementation of these arrays in the functional programming language Clean 1.1. The performance of two sorting algorithms and a fast fourier transformation written in Clean using arrays is compared with similar programs written in C. The current implementation of Clean is on average about 25 percent slower than C for these programs.


partial evaluation and semantic-based program manipulation | 2011

iTasks for a change: type-safe run-time change in dynamically evolving workflows

Rinus Plasmeijer; Peter Achten; Pieter W. M. Koopman; Bas Lijnse; Thomas van Noort; John H. G. van Groningen

Workflow management systems (WFMS) are software systems that coordinate the tasks human workers and computers have to perform to achieve a certain goal based on a given workflow description. Due to changing circumstances, it happens often that some tasks in a running workflow need to be performed differently than originally planned and specified. Most commercial WFMSs cannot deal with the required run-time changes properly. These changes have to be specified at the level of the underlying Petri-Net based semantics. Moreover, the implicit external state has to be adapted to the new task as well. Such low-level updates can easily lead to wrong behaviour and other errors. This problem is known as the dynamic change bug. In the iTask WFMS, workflows are specified using a radically different approach: workflows are constructed in a compositional style, using pure functions and combinators as self-contained building blocks. This paper introduces a change concept for the iTask system where self-contained tasks can be replaced by other self-contained tasks, thereby preventing dynamic change bugs. The static and dynamic typing system furthermore guarantees that these tasks have compatible types.


implementation and application of functional languages | 2002

Fusion in practice

Diederik van Arkel; John H. G. van Groningen; Sjaak Smetsers

Deforestation was introduced to eliminate intermediate data structures used to connect separate parts of a functional program together. Fusion is a more sophisticated technique, based on a producer-consumer model, to eliminate intermediate data structures. It achieves better results. In this paper we extend this fusion algorithm by refining this model, and by adding new transformation rules. The extended fusion algorithm is able to deal with standard deforestation, but also with higher-order function removal and dictionary elimination. We have implemented this extended algorithm in the Clean 2.0 compiler.


implementation and application of functional languages | 1999

Optimising Recursive Functions Yielding Multiple Results in Tuples in a Lazy Functional Language

John H. G. van Groningen

We discuss a new optimisation for recursive functions yielding multiple results in tuples for lazy functional languages, like Clean and Haskell. This optimisation improves the execution time of such functions and also reduces the amount of memory allocated in the heap by these functions, which reduces garbage collection costs. In some cases execution time is improved by more than a factor of two and allocation costs by a factor of four. Furthermore, the space leak that is caused by selector nodes is removed.


implementation and application of functional languages | 2016

A Portable VM-based implementation Platform for non-strict Functional Programming Languages

Jan B.M.J. Jansen; John H. G. van Groningen

The Web has become a paramount deployment platform for computer applications. Modern Web applications require execution of code on both server- and client-side. For the client-side JavaScript is the more-or-less default platform for execution of code. Users of Functional Programming languages like Haskell and Clean, who want to develop their software completely in these languages, are forced to rely on dedicated methods to transform their code to something that can be executed on top of JavaScript. In this paper we introduce a Virtual Machine that is capable of efficient execution of bytecode generated by a compiler for a non-strict intermediate functional language. The virtual machine has several implementations supporting the same bytecode, including JavaScript and asm.js versions. In this way we obtain a portable execution platform for non-strict Functional languages with a better client-side performance than existing client-side execution platforms.


glasgow workshop on functional programming | 1992

High Level Specification of I/O in Functional Languages

Peter Achten; John H. G. van Groningen; Rinus Plasmeijer

The interface with the outside world has always been one of the weakest points of functional languages. It is not easy to incorporate I/O without being allowed to do side-effects. Furthermore, functional languages allow redexes to be evaluated in any order while I/O generally has to be performed in a very specific order. In this paper we present a new solution for the I/O problem which we have incorporated in the language Concurrent Clean. Concurrent Clean offers a linear type system called Unique Types. It makes it possible to define functions with side-effects without violating the functional semantics. Now it is possible to change any object in the world in the way we wanted: e.g. arrays can be updated in-situ, arbitrary file manipulation is possible. We have used this powerful tool among others to create a library for window based I/O. Using an explicit environment passing scheme provides a high-level and elegant functional specification method for I/O, called Event I/O. Now the specification of I/O has become one of the strengths of functional languages: interactive programs written in Concurrent Clean are concise, easy to write and comprehend as well as efficient. The presented solution can in principle be applied for any other functional language as well provided that it actually uses graph rewriting semantics in the implementation.


implementation and application of functional languages | 2017

A Distributed Dynamic Architecture for Task Oriented Programming

Arjan Oortgiese; John H. G. van Groningen; Peter Achten; Rinus Plasmeijer

Task Oriented Programming (TOP) is a special flavor of functional programming for real-world application domains in which people and automated systems collaborate to achieve a common goal. The original iTasks framework, which implements TOP, uses a single server multi-client architecture. This is not suited for truly distributed application domains, such as deployed by the Dutch coast guard. In this paper we show how to turn this architecture into a distributed, dynamic, architecture. This is done in an elegant way, by building on the core concepts of TOP and iTasks.


Archive | 1991

EFFICIENT HEAP MANAGEMENT IN THE CONCRETE ABC MACHINE

John H. G. van Groningen; Eric Nöcker; Sjaak Smetsers


PLOS ONE | 2010

Exchanging sources between clean and Haskell: a double-edged front end for the clean compiler

John H. G. van Groningen; Thomas van Noort; Peter Achten; Pieter W. M. Koopman; Rinus Plasmeijer

Collaboration


Dive into the John H. G. van Groningen's collaboration.

Top Co-Authors

Avatar

Rinus Plasmeijer

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Peter Achten

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Sjaak Smetsers

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Eric Nöcker

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar
Top Co-Authors

Avatar

Thomas van Noort

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Arjan Oortgiese

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Bas Lijnse

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Diederik van Arkel

Radboud University Nijmegen

View shared research outputs
Top Co-Authors

Avatar

Jan B.M.J. Jansen

Radboud University Nijmegen

View shared research outputs
Researchain Logo
Decentralizing Knowledge