bard

A programming language

current version: 0.3.6

copyright 2013-2017 by mikel evins

Getting bard

You can download Bard from here:
Bard 0.3.6 (macos version)
Bard 0.3.6 (linux x8664 version)

Bard's source code is available from Github.

Introduction

Bard is a small, high-level, general-purpose programming language.

It is interactive, dynamic, and impurely functional. It's designed and intended to be used interactively.

It provides support for concurrent and distributed programs, and encourages the use of immutable data.

It has a unique object system influenced by, but different from, CLOS.

It's a dialect of Lisp. Bard's reason for existence is to give me joy in my work. Lisp is the family of languages that has been most successful in doing that.

Bard versions

What does it look like?

(in-protocol user.mikel.namer)

(define function valid-lines (-> Name -> List))
(define function read-samples (-> Name -> Map))

(define method (valid-lines path::uri)
  (filter (conjoin (complement empty?)
                   (partial starts-with? "--"))
          (lines (input-stream path))))

(define take3 (partial take 3))
(define leave3 (partial leave 3))

(define method (read-samples path::uri)
  (let ((beginnings ends
          (partition take3 leave3
                     (valid-lines path))))
    (as hash-table (zip beginnings ends))))

What is it good for?

Bard 0.2.x was used in a couple of commercial projects. It was used to write event-handlers, rule-processing for the game logic in puzzle games, and data compilers used to convert game assets to loadable code.

I used Bard 0.3.x mainly to extend and explore the 0.2.x interpreter. I removed application-specific features from the 0.2.x line, and experimented with implementation strategies and adjustments to the surface language.

Bard 0.4 is a new implementation. I've used the 0.4 branch to explore several lines of development, pursuing a few different ideas. My current intention is to bring the 0.3 interpreter more in line with my current thinking about the language, simplifying it, and preparing for a gradual conversion to an implementation that uses a VM and compiler. It's probably still premature to say exactly what the result will look like.