Skip to main content

    Rinus Plasmeijer

    functional languages, the shape of the external world af- fects both our understanding of I/O and how we would wish to have I/O expressed. This paper takes the first tentative steps at examining the consequences of using an explicit model... more
    functional languages, the shape of the external world af- fects both our understanding of I/O and how we would wish to have I/O expressed. This paper takes the first tentative steps at examining the consequences of using an explicit model of the external world-state when reasoning (using tool-support) about the behaviour of lazy functional pro- grams. We construct a file-system model and develop a monadic language which lets us structure I/O. Two proofs are then performed regarding the observable eect of real- world functional I/O, and it is shown how properties of the file-system lend themselves naturally to the modelling of concurrent behaviour on a single, global state. All proofs in this paper were machine-verified using the Sparkle proof- assistant.
    When writing a user interface (UI), the layout of its elements play an important role. Programmers should be able to specify the layout of UIs in an intuitive way, while being able to separate the concern of laying out the UI from the... more
    When writing a user interface (UI), the layout of its elements play an important role. Programmers should be able to specify the layout of UIs in an intuitive way, while being able to separate the concern of laying out the UI from the rest of the software implementation. Ideally, the same layout language can be used in multiple application domains, so the programmer only has to learn one set of layout concepts. In this paper we introduce such a general-purpose layout language. We obtain this language by abstracting from a layout language we have introduced in previous work for declaratively defining Scalable Vector Graphics (SVG). We show that this abstract layout language can be instantiated for multiple domains: the SVG library by which the language is inspired, ncurses-based text-based user interfaces, and iTasks. In all of these cases, a separation of concerns is maintained.
    IFL'03: 15th International Symposium on the Implementation of Functional Languages, Edinburgh, Scotland, September 8th - 10th, 2003
    The Internet of Things, IoT, brings us large amounts of connected computing devices that are equipped with dedicated sensors and actuators. These computing devices are typically driven by a cheap microprocessor system with a relatively... more
    The Internet of Things, IoT, brings us large amounts of connected computing devices that are equipped with dedicated sensors and actuators. These computing devices are typically driven by a cheap microprocessor system with a relatively slow processor and a very limited amount of memory. Due to the special input-output capabilities of IoT devices and their connections it is very attractive to execute (parts of) programs on these microcomputers.
    In this paper we present the iData Toolkit. This toolkit offers web programmers a novel approach to programming interactive, dynamic web-sites with state on a high level of abstraction. The used concepts are inspired on our previous work... more
    In this paper we present the iData Toolkit. This toolkit offers web programmers a novel approach to programming interactive, dynamic web-sites with state on a high level of abstraction. The used concepts are inspired on our previous work on GUI programming. The key idea is to program applications with pure functional data models and functions from which the desktop GUI is derived automatically. In this paper we transfer these high level concepts to the web and show that web applications can be programmed in the same style. In addition we incorporate a number of improvements to the programming method. Because web technology is completely different from desktop GUI programming, we had to design an entirely new implementation method. The essential parts of this implementation rely on generic programming techniques. This has resulted in a concise and flexible implementation. The iData Toolkit is an excellent case study in applying generic programming techniques.
    This paper extends our method to construct a shallow embedded domain specific language, DSL, embedded in a function programming language. We show how one can add functions and tasks that are typed by the type system of the functional host... more
    This paper extends our method to construct a shallow embedded domain specific language, DSL, embedded in a function programming language. We show how one can add functions and tasks that are typed by the type system of the functional host language. The DSL is clearly separated from its host functional language to facilitate the compilation to small executables in C++. The type system of the host language verifies the types in the DSL, including the types and proper use of variables. The DSL is extendable by new language constructs and interpretations without breaking any existing code. The type system guarantees that everything used in a DSL program is properly defined. We apply these techniques for a DSL to program Arduino microprocessor systems from Clean. The long term goal is to incorporate these microprocessors in the iTask system.
    Functional programming languages have been successfully employed to make executable neural network descriptions. For the sake of efficiency, the programs are mixtures between descriptions of the behaviour and the data-flow needed to... more
    Functional programming languages have been successfully employed to make executable neural network descriptions. For the sake of efficiency, the programs are mixtures between descriptions of the behaviour and the data-flow needed to obtain an efficient algorithm. This has a bad influence on the descriptions' readability. In this paper, we will present a functional description of a neural network which isn't hampered by any efficiency considerations. Our description of a neural network is a mathematical specification of that network. Using an ordinary functional programming language evaluation strategy, our network description has a time complexity which is exponential in the number of learning steps of the network. Using an evaluation strategy which is improved with a memoizing facility, the specification has an almost linear time complexity in the number of learning steps.
    Microcontroller Units (MCUs) are all around us powering many of our so called smart devices. Most programs running on MCUs are control applications performing multiple jobs at the same time. Examples of these jobs are: blinking a status... more
    Microcontroller Units (MCUs) are all around us powering many of our so called smart devices. Most programs running on MCUs are control applications performing multiple jobs at the same time. Examples of these jobs are: blinking a status LED, reading button states, talking to sensors or communicating with the world. Often these jobs are dependent on each other and require communication between them. Small MCUs have no support for multiple threads, therefore the programmer needs to manually interleave the tasks. The job structure bears great similarities with tasks in Task Oriented Programming (TOP). Tasks representing work that needs to be done, can be interleaved and combined to form compound tasks. The embedded Domain Specific Language (eDSL) mTask is a TOP language that works on even the smallest of MCUs. This paper explains how to write multi-task control applications for MCUs using a TOP language such as mTask.
    Clean was originally designed as an experimental intermediate language and deliberately kept syntactically as poor as possible to be able to focus on the essential language and implementation issues. This strategy enabled us to study new... more
    Clean was originally designed as an experimental intermediate language and deliberately kept syntactically as poor as possible to be able to focus on the essential language and implementation issues. This strategy enabled us to study new concepts (such as term graph rewriting (Barendregt et al., 1987), lazy copying (van Eekelen et al., 1991), abstract reduction (Nöcker, 1993), uniqueness typing
    More and more applications rely on the safe execution of code unknown at compile-time, for example in the implementation of web browsers and plugin systems. Furthermore, these applications usually require some form of communication... more
    More and more applications rely on the safe execution of code unknown at compile-time, for example in the implementation of web browsers and plugin systems. Furthermore, these applications usually require some form of communication between the added code and its embedder, and hence a communication channel must be set up in which values are serialized and deserialized. This paper shows that in a functional programming language we can solve these two problems at once, if we realize that the execution of extra code is nothing more than the deserialization of a value which happens to be a function. To demonstrate this, we describe the implementation of a serialization library for the language Clean, which internally uses an interpreter to evaluate added code in a separate, sandboxed environment. Remarkable is that despite the conceptual asymmetry between "host" and "interpreter", lazy interworking must be implemented in a highly symmetric fashion, much akin to distributed systems. The library interworks on a low level with the native Clean program, but has been implemented without any changes to the native runtime system. It can therefore easily be ported to other programming languages. We can use the same technique in the context of the web, where we want to be able to share possibly lazy values between a server and a client. In this case the interpreter runs in WebAssembly in the browser and communicates seamlessly with the server, written in Clean. We use this in the iTasks web framework to handle communication and offload computations to the client to reduce stress on the server-side. Previously, this framework cross-compiled the Clean source code to JavaScript and used JSON for communication. The interpreter has a more predictable and better performance, and integration is much simpler because it interworks on a lower level with the web server.
    2.2 WhyBusinessRules? . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 Three kinds of Business Rules . . . . . . . . . . . . . . . . . . 11 2.3.1 Structuralassertions . . . . . . . . . . . . . . . . . . . 11 2.3.2... more
    2.2 WhyBusinessRules? . . . . . . . . . . . . . . . . . . . . . . . 10 2.3 Three kinds of Business Rules . . . . . . . . . . . . . . . . . . 11 2.3.1 Structuralassertions . . . . . . . . . . . . . . . . . . . 11 2.3.2 ActionassertionsorConstraints . . . . . . . . . . . . 12 2.3.3 Derivations . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.4 A different view . . . . . . . . . . . . . . . . . . . . . . 12 2.4 Case: Insurance Business Rules . . . . . . . . . . . . . . . . . 12 2.5 Related work . . . . . . . . . . . . . . . . . . . . . . ... ... 3. ADL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.1 Relational algebra . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 ADLexplained . . . . . . . . . . . . . . . . . . . . . . . . . . 18 ...
    The COSTA system infers resource consumption bounds from Java bytecode using an internal recurrence solver PUBS. This paper suggests an improvement of the COSTA system, such that it can solve a larger number of recurrences. The idea is to... more
    The COSTA system infers resource consumption bounds from Java bytecode using an internal recurrence solver PUBS. This paper suggests an improvement of the COSTA system, such that it can solve a larger number of recurrences. The idea is to replace one of its static analyses, the ranking function analysis, by another kind of analysis, height analysis, in such a way that polynomial bounds of any degree may be inferred instead of just linear expressions. The work can be seen as an application of some polynomial interpolation ...
    In a declarative programming language a computation is expressed in a static fashion, as a list of declarations. A program in such a language is regarded as a specification that happens to be executable as well. In this textbook we focus... more
    In a declarative programming language a computation is expressed in a static fashion, as a list of declarations. A program in such a language is regarded as a specification that happens to be executable as well. In this textbook we focus on a subclass of the declarative languages, the functional programming languages, sometimes called applicative languages. In these languages a program consists of a list of function definitions. The execution of a program consists of the evaluation of a function application given the ...
    ABSTRACT
    Abstract: The behavior of concurrent and parallel programs can bespecied in a functional style. We introduced a relational model for synthesizingabstract parallel imperative programs this way earlier. In thispaper we investigate the... more
    Abstract: The behavior of concurrent and parallel programs can bespecied in a functional style. We introduced a relational model for synthesizingabstract parallel imperative programs this way earlier. In thispaper we investigate the applicability of the specication and vericationtools of the model for proving temporal properties of concrete programswritten in a pure functional language, in Concurrent Clean. Destructiveupdates preserving referential transparency are possible in this...
    ABSTRACT In these lecture notes we explain how multi-user web applications can be developed in a programming style that favors tasks as main building block for the construction of such systems. A task is work that has to be performed by... more
    ABSTRACT In these lecture notes we explain how multi-user web applications can be developed in a programming style that favors tasks as main building block for the construction of such systems. A task is work that has to be performed by human-beings and computers working together on the internet. This concept has been implemented in the iTask framework as a monadic combinator library that is embedded in the pure and lazy functional programming language Clean. These lecture notes consist of many examples and exercises, and also discusses the foundation of both the iTask system and task-oriented programming.
    ABSTRACT
    Page 1. 1 June 2010 Web Based Dynamic Workflows Systems for C2 of Military Operations Jan Martin Jansen, Bas Lijnse, Rinus Plasmeijer, Tim Grant Presenter: Ariën van der Wal Nettherlands Defense Academy Radboud University Nijmegen Radboud... more
    Page 1. 1 June 2010 Web Based Dynamic Workflows Systems for C2 of Military Operations Jan Martin Jansen, Bas Lijnse, Rinus Plasmeijer, Tim Grant Presenter: Ariën van der Wal Nettherlands Defense Academy Radboud University Nijmegen Radboud University Nijmegen ...

    And 340 more