Gleam is a simple Scheme language interpreter written in Java.

Overview

Gleam Scheme Interpreter

(c) 2001-2020 Guglielmo Nigri (guglielmonigri at yahoo.it, googlielmo at gmail.com)

Gleam comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions; see LICENSE.TXT.

Abstract

Gleam is a simple Scheme language interpreter written in Java.

Project goals: to support the discovery of Scheme for beginners, simplicity, R5RS compliance, full integration with the Java platform (call Java from Scheme and vice versa).

Contents

Other docs in this repository


How to build and run Gleam

See BUILD.TXT.

Project history

I started this project in 2001 while looking for a Lisp interpreter to add scripting capabilities to Java programs.

I already knew Lisp (and liked it a lot) from my university days in Pisa, Italy, and I thought I could augment Java with Lisp. It was around that time that I discovered Scheme and I was instantly fascinated by the simplicity and elegance of the language. I found out that there were already some good Java implementations of Scheme out there, but, you know, I have to try my hand at something to grok it! :-)

So I started my simple, slow implementation of an interpreter, always looking at the R5RS document for reference. One of the first things that I was curious to implement was first-class continuations. I wondered if there was a simple way to do those in Java. In fact, this being an interpreter, it was relatively easy to emulate them. For a compiler, it would be trickier. We'll see in version 2 ;-)

You might also like...

A simple ping plugin for amazing people.

SimplisticPing Download: https://github.com/LoJoSho/SimplisticPing/releases Paper Forum Post: https://forums.papermc.io/threads/simplisticping-a-ping-

Jan 9, 2022

⭕️ CircleMenu is a simple, elegant UI menu with a circular layout and material design animations

⭕️ CircleMenu is a simple, elegant UI menu with a circular layout and material design animations

⭕️ CircleMenu is a simple, elegant UI menu with a circular layout and material design animations. Android UI library made by @Ramotion

Dec 27, 2022

Simple way of causing a bsod using the native api implemented into a 1.12.2 Forge mod

Simple-BSOD-Mod Simple way of causing a bsod using the native api implemented into a 1.12.2 Forge mod. Dowload It HERE To make your own you can go to

Dec 28, 2022

A simple fabric mod which allows deepslate to be instamined

InstantDeepslate An extremely simple mod that allows you to instantly mine deepslate. This works by changing the blast resistance and break time value

Jan 31, 2022

Simple, server side api for drawing on maps with runtime only state and no id collisions

Simple, server side api for drawing on maps with runtime only state and no id collisions! It can be used in non-main/server threads for better performance/more fps.

Sep 2, 2022

Modern Java - A Guide to Java 8

Modern Java - A Guide to Java 8 This article was originally posted on my blog. You should also read my Java 11 Tutorial (including new language and AP

Jan 5, 2023

icecream-java is a Java port of the icecream library for Python.

icecream-java is a Java port of the icecream library for Python.

Apr 7, 2022

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface that is bound to the external C library using method names.

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface that is bound to the external C library using method names.

JPassport works like Java Native Access (JNA) but uses the Foreign Linker API instead of JNI. Similar to JNA, you declare a Java interface t

Dec 30, 2022

There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution.

Intro There are two versions of assignments(Java or C++) for the CS143-Compiler course, this repo is my Java-version solution. Course resources: This

Dec 15, 2022
Releases(v1.2.0)
  • v1.2.0(Feb 15, 2022)

    Release 1.2.0

    2022-02-15

    Refactor the main REPL
    
    Refactor the Logger
     - add getLogger() factory method
     - Log caller class and method name
     - Add custom LogFormatter
     - Remove per-thread logger
     - Set default logger level to INFO
    
    Bug fixes and better tests
     - Upgrade test framework to Junit 5
     - Fix: ExpressionInEnvironmentAction NPE
     - Fix: trace per Interpreter
     - Parameterized tests
     - Reader tests
    

    2020-12-27

    Refactor the Interpreter
     - Remove static environments
     - Each Interpreter instance is independently bootstrapped
     - Remove ThreadLocal Interpreter
     - Move I/O ports to Environment
     - Change access to singletons, from value() to VALUE constant
     - Change StringBuffer to StringBuilder in MutableString
     - Implement hash() and equals() in MutableString
    
    Add continuation tests
    
    Improve doc strings and help output
     - Edit/fix README.md
     - New repo links in CONTRIBUTING.md
    

    2020-11-09

    Trace actions in the REPL: enable with !tron, disable with !troff.
    Per-thread logger.
    

    2020-11-07

    Add native (scheme) tests.
    Per-interpreter I/O.
    Bootstrap in Report Environment.
    Extend analyze() to redefined syntax.
    Fix: check number of arguments in PrimitiveProcedure.
    

    2020-10-22

    Migrate to Java 8: Use switch for strings.
    

    Full Changelog: https://github.com/googlielmo/gleam/compare/legacy-sourceforge...v1.2.0

    Source code(tar.gz)
    Source code(zip)
    gleam-1.2.0.jar(156.92 KB)
  • v1.1.0(Jan 25, 2022)

  • v1.0.1(Jan 25, 2022)

  • v1.0.0(Jan 25, 2022)

  • legacy-sourceforge(Jan 25, 2022)

    Legacy code from https://sourceforge.net/projects/gleam/

    It was converted from svn to git following the instructions at https://www.git-scm.com/book/it/v2/Git-and-Other-Systems-Migrating-to-Git

    Source code(tar.gz)
    Source code(zip)
Owner
Guglielmo Nigri
Guglielmo Nigri
Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text

Welcome to Apache OpenNLP! The Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text. This toolkit is

The Apache Software Foundation 1.2k Dec 29, 2022
Spine - a language created for the purpose of writing HTML with C styled syntax

Spine is a language created for the purpose of writing HTML with C styled syntax. Although this is a pretty useless projec, it will still be very fun to make and maybe, just maybe remove the backpain from normal HTML.

Spine 3 Mar 19, 2022
API gateway for REST and SOAP written in Java.

Membrane Service Proxy Reverse HTTP proxy (framework) written in Java, that can be used as an API gateway as a security proxy for HTTP based integrati

predic8 GmbH 389 Dec 31, 2022
RealmeDirac - an open-source Android application written in java

RealmeDirac is an open-source Android application written in java. RealmeDirac is a feature introduced by realme & dirac in realmeUI for sound optimisation, trying to recreate same thing, this is scratch written app aiming to provide same features as realmeDirac..

psionicprjkt 4 Feb 21, 2022
A lightweight, simple FTP server. Pure Java, no dependencies.

MinimalFTP A lightweight, simple FTP server. Pure Java, no libraries. Features Although it's named "minimal", it supports a bunch of features: 100% Ja

Guilherme Chaguri 131 Jan 5, 2023
A simple music player bot for Discord in Java

Delete Discord A simple music player bot for Discord in Java Usage Let's start by running the .jar

Fenix 2 Sep 30, 2021
Simple API, Complex Emails (JavaMail smtp wrapper)

Simple Java Mail Simple Java Mail is the simplest to use lightweight mailing library for Java, while being able to send complex emails including CLI s

Benny Bottema 1k Jan 5, 2023
TChart Simple and fast charts

TChart Simple and fast charts. Current version Beta 0.9.1 Preview Import jitpack.io gradle allprojects

null 30 Sep 20, 2022
A simple file sharing program

FileSharing A simple file sharing program How to use Place all the files to be shared in /html/files (symbolic links work).

AK 3 May 13, 2021
A super simple system for easily creating messages and putting them in in a file, whilst also being able to add replacements without struggle.

A super simple system for easily creating messages and putting them in in a file, whilst also being able to add replacement values without struggle. Please remember: Give constructive feedback, not negative feedback. There are probably a million things to improve, and I am aware of that.

Solyze 2 Sep 21, 2021