Skip to content
/ ton-lang Public

A visual programming language, evaluated as a cellular automaton

Notifications You must be signed in to change notification settings

felko/ton-lang

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ton-lang

ton-lang is a visual programming language whose interpreter is implemented as a cellular automaton, meaning that each cell is transformed at every frame depending on its direct neighbors.

Evaluating programs as cellular automata gives some interesting features such as partial evaluation. On the other hand some features can be hard to implement — at least the way I've approached the problem — e.g. I'm still trying to figure out how to implement recursion.

Installing

Run the following command to install the editor/interpreter

$ python3.8 setup.py install --user

Make sure that the site-packages directory is in your path.

Dependencies:

  • pygame v2
  • fire
  • numpy

Usage

CLI

  • Creating a new file: ton new <path>
  • Editing an existing file: ton edit <path>
  • (Upcoming) Render the evaluation of a program as a gif: ton run <program-path> <gif-output-path>

Editor

Cells

Cells are divided in three main categories:

  • Links: wires connecting cells, visually "pulling" values to processors
  • Processors: cells that actually do computations, inputs are shown as blue pins and outputs as red pins, drawn on the border of the cell.
  • Values: for now only booleans, integers and lists

Additionally, programs can be separated in modules with "chips", which are basically sub-programs.

Eventually I'd like to implement quotes (as in e.g. lisp) which would make processors behave as values temporarily (and therefore movable through wires)

Controls

  • Left-click: write the selected cell
  • Right-click: delete the pointed cell
  • Scrolling: change the cell type in the toolbar
  • Ctrl+S: save the current program
  • Ctrl+R: reload the program from disk (going back to the last saved state)
  • Ctrl+Q: quit the editor
  • Ctrl+L: Clears the board
  • s+scroll: switch the state of the cell, which depends on the pointed cell (cycles through values for value-cells, rotates the pins for processor-cells)
  • Space: evaluates 1 step
  • Enter: evaluate continuously (toggle)
  • Tab: edit the selected chip
  • Esc: go to parent program
  • Shift+Esc: go to root program
  • M: save selected chip to toolbar
  • D: print JSON-representation of a cell in the console for debugging
  • I: shows information about a cell directly in the editor

Examples

  • Using chips to define a subroutine that increments an integer:

  • Manipulating lists

Releases

No releases published

Packages

No packages published

Languages