Ikarus (Scheme implementation)

Last updated
Ikarus Scheme
Ikarus Scheme Logo.png
Ikarus Scheme logo showing the mythic character Icarus flying across the sun.
Paradigms Multi-paradigm: functional, imperative, meta
Family Lisp
Designed by Abdulaziz Ghuloum
Developer Abdulaziz Ghuloum
First appearedOctober 31, 2007;17 years ago (2007-10-31)
Final release
0.0.3 / February 2, 2008;16 years ago (2008-02-02)
Preview release
0.0.3 / February 2, 2008;16 years ago (2008-02-02)
Typing discipline Dynamic, latent, strong
Scope Lexical
Implementation language Scheme, C
Platform IA-32
OS Cross-platform: macOS, Linux, FreeBSD, NetBSD, Windows XP
License GPL
Website ikarus-scheme.org:80/index.html
Influenced by
Lisp, Scheme

Ikarus Scheme is a free software optimizing incremental compiler for R6RS Scheme that compiles directly to the x86 IA-32 architecture. Ikarus is the first public implementation of a large part of the R6RS Scheme standard. [1] Version 0.0.3 has 94% of the total R6RS forms and procedures. [2] Development stopped in 2008.

Contents

Design

The compiler developer, Abdulaziz Ghuloum, was a Ph.D. student at Indiana University under R. Kent Dybvig, the developer of Chez Scheme, who has influenced the development of Ikarus.

Some of the ideas behind the design of Ikarus Scheme are detailed in "An Incremental Approach to Compiler Construction" by the developer. [3] Ikarus is self-hosting with most of the compiler and primitives written in Scheme and only a few parts of the runtime system written in C. Also, rather than using an external intermediate language like C, LLVM, or C--, it compiles directly to machine code to better exploit the underlying machine architecture.

Ikarus uses the portable R6RS library and syntax-case system which is also developed by Abdulaziz Ghuloum and is described in a paper, "Implicit phasing for R6RS libraries". [4] Finally, the paper "Generation-Friendly Eq Hash Tables" covers the hash table implementation in Ikarus. [5]

System requirements

Ikarus runs on x86 but requires SSE2 support to handle floating-point arithmetic (FP) computations so it will not produce code for Intel chips earlier than Pentium 4 or for Advanced Micro Devices (AMD) chips before Athlon 64. Release 0.0.3 has been tested and runs on:

Related Research Articles

<span class="mw-page-title-main">Common Lisp</span> Programming language standard

Common Lisp (CL) is a dialect of the Lisp programming language, published in American National Standards Institute (ANSI) standard document ANSI INCITS 226-1994 (S2018). The Common Lisp HyperSpec, a hyperlinked HTML version, has been derived from the ANSI Common Lisp standard.

<span class="mw-page-title-main">Scheme (programming language)</span> Dialect of Lisp

Scheme is a dialect of the Lisp family of programming languages. Scheme was created during the 1970s at the MIT Computer Science and Artificial Intelligence Laboratory and released by its developers, Guy L. Steele and Gerald Jay Sussman, via a series of memos now known as the Lambda Papers. It was the first dialect of Lisp to choose lexical scope and the first to require implementations to perform tail-call optimization, giving stronger support for functional programming and associated techniques such as recursive algorithms. It was also one of the first programming languages to support first-class continuations. It had a significant influence on the effort that led to the development of Common Lisp.

<span class="mw-page-title-main">Netwide Assembler</span> Assembler for the Intel x86 architecture

The Netwide Assembler (NASM) is an assembler and disassembler for the Intel x86 architecture. It can be used to write 16-bit, 32-bit (IA-32) and 64-bit (x86-64) programs. It is considered one of the most popular assemblers for Linux and x86 chips.

In computing, cross-platform software is computer software that is designed to work in several computing platforms. Some cross-platform software requires a separate build for each platform, but some can be directly run on any platform without special preparation, being written in an interpreted language or compiled to portable bytecode for which the interpreters or run-time packages are common or standard components of all supported platforms.

x86 assembly language is the name for the family of assembly languages which provide some level of backward compatibility with CPUs back to the Intel 8008 microprocessor, which was launched in April 1972. It is used to produce object code for the x86 class of processors.

x86-64 64-bit version of x86 architecture

x86-64 is a 64-bit version of the x86 instruction set, first announced in 1999. It introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging mode.

<span class="mw-page-title-main">Apache Groovy</span> Programming language

Apache Groovy is a Java-syntax-compatible object-oriented programming language for the Java platform. It is both a static and dynamic language with features similar to those of Python, Ruby, and Smalltalk. It can be used as both a programming language and a scripting language for the Java Platform, is compiled to Java virtual machine (JVM) bytecode, and interoperates seamlessly with other Java code and libraries. Groovy uses a curly-bracket syntax similar to Java's. Groovy supports closures, multiline strings, and expressions embedded in strings. Much of Groovy's power lies in its AST transformations, triggered through annotations.

Object Pascal is an extension to the programming language Pascal that provides object-oriented programming (OOP) features such as classes and methods.

An incremental compiler is a kind of incremental computation applied to the field of compilation. Quite naturally, whereas ordinary compilers make a so-called clean build, that is, (re)build all program modules, an incremental compiler recompiles only modified portions of a program.

<span class="mw-page-title-main">Watcom C/C++</span>

Watcom C/C++ is an integrated development environment (IDE) product from Watcom International Corporation for the C, C++, and Fortran programming languages. Watcom C/C++ was a commercial product until it was discontinued, then released under the Sybase Open Watcom Public License as Open Watcom C/C++. It features tools for developing and debugging code for DOS, OS/2, Windows, and Linux operating systems, which are based upon 16-bit x86, 32-bit IA-32, or 64-bit x86-64 compatible processors.

<span class="mw-page-title-main">Racket (programming language)</span> Lisp dialect

Racket is a general-purpose, multi-paradigm programming language. The Racket language is a modern dialect of Lisp and a descendant of Scheme. It is designed as a platform for programming language design and implementation. In addition to the core Racket language, Racket is also used to refer to the family of programming languages and set of tools supporting development on and with Racket. Racket is also used for scripting, computer science education, and research.

<span class="mw-page-title-main">Chicken (Scheme implementation)</span> Scheme-based programming language implementation

Chicken is a programming language, specifically a compiler and interpreter which implement a dialect of the programming language Scheme, and which compiles Scheme source code to standard C. It is mostly R5RS compliant and offers many extensions to the standard. The newer R7RS standard is supported through an extension library. Chicken is free and open-source software available under a BSD license. It is implemented mostly in Scheme, with some parts in C for performance or to make embedding into C programs easier.

The Portable C Compiler is an early compiler for the C programming language written by Stephen C. Johnson of Bell Labs in the mid-1970s, based in part on ideas proposed by Alan Snyder in 1973, and "distributed as the C compiler by Bell Labs... with the blessing of Dennis Ritchie."

ISLISP is a programming language in the Lisp family standardized by the International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC) joint working group ISO/IEC JTC 1/SC 22/WG 16. The primary output of this working group was an international standard, published by ISO. The standard was updated in 2007 and republished as ISO/IEC 13816:2007(E). Although official publication was through ISO, versions of the ISLISP language specification are available that are believed to be in the public domain.

Chez Scheme is a programming language, a dialect and implementation of the language Scheme which is a type of Lisp. It uses an incremental native-code compiler to produce native binary files for the x86, PowerPC, SPARC, and AArch64 processor architectures.

R. Kent Dybvig is a professor emeritus of computer science at Indiana University Bloomington, in Bloomington, Indiana. His research focuses on programming languages, and he is the principal developer of the optimizing Chez Scheme compiler and runtime system which were initially released in 1985. Together with Daniel P. Friedman, he has long advocated the use of the Scheme language in teaching computer science. He retired from Indiana University to join Cisco in 2011.

<span class="mw-page-title-main">Cosmos (operating system)</span> Toolkit for building GUI and command-line based operating systems

C# Open Source Managed Operating System (Cosmos) is a toolkit for building GUI and command-line based operating systems, written mostly in the programming language C# and small amounts of a high-level assembly language named X#. Cosmos is a backronym, in that the acronym was chosen before the meaning. It is open-source software released under a BSD license.

The history of the programming language Scheme begins with the development of earlier members of the Lisp family of languages during the second half of the twentieth century. During the design and development period of Scheme, language designers Guy L. Steele and Gerald Jay Sussman released an influential series of Massachusetts Institute of Technology (MIT) AI Memos known as the Lambda Papers (1975–1980). This resulted in the growth of popularity in the language and the era of standardization from 1990 onward. Much of the history of Scheme has been documented by the developers themselves.

<span class="mw-page-title-main">Red (programming language)</span> Computer programming language released in 2011

Red is a programming language designed to overcome the limitations of the programming language Rebol. Red was introduced in 2011 by Nenad Rakočević, and is both an imperative and functional programming language. Its syntax and general usage overlaps that of the interpreted Rebol language.

<span class="mw-page-title-main">Nim (programming language)</span> Programming language

Nim is a general-purpose, multi-paradigm, statically typed, compiled high-level system programming language, designed and developed by a team around Andreas Rumpf. Nim is designed to be "efficient, expressive, and elegant", supporting metaprogramming, functional, message passing, procedural, and object-oriented programming styles by providing several features such as compile time code generation, algebraic data types, a foreign function interface (FFI) with C, C++, Objective-C, and JavaScript, and supporting compiling to those same languages as intermediate representations.

References

  1. Ghuloum, Abdulaziz (2007-10-31). "Initial release of Ikarus – the compiler of choice for R6RS hackers". Newsgroup:  comp.lang.scheme. Usenet:   fg9mbr$22g$1@aioe.org . Retrieved 2007-11-28.
  2. Ghuloum, Abdulaziz (2008-02-02). "Ikarus Scheme: History". Internet Archive. Archived from the original on 2009-06-06. Retrieved 2024-09-01.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  3. Ghuloum, Abdulaziz (September 17, 2006). "An Incremental Approach to Compiler Construction" (PDF). Scheme and Functional Programming, 2006. Portland, Oregon. pp. 27–37. Retrieved 2007-11-28.
  4. Ghuloum, Abdulaziz; Dybvig, R. Kent (2007). "Implicit phasing for R6RS libraries". Proc. of the 2007 ACM SIGPLAN International Conference on Functional Programming. Freiburg, Germany. pp. 303–314. Retrieved 2007-12-01.
  5. Ghuloum, Abdulaziz; Dybvig, R. Kent (September 30, 2007). "Generation-Friendly Eq Hash Tables" (PDF). Proc. of the 2007 Workshop on Scheme and Functional Programming. Freiburg, Germany. pp. 27–36. Retrieved 2007-12-01.