pgtrubey@watrose.UUCP (pgtrubey) (03/18/85)
This is a question that has been bugging me for a long time... Why does FORTH use screens to package its definitions? The simple answer would be that it's easier to implement everything that way. However, every new and improved version of FORTH (that I know of anyway - am I wrong?) still uses them. Why not something that is a bit easier to play around with...like a file maybe? Any thoughts?
fetrow@entropy.UUCP (David Fetrow) (03/20/85)
> > Why does FORTH use screens to package its definitions? > My understanding (limited) is that screens allow forth to be both upward and downward compatable. If you do something "slick" with one machine that isn't based on screens another computer might not be able to work quite the same way. One of forths biggest strengths is that not only is the language per say portable but that the operating system is portable as well; over an incredibly wide range of machines. -- -"Daphnia Dave" Fetrow Kludgemaster of CQS { ihnp4, fluke, microsof, tektronix, uw-june }!uw-beaver!entropy!fetrow entropy!fetrow@uw-june.arpa
keithd@cadovax.UUCP (Keith Doyle) (03/22/85)
[........] It would appear that the reason Forth uses screens for source files, is because of its 'incremental-compile' nature. That is, you can compile small parts of your source as you debug, when changes have to be made you only have to forget down to where the change is made, and reload from there. With a sequential file structure, you'd have to wind through the file till you got to where you wanted to be, and then tell the system how much from there you wanted to load. You'd still want some type of random access capability for that, otherwise it'd be slow. In Forth's case, you are using random access source files, and the access is left up to you, not a source editor that would have to find what you're looking for otherwise by searching. Forth screens do help keep the Forth environment faster and more interactive. Many Forth systems bolt screen files onto the random access capabilities of the host operating system, thereby giving much of the advantages of both systems. Originally, I asked much of the same questions about Forth screen files. Now that I've used it a lot more, I think I'd hate to part with them. I had considered writing a 'load' word to input Forth source from a standard string file which wouldn't be hard, but I can't remember now why I wanted it. (However, I did modify one of the Atari Forths to do the same with a file input from a cassette, for a freind who didn't have a disk.) Keith Doyle # {ucbvax,ihnp4,decvax}!trwrb!cadovax!keithd
toma@tekchips.UUCP (Tom Almy) (03/22/85)
1. Easy transportability -- no need to be concerned about what the line delimiter is. All implementations have exactly the same format 2. Ease of implementation -- In stand-alone environments (no O.S.), it is easier to write routines to access the disk in 1k chunks than it is to handle character streams. 3. It fits in nicely with the Forth "virtual memory" model. Although the language STOIC still has BLOCKs, yet loads from blocks like an ASCII stream (imbedded CRLFs). 4. It really isn't that difficult to use, once you get use to it. It also indirectly enforces keeping definitions short, and organizing your work as you do it. By using load screens, you end up with tree structured programs, which are nicer than the traditional linear programs anyway. 5. You can have shadow screen support; its analogy with text streams would be very dificult to implement.
mf1@ukc.UUCP (M.Fischer) (03/23/85)
There is some truth to the suggestion that it maintains compatability, but there are more important reasons for having screens. After many years of FORTH programming, I suggest the ideal format for storing FORTH source code would be by definition. The least ideal format is to have a particular set of source definitions all collected into one file with no partitions. I have tried both (and many others), and still end up with screens in the end. I think this is a consequence of the way I use FORTH. FORTH definitions are very transportable between applications. Just load it in, no linking etc. Because of this, screens typically have one or two related definitions with perhaps a constant or even a variable. If the application is a collection of source definitions it is more difficult to hunt down and find what you are looking for, and extract it for further use. Also noteworthy is that FORTH is often used where disk resources are small and slow. By the way, the following is a handy way to keep track of the source block a particular word is located in, although it uses two bytes per definition. ( Redefine :) : : BLK @ , [COMPILE] : ; IMMEDIATE ( BLK? aaaa .... block number) : BLK? -FIND 0= 0 ?ERROR DROP NFA 2 - @ ( Convert to SCR#) B/SCR / ; ( WLIST aaaa lists screen with aaaa source) : WLIST BLK? LIST ; These could be extended to CODE VARIABLE etc. Michael Fischer mf1@ukc
ma168x@sdcc6.UUCP ({) (03/25/85)
Why not screens?? A more serious answer is that screens are used for data storage as well as for source. Organization of data into uniform blocks makes access to any datum relatively simple. One can write words which use screens as virtual memory and which function identically to "real" memory counterparts. There is no problem is producing a version of FORTH which reads text files in a host operating system (JPL FORTH does). Kitt Peak VAX-Forth uses the underlying (Unix or VMS) operating system to organize sets of screens into files. It has a utility for converting standard text files into screens for those who want to use an external editor. Alternatives to screens have been discussed in FORTH circles. -- John J Wavrik Dept. of Math. U.C. San Diego (ucbvax!sdcc6!ma168x)
wmb@sun.uucp (Mitch Bradley) (03/26/85)
> Why does FORTH use screens to package its definitions?
On machines with small memories and small, slow disks, screens
are reasonable, since the code to manipulate them is small.
Also, on floppies, editing screens is fairly fast, since the
editing is done in place, and an insert into the middle of a
screen has to move at most 1023 bytes.
HOWEVER, on modern computers, screens are just a pain in the you-know-what.
My FORTH system, which is an adaptation of Laxen & Perry's F83 for
68000 Unix systems, uses files. I have not even bothered to implement
BLOCK. I edit source code using Emacs, then load the file.
A 68000 compiles Forth so fast that it is not worthwhile to try to forget
back to where the error occurred and incrementally reload. Instead,
I just blow away the forth process and restart it. I can do this faster
than I can type FORGET WHATEVER.
I have modified the compiler so that it doesn't stop when it hits an
undefined word; instead, it prints an error message and compiles a
reference to a word LOSE, whose run time action is to complain and abort.
This scheme allows the compiler to find all the undefined words in a
file, without making such errors propagate through all words that
use the undefined word.
This is especially wonderful in an environment where you can run the
editor and the forth process simultaneously in separate windows,
such as inside Gosling's Emacs or in the SunWindows environment.
I have published a paper describing a proposed standard portable file system
interface, similar in spirit to the C Standard I/O concept. The paper
may be found in the proceedings of the 1983 Asilomar FORML Conference,
along with the code to implement it under either CP/M or Unix. The
interface spec, without the code, is also published in the Proceedings of
the 1984 Rochester Forth Conference.
By the way, my 68000 Unix F83 system will be included on the soon-to-be-
released "Sun User Group Unsupported Software" tape. It ports quite
easily to non-Sun 68000 Unix systems, and can also run on random 68000 boards
with a small effort. It's public domain, so feel free to get a copy from
somebody with a Sun.
Mitch Bradley
hmm@unido.UUCP (03/26/85)
I'm using FORTH for about 3 years on my TRS-80 Mod.I without underlying operating system. After zapping my Level II ROMS I burnt an EPROM with a simple disk booter and adapted a FORTH system from a friend. It is real fun for games and little programs, but the memory (32k) and my spare time are too limited for any serious application. I have only two objections to the screen concept: 1. You get a lot of fragmentation. I am used to start new programs some screens away from the last used screen to provide space for changes to the older programs. This can be very annoying if you use up to 30% of the disk for empty screens ! 2. Since I don't have much space, I tend to sqeeze my definitions on the screens. It's awful, but it's the only way to use space economically. I would like to have some expandable concept: Named files which consist of screens internally. Maybe there should be two file types: Raw block files and text files. Text files have line-oriented text and should only be accessed by the editor and the load word. Block files are for data, but they are also editable and loadable. Every block file would have screens 0..N and should be used for the data of one program. Common routines for random generator, game subroutines etc could reside in their own files. What do you think of it ? Hans-Martin Mosner Universitaet Dortmund (Germany) ihnp4!hpfcla!hpbbn!unido!hmm {decvax,philabs}!mcvax!unido!hmm