Front Page All Articles Recent Changes Random Article

Contents

Concatenative language

  • ACL
  • Ait
  • Aocla
  • Breeze
  • Callisto
  • Cat
  • Cognate
  • colorForth
  • Concata
  • CoSy
  • Deque
  • DSSP
  • dt
  • Elymas
  • Enchilada
  • ETAC
  • F
  • Factor
  • Fiveth
  • Forth
  • Fourth
  • Freelang
  • Gershwin
  • hex
  • iNet
  • Joy
  • Joy of Postfix App
  • kcats
  • Kitten
  • lang5
  • Listack
  • LSE64
  • Lviv
  • Meow5
  • min
  • Mirth
  • mjoy
  • Mlatu
  • Ode
  • OForth
  • Om
  • Onyx
  • Plorth
  • Popr
  • Porth
  • PostScript
  • Prowl
  • Quest32
  • Quackery
  • r3
  • Raven
  • Retro
  • RPL
  • SPL
  • Staapl
  • Stabel
  • Tal
  • Titan
  • Trith
  • Uiua
  • Worst
  • xs
  • XY
  • 5th
  • 8th

Concatenative topics

  • Compilers
  • Interpreters
  • Type systems
  • Object systems
  • Quotations
  • Variables
  • Garbage collection
  • Example programs

Concatenative meta

  • People
  • Communities

Other languages

  • APL
  • C++
  • Erlang
  • FP trivia
  • Haskell
  • Io
  • Java
  • JavaScript
  • Lisp
  • ML
  • Oberon
  • RPL
  • Self
  • Slate
  • Smalltalk

Meta

  • Search
  • Farkup wiki format
  • Etiquette
  • Sandbox

Factor/VocabularyFileout

Currently, vocabularies flow in one direction: from disk to
image. Hopefully someday, they'll flow in the other direction, from
image back to disk.

Let's suppose I'm working on some new project and I'm experimenting at
the listener. I switch to a new vocabulary for the project:

    IN: my-project

And I come up with a few words:

    : a 10 ;
    : b 20 ;

The current state of affairs is such that I can save the image,
restart Factor, and the 'my-project' vocabulary will be
available. However, there will be no sign of it in any of the
vocabulary roots.

So what should the semantics of vocabulary file out be? Let's suppose
there's a 'sync' word. It would "synchronize" the vocabularies in
image with those on disk.

        If a vocabulary exists in image but not in any roots, create a
        new vocabulary on disk.

        If the vocabulary exists in image and on disk, reconcile any
        differences based on the timestamps of the changes.

If I've added words to a vocabulary at the listener, but these don't
exist on disk, then the vocab on disk would be updated.

Programatically filing out vocabularies is an interesting task. We're
used to seeing a vocabulary file structured as follows:

     USING: ... ;

     IN: ... ;

     : a ... ;

     : b ... ;

     ...

A naive fileout mechanism would actually produce a file where each
word is accompanied by it's own 'USING:' statement instead of one
monolithic one at the top of the file. Perhaps there could be some
post-processing to consolidate all the individual USINGs into the
traditional style.

Finally, how to deal with expressions involving parsing words is still
an open problem. I.e. if you do this at the listener:

   TUPLE: abc x y z ;

quite a bit of work is done as a result of parsing the
statement. A fileout mechanism would have to notice the
existence of the 'abc' class and fileout the proper TUPLE statement.

Achiving the fileout capability is important. I think it will
encourage more experimentation with in image vocabulary editing
tools. Another interesting point is that vocabularies can be
viewed as a basic form of persistence. The nice thing is that
vocabularies are much more fine grained than whole images.

Let's say that Factor had a Mac Paint kind of application. I start it
up, draw a picture, and exit the tool. It leave the picture object on
the stack. I go into a new project vocabulary:

    IN: a-new-picture

I then "assign" the object to a word name:

	:> the-picture

At this point I can "synchronize" the system. I've created an object,
given it a name in a new "workspace" and done all of this without
dealing with any files.

This revision created on Sun, 2 Nov 2008 23:01:39 by dharmatech

Latest Revisions Edit

All content is © 2008-2024 by its respective authors. By adding content to this wiki, you agree to release it under the BSD license.