Dept. of Computer Science and Engineering
Oregon Health & Science University
Computers are ubiquitous in modern society. They come in all shapes and sizes: from standard household appliances and personal computers, to safety and security critical applications such as vehicle navigation and control systems, bank ATMs, defense applications, and medical devices. Modern programming languages offer many features that help developers to increase their productivity and to produce more reliable and flexible systems. It is therefore somewhat surprising that the programs that control many computers are written in older, less robust languages, or even in a lower-level assembly language. This situation is the result of many factors, some entirely non-technical. However, at least in part, the problem has to do with genuine difficulties in matching the results and focus of programming language research to the challenges and context of developing systems software. This dissertation shows how to extend a modern statically-typed functional programming language with features that make it suitable for solving problems that are common in systems programming. Of particular interest is the problem of manipulating data with rigid representation requirements in a safe manner. Typically, the constraints on the representation of the data are imposed by an external specification such as an operating system binary interface or the datasheet for a hardware device. The design provides support for two classes of datatypes whose representation is under programmer control. The first class consists of datatypes that are stored in bit fields and accessed as part of a single machine word. Standard examples can be found in operating system APIs, in the control register formats that are used by device drivers, in multimedia and compression codecs, and in programs like assemblers and debuggers that work with machine code instruction encodings. The second class consists of datatypes that require a fixed representation in regions of memory. Often these 'memory areas' are specific to a particular processor architecture, hardware device, or OS kernel. The approach builds upon well established programming language technology, such as type inference, polymorphism, qualified types, and the use of monads to control the scope of effects.
OGI School of Science and Engineering
Diatchki, Iavor Sotirov, "High-Level Abstractions for Low-Level Programming" (2007). Scholar Archive. 122.