Skip to content

andrewsmike/nodel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Nodel
=====

Nodel is a toy environment aimed at visually representing datastructures and algorithms.
You can find details about the architecture in ARCH.
Nodel currently has an assembler and interpreter. It has a managed runtime in the works,
and is moving towards a higher language and a visual interface.


Building
--------
Important `make` directives:
- all: Build test application.
- clean: Clean all files.


Usage
-----
Nodel currently produces four executables.
./ndltest ndl.prefix                # Run all available test with the given prefix.
./ndlasm source.asm [-o output.ndl] # Assembles an assembly program into a program graph.
./ndldump output.ndl                # Dumps a description of a program graph.
./ndlrun output.ndl [arg1...]       # Runs the program graph with the given arguments.
./main                              # For testing purposes. Will be removed eventually.
All utilities accept the '-' character to mean standard in, and use standard out
by default. For example, to run a single script, you may type

~/src/nodel $ ./ndlasm - | ./ndlrun - 3.14159
print arg1
print 3.14159
exit
^D
[000@004]: [Float:3.14159].
[001@004]: [Float:3.14159].
Exiting.


Status
------
Nodel currently has a working node graph with backreferences and garbage collection.
It includes a frequency and event based runtime system, along with an interpreter and
assembler. Nodel was not made to be inefficient, but with the exception of a few pieces,
nodel runs with reasonable efficiency. The runtime is partially complete, and requires more
testing/debugging/refactoring/feature adding before being ready for use. Nodel is now
able to run programs generated from a basic assembly language.


Future work
-----------
Refactoring/improvements:
- Move rehashtable to lazy copy for absolute O(1), rather than amortized O(1)?
- Hash caching?

- Replace runtime with efficient and realistic ~100Hz batching system.
- Continue work on the runtime systems
- - Comprehensive process control
- - Add periodic GC
- - Storage management excalls
- - Process management excalls
- - Make heap significantly more efficient
- - Freq=max and operation grouping
- - Improve heap efficiency (Go back to stable pointer slabheap?)
- - Runtime serialization (possibly just encode into graph, save graph and root)

- Further performance analysis
- Improve testing system and more tests.

Features:
- Features for embedding into games (limits on process count, frequency, nodecount, etc)
- program graph <---> assembly tools
- BASIC-inspired datastructure oriented high level language compiler (and utilities)
- Frontent-agnostic UI datastructure, generator, event handling, etc?
- Assembly, code, graph differ for nice effects?
- NCURSES test visualization interface?
- Actual GUI? (What to use, oh god... xlib? gtk? pygame? cat > /dev/printer?)


Goals
-----
The goal of this project is to build a virtual environment where users are able to manipulate
running processes and their datastructures in realtime. The idea came from a discussion with
friends about how programming systems embedded into sandbox games should work. I cannot imagine
any goal other than entertainment.

About

Toy environment for toy systems

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages