Home > koi

koi

Koi is a project mainly written in ..., based on the MIT license.

A small programming language designed to teach the basics of language implementation.

= Koi

Koi is a small programming language that is designed to be easy to use, easy to understand and easy to implement.

Koi is an imperative, dynamic, weakly-typed language with first-class functions. Koi's syntax and features were influenced by JavaScript, Lua and Ruby. Koi makes a point of working very hard to be unambiguous in it's syntax so that it is easy to write parsers for.

Koi's main goal is to be a useful language that teaches the basics of language implementation. The project was started because I wanted to learn more about how languages work 'under the hood' and Koi is my way of sharing what I've learnt with as many people as possible.

=== Example

This is an old-school 'Blast Off!' program written in Koi:

countdown = function( count ) print( to_string( count )) print( ", " ) if( count == 0 ) return() end count = count - 1 call( countdown, count ) end

call( countdown, 10 )

print( "Blast Off!" )

=> 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, Blast Off!

=== Installation

For ease of use the default installation of Koi is packaged as a RubyGem. Providing you already have Ruby and RubyGems installing Koi is as easy as entering the following command in a terminal:

gem install koi-lang

Mac OS X and most Unix/Linux distributions come with an installation of Ruby and RubyGems. If you do not have Ruby and RubyGems installed please check the {Ruby website for instructions}[http://www.ruby-lang.org/en/downloads/].

=== Usage

After Koi is installed you can run a program by typing the following on the command line:

koi /path/to/program

== Koi Fundamentals

=== Data types

Koi features a full set of basic and compound data types including:

  • Nil
  • Boolean
  • Integer
  • Float
  • String
  • Hash
  • Function

=== Flow control

Koi currently only implements a minimal set of flow control operators:

if( expression ) do_work end

unless( expression ) do_other_work end

=== Built-in functions

[print( string )] Writes a string to STDOUT. [gets()] Fetches a newline delimited string from STDIN. [call( identifier [, parameter])] Calls the function that is stored in 'identifier'. [tailcall( identifier [, parameter])] Performs a 'tailcall' to the function stored in 'identifier'. This type of call is used when recursing heavily to improve performance and to facilitate the use of functions as iterators. {More information on tailcalls.}[http://en.wikipedia.org/wiki/Tail_call] [return([ value ])] Return a value from a function. [to_string( value )] Converts the given value to a representative string. [type_of( value )] Returns a string representing the type of the value given, eg: "integer".

=== Reserved words

if, unless, function, end, call, tailcall, print, gets, return, to_string, type_of, nil, true, false

=== Components

The default installation of Koi consists of the following discrete components:

  • The reference parser: {koi-reference-parser}[http://github.com/aarongough/koi-reference-parser]
  • The reference compiler: {koi-reference-compiler}[http://github.com/aarongough/koi-reference-compiler]
  • The standard Virtual Machine: {koi-vm-ruby}[http://github.com/aarongough/koi-vm-ruby]

Each of these components are completely stand-alone and are specifically designed to be as simple as possible. I strongly encourage pulling them apart to see how they tick, and changing them if you see fit! Just make sure to contribute any improvements back to the main repository!

==== Hope you enjoy Koi!

=== Author & Credits

Author:: {Aaron Gough}[mailto:[email protected]]

Copyright (c) 2010 {Aaron Gough}[http://thingsaaronmade.com/] ({thingsaaronmade.com}[http://thingsaaronmade.com/]), released under the MIT license

Previous:sendsig