Version 6 of TFP

Updated 2006-08-12 22:36:07

George Peter Staplin 07.28.2006 - TFP is my new programming system. I've created what I call box programming. Basically each box is an asynchronous process that communicates with other boxes via ports. In TFP each box forks from the router, and does a unique job. TFP is a domain-specific language built on top of Tcl.

lexfiend 12-Aug-2006 - Which begs the question: Is TFP short for Tcl Flow-based Programming?

George Peter Staplin 08.12.2006 - Yes. I wrote a paper for the conference about this, and I give credit to Flow-Based Programming for inspiring what I created. It will appear after the conference. What's unique is my box abstraction and the domain-specific language I've created for it in Tcl. I also used processes rather than threads, unlike some other modern implementations of FBP. I've also changed the names of some components, because I think "router" is a better description than "scheduler" for my implementation.

The first application built with TFP is called TFP Shell. It's an interactive shell with image support.


For instance here is an image box:

 box image {
  load [file join $::shellbinpath pngext2.so] Pngext2
 } takes filename {
  if {[catch {out 1 [pngext2:decode file $filename]} result]} {
   out 0 error
   out 1 $result
   return
  }
  out 0 image
 } out 2

To use that box I might have something like:

 box interactor {
  #
  # This is the init path.  It can contain procs and other startup code.
  #
  package require Tk
  load [file join $::shellbinpath megaimagetk.so]
  pack [button .b -text "Load image" -command {out 0 /path/to/somefile.png}]
  pack [label .img]
 } takes {type data} {
  switch -- $type {
   error {
    tk_messageBox -icon error -message $data
   }

   image {
    set img [image create photo]
    megaimage.to.photo $data $img
    .img configure -image $img
   }
  }
 } out 1

Then I connect the boxes like so:

 connect interactor 0 image 0
 connect image 0 interactor 0
 connect image 1 interactor 1
 router
 vwait forever

What category? Category Control Structure is relevant, but perhaps not spot on. Is Category Threads relevant? Category Design is as well, because of how applications would be partitioned.