| Funk2: reflective programming language
Overview
The goal
| | The goal of the programming language Funk2 is to enable reflective algorithmic tracing for large heterogenous control systems. A few point emphasized in the Funk2 programming language are: | | o | Layered Critical Causal Reflection | | | o | Efficient and Robust Control | | | o | Learning by Credit Assignment | | | o | Divergent Solution Paths | | | o | Intricate Thread Control | | | o | Goal-oriented Learning |
Funk2 is a novel programming language that introduced a programming technology that we call Causal Reflective Programming. The language is based on a peer-to-peer shared memory system, allowing individuals access to large numbers of processors and memory. Funk2 uses a virtual scheduler, processor, and thread model that is based on top of the shared memory system, while taking advantage of the specific number of processor cores on each machine. We use Posix Threads to implement virtual processors. Funk2 includes very simple and abstract data and syntax representation--inspired by lisp and scheme. Funk2 compiles to bytecodes that may be shared between architectures, inspired by these similar concepts in Python and Java virtual machines. What is novel to the Funk2 programming language is it's unique ability to keep track of everything that it does, which uses a lot of memory when used indiscreetly, but in general allows reflective tracing for causal reasons why bugs occur, when they inevitably do. Other reflective features of the language include an event-based inter-process communication system that works across the peer-to-peer network, inspired by the Erlang model. We see a language like this as necessary for the social, iterative, cooperative design environment for large distributed complex control systems. Our applications are inspired by Marvin Minsky's, Emotion Machine layered control algorithm for a Society of Mind. |
How does it work?| | Examples of the most basic computational features include: (1) memory creation, (2) memory read, and (3) memory write. Tracing all causal relationships between these basic features allows tracing the context of all other programmer-defined semantic abstractions. All of these computational features create an intricate trace network of dependencies, automatically traceable and shared by many parallel threads of execution. Funk2 allows causal tracing to occur modularly to dynamically chosen parts of large commonsense-scale artificial intelligence projects. The resulting causal dependency trace networks can be processed by critical causal reflection threads. |
Funk2 Publications
Funk2 Presentations
Funk2 Media
Download: Binaries and Sources
| | The following is a direct link to the latest version of platform independent source code:
The following table includes direct links to the latest architecture and platform specific binary packages. In most situations, you should be able to simply single-click on the appropriate link in order for your operating system to fully install the latest version of Funk2.
All Funk2 packages are signed with a public key, which is available here for your security:
All of the above Funk2 source tarballs and binary packages as well as all other previous versions are available here:
|
Git Access
| | This project is now a publicly developed project hosted via gitosis and gitweb at http://git.neuromin.de/, where you should have both access to stable packages and the trunk source repository. To clone the public git Funk2 repository on your machine, you should be able to just type the following command into a terminal: | | | | | git clone git://neuromin.de/funk2.git
|
|
Current Plan| | (Order is not meant to imply importance or priority.)
| | o | Funktion Documentation Strings | | | | o | Distributed Peer-to-Peer Shared Memory | done!(alpha version w/o GC) | | | o | Imaginary Memory | in progress... | | | o | Function Call Planner | | | | o | Actor/Object/Frame Ontology | done! | | | o | Value Dependency Tracing | done! | | | o | Peer to Peer Grid-Processor Support | in progress... | | | o | Bytecode to x86 Machine-code Compiler | | | | o | Parallel Native Function Handler | | | | o | Generational Garbage Collection | done! | | | o | 64-bit swap memory index on 32-bit systems | | | | o | Reflective event "spike trains" to Matlab format | |
|
Society of Mind final project ideas
| | | | o | Explain and demonstrate as much as possible how to build a reflective goal-oriented planner in Funk2. | | | | — | use funktion traces | | | — | build imaginary trace simulator | | | — | build search for goal state in imagination | | | — | build imaginary memory | | | — | execute imaginary plan for real | | | — | how would learning occur? | | | — | consider how modern statistical goal-oriented learning methods can be incorporated into your reflective planner. are these techniques a natural addition to your algorithm? | | | — | consider advances beyond what was developed in the HACKER algorithm discussed in Gerry Sussman's Ph.D. Specifically, focus on the learning of critics to monitor and signal critical patterns in the declarative plan representations of the planning layer. |
|
| | | o | Explain and demonstrate as much as possible how to build a reflective critic in Funk2. | | | | — | use data-centric tracess (e.g. the 'remember' funktion) | | | — | build data-centric mutation callbacks | | | — | remember: the use of long-running threads enables distributed processing, so use pause/unpause thread controls whenever possible! | | | — | build pattern recognition library of commonly used trace patterns | | | — | how would new critics be learned? how would critics be added to selectors to recognize new critical points in a problem solving method? |
|
| | | o | Explain and demonstrate as much as possible how to build a selector in Funk2. | | | | — | use pause/unpause/priority-set thread controls to manage behaviors | | | — | build selection combination rules (e.g. 'xor' ['exclusive or', 'choose only one', 'mutex', etc.], 'and', 'or', 'not', etc.) | | | — | how do selectors control other selectors? and critics? use commonsense goal-oriented problem solving examples to demonstrate your ideas. | | | — | how are selectors selected by critics? | | | — | how are new selectors learned? consider the application of the social evolutionary algorithms discussed in class for evolving mental realms. |
|
|
|
Funk2 Developers
|