Open Access. Powered by Scholars. Published by Universities.®

Articles 1 - 9 of 9

Full-Text Articles in Programming Languages and Compilers

A Survey Of Practical Haskell: Parsing, Interpreting, And Testing, Parker Landon May 2024

A Survey Of Practical Haskell: Parsing, Interpreting, And Testing, Parker Landon

Honors Projects

Strongly typed pure functional programming languages like Haskell have historically been confined to academia as vehicles for programming language research. While features of functional programming have greatly influenced mainstream programming languages, the imperative programming style remains pervasive in practical software development. This paper illustrates the practical utility of Haskell and pure functional programming by exploring “hson,” a scripting language for processing JSON developed in Haskell. After introducing the relevant features of Haskell to the unfamiliar reader, this paper reveals how hson leverages functional programming to implement parsing, interpreting, and testing. By showcasing how Haskell’s language features enable the creation of …


Wasm-Pbchunk: Incrementally Developing A Racket-To-Wasm Compiler Using Partial Bytecode Compilation, Adam C. Perlin Jun 2023

Wasm-Pbchunk: Incrementally Developing A Racket-To-Wasm Compiler Using Partial Bytecode Compilation, Adam C. Perlin

Master's Theses

Racket is a modern, general-purpose programming language with a language-oriented focus. To date, Racket has found notable uses in research and education, among other applications. To expand the reach of the language, there has been a desire to develop an efficient platform for running Racket in a web-based environment. WebAssembly (Wasm) is a binary executable format for a stack-based virtual machine designed to provide a fast, efficient, and secure execution environment for code on the web. Wasm is primarily intended to be a compiler target for higher-level languages. Providing Wasm support for the Racket project may be a promising way …


Poor Man’S Trace Cache: A Variable Delay Slot Architecture, Tino C. Moore Jan 2022

Poor Man’S Trace Cache: A Variable Delay Slot Architecture, Tino C. Moore

Dissertations, Master's Theses and Master's Reports

We introduce a novel fetch architecture called Poor Man’s Trace Cache (PMTC). PMTC constructs taken-path instruction traces via instruction replication in static code and inserts them after unconditional direct and select conditional direct control transfer instructions. These traces extend to the end of the cache line. Since available space for trace insertion may vary by the position of the control transfer instruction within the line, we refer to these fetch slots as variable delay slots. This approach ensures traces are fetched along with the control transfer instruction that initiated the trace. Branch, jump and return instruction semantics as well as …


Jparsec - A Parser Combinator For Javascript, Sida Zhong Jan 2022

Jparsec - A Parser Combinator For Javascript, Sida Zhong

Master's Projects

Parser combinators have been a popular parsing approach in recent years. Compared with traditional parsers, a parser combinator has both readability and maintenance advantages.

This project aims to construct a lightweight parser construct library for Javascript called Jparsec. Based on the modular nature of a parser combinator, the implementation uses higher-order functions. JavaScript provides a friendly and simple way to use higher-order functions, so the main construction method of this project will use JavaScript's lambda functions. In practical applications, a parser combinator is mainly used as a tool, such as parsing JSON files.

In order to verify the utility of …


Jited: A Framework For Jit Education In The Classroom, Caleb Watts Dec 2021

Jited: A Framework For Jit Education In The Classroom, Caleb Watts

Master's Theses

The study of programming languages is a rich field within computer science, incorporating both the abstract theoretical portions of computer science and the platform specific details. Topics studied in programming languages, chiefly compilers or interpreters, are permanent fixtures in programming that students will interact with throughout their career. These systems are, however, considerably complicated, as they must cover a wide range of functionality in order to enable languages to be created and run. The process of educating students thus requires that the demanding workload of creating one of the systems be balanced against the time and resources present in a …


Towards A Complete Formal Semantics Of Rust, Alexa White Mar 2021

Towards A Complete Formal Semantics Of Rust, Alexa White

Master's Theses

Rust is a relatively new programming language with a unique memory model designed to provide the ease of use of a high-level language as well as the power and control of a low-level language while preserving memory safety. In order to prove the safety and correctness of Rust and to provide analysis tools for its use cases, it is necessary to construct a formal semantics of the language. Existing efforts to construct such a semantic model are limited in their scope and none to date have successfully captured the complete functionality of the language. This thesis focuses on the K-Rust …


Polyhedral+Dataflow Graphs, Eddie C. Davis May 2020

Polyhedral+Dataflow Graphs, Eddie C. Davis

Boise State University Theses and Dissertations

This research presents an intermediate compiler representation that is designed for optimization, and emphasizes the temporary storage requirements and execution schedule of a given computation to guide optimization decisions. The representation is expressed as a dataflow graph that describes computational statements and data mappings within the polyhedral compilation model. The targeted applications include both the regular and irregular scientific domains.

The intermediate representation can be integrated into existing compiler infrastructures. A specification language implemented as a domain specific language in C++ describes the graph components and the transformations that can be applied. The visual representation allows users to reason about …


Processj: A Process-Oriented Programming Language, Matthew Sowders Dec 2011

Processj: A Process-Oriented Programming Language, Matthew Sowders

UNLV Theses, Dissertations, Professional Papers, and Capstones

Java is a general purpose object-oriented programming language that has been widely adopted. Because of its high adoption rate and its lineage as a C-style language, its syntax is familiar to many programmers. The downside is that Java is not natively concurrent. Volumes have been written about concurrent programming in Java; however, concurrent programming is difficult to reason about within an object-oriented paradigm and so is difficult to get right.

occam -π is a general purpose process-oriented programming language. Concurrency is part of the theoretical underpinnings of the language. Concurrency is simple to reason about within an occam -π application …


Post Register Allocation Spill Code Optimization, Christopher Lupo, Kent Wilken Mar 2006

Post Register Allocation Spill Code Optimization, Christopher Lupo, Kent Wilken

Computer Science and Software Engineering

A highly optimized register allocator should provide an efficient placement of save/restore code for procedures that contain calls. This paper presents a new approach to placing callee-saved save and restore instructions that generalizes Chow's shrink-wrapping technique (Chow 1988). An efficient, profile-guided, hierarchical spill code placement algorithm is used to analyze the structure of a procedure to calculate the minimum dynamic execution count locations to place callee-saved save and restore code. The algorithm is implemented in the Gnu Compiler Collection and has been tested on the SPEC CPU2000 Integer Benchmark suite. Results show that the technique reduces the number of dynamic …