papierkorb:intro.4th
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| papierkorb:intro.4th [2025-08-10 22:50] – ↷ Seite von projects:intro.4th nach papierkorb:intro.4th verschoben mka | papierkorb:intro.4th [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | < | ||
| - | (This file was downloaded from CompuServe. | ||
| - | at the end of this are available here on GEnie as well. If you can't | ||
| - | find one leave a note for the sysop.) | ||
| - | |||
| - | INTRO.4TH | ||
| - | |||
| - | Keywords: PD FREE OS REFERENCE FORTH 4TH | ||
| - | | ||
| - | Overview of the most powerful programming language there is. | ||
| - | By Giles | ||
| - | | ||
| - | | ||
| - | |||
| - | INTRO.4TH | ||
| - | | ||
| - | |||
| - | Preface: | ||
| - | The purpose of this file is not just to tell u "Forth is | ||
| - | Great", | ||
| - | over other languages, and to communicate th " | ||
| - | relation to programming tasks. | ||
| - | I hope it does that job well enough to give u a sense of th | ||
| - | possibilities, | ||
| - | urself what u can accomplish w/ it, u will be expecting to | ||
| - | create elegance. | ||
| - | Please read this w/o bias, and if u doubt any statements | ||
| - | made, th author is prepared to provide proof or acceptable | ||
| - | evidence, or upload a corrected version of this file. | ||
| - | If, on th other hand, u are not willing to find out that | ||
| - | there is a programming language considerably more capable & | ||
| - | elegant than what u r familiar with, then better to not | ||
| - | even give it a single quick scan! (grin) | ||
| - | Giles | ||
| - | |||
| - | |||
| - | Topic Headings | ||
| - | |||
| - | Abreviation Definitions | ||
| - | Commands That Fit | ||
| - | Programming Environment | ||
| - | Personal Experience | ||
| - | What is Forth? | ||
| - | Different Installations | ||
| - | Examples | ||
| - | Small Concept= Large Capability | ||
| - | Grand Scale Programming | ||
| - | Use | ||
| - | My plans | ||
| - | Your application | ||
| - | Availability on CIS | ||
| - | Learning Forth | ||
| - | Social Aspects | ||
| - | Problems | ||
| - | |||
| - | |||
| - | Abreviation Definitions | ||
| - | |||
| - | #, Number | ||
| - | &, And | ||
| - | cmd, Command | ||
| - | hdw, Hardware | ||
| - | r, Are | ||
| - | sfw, software | ||
| - | th, The | ||
| - | u, You | ||
| - | u're, You're | ||
| - | ur, Your | ||
| - | u've, You've | ||
| - | w/, With | ||
| - | w/o, Without | ||
| - | 4th, Forth | ||
| - | |||
| - | |||
| - | Commands That Fit | ||
| - | |||
| - | Have u ever wished: | ||
| - | |||
| - | 1. A particular command went about things just a little | ||
| - | differently? | ||
| - | |||
| - | 2. A particular command behaved consistantly, | ||
| - | doing th wrong thing at just th wrong time? | ||
| - | |||
| - | 3. U had a particular command, that would make things | ||
| - | SOOooooo simple? | ||
| - | |||
| - | In Forth, th process of finding th code of a command & | ||
| - | installing a rewritten version is trivial. | ||
| - | |||
| - | |||
| - | Programming Environment | ||
| - | |||
| - | Have u ever felt that programming would always be a | ||
| - | pleasant experience, if only U never had to program around | ||
| - | bad system sfw? | ||
| - | |||
| - | Have u ever wished: | ||
| - | |||
| - | 1. U could program twice as fast? ..Five times as fast? | ||
| - | ..TEN times as fast?! And that u could debug th program as | ||
| - | u write it, so that (generally) when u finished writing a | ||
| - | module u wouldn' | ||
| - | |||
| - | 2. That all th clever little subroutines u've worked out | ||
| - | were instantly available, w/o having to look for them, or | ||
| - | take any special pains to integrate them into th present | ||
| - | program. | ||
| - | |||
| - | 3. That calling a subroutine required nothing more than | ||
| - | naming it? | ||
| - | |||
| - | 4. That someway ur programming environment would help u | ||
| - | keep track of where u r, & how th routine u r working on | ||
| - | now will affect other routines, or which ones will be | ||
| - | affected? | ||
| - | |||
| - | 5. That u could change th way ur compiler behaves? | ||
| - | could add th ability to handle special cases w/o changing | ||
| - | anything else? | ||
| - | |||
| - | 6. That u could use hi-level commands, & a magic genie would | ||
| - | come along & convert them to efficient machine code? Or maybe | ||
| - | just th ones needing speed, & leaving th others in th most | ||
| - | compact form to save memory? | ||
| - | |||
| - | 7. That u never had to worry about linking library routines, or | ||
| - | that ONE copy of routines would suffice for ALL processes? | ||
| - | |||
| - | 8. That u could have a multitasking, | ||
| - | w/ all th features of, say for instance, OS9, but ALSO have th | ||
| - | immediate utility of a powerful toolbox & programming language | ||
| - | combined? | ||
| - | |||
| - | 9. That u could bring th same, familiar environment & | ||
| - | applications from obsolete hdw. to new hdw. w/ expanded | ||
| - | capabilites, | ||
| - | hdw w/o having to change much if any of what u already have? | ||
| - | | ||
| - | Computer in order to have graphix that beat some MS-DOS & | ||
| - | Macintosh machines at a fraction of th price. | ||
| - | Or to an IBM styled machine, in order to take advantage of all | ||
| - | th hdw options available, yet having an EFFECTIVE multasker, | ||
| - | instead of being stuck w/ OS2. | ||
| - | |||
| - | 10. That u had a powerful environment on which u could write a | ||
| - | similar environment, | ||
| - | course), and compile th new environment & have a system of ur | ||
| - | very own, w/ no royalties owed to anyone? | ||
| - | system to be manufactured & sold.) | ||
| - | |||
| - | 11. To have th ability to implement other languages, such | ||
| - | as BASIC, LISP, Pascal, Prolog simply & efficiently? | ||
| - | |||
| - | In Forth, u can move about freely. There is no "black | ||
| - | box" compiler to shackle u w/ unnecessary restraints. | ||
| - | restriction to predefined data structures. | ||
| - | lost in GOTOs or jumps because 4th neither has nor needs | ||
| - | them. | ||
| - | Forth assumes u know what u r doing, & often how u do it is | ||
| - | implicit. | ||
| - | |||
| - | |||
| - | Personal Experience | ||
| - | |||
| - | Before I knew of the existance of Forth I knew I would | ||
| - | have to have a language that was infinitely extensible, and | ||
| - | selfcompiling to do the things I wanted to do. When I | ||
| - | learned what Forth was, it was like manna from heaven. | ||
| - | With systems such as OS9 having some of th advantages of | ||
| - | Forth, & excellent file handling, and w/ the availability | ||
| - | of a powerful text editor such as TSEdit, a person has a | ||
| - | very effective system for gathering textual data piecemeal | ||
| - | & editing it. | ||
| - | But in using such a system, I have had to program around | ||
| - | deficiencies of other languages, | ||
| - | reaching the hdw. functions of the machine, that some | ||
| - | applications that should have been done were not practical | ||
| - | to tackle, (because of time restraints) and as a result | ||
| - | been forced to use sfw for which we haven' | ||
| - | And so have been unable to adapt it exactly to our needs, | ||
| - | or add enhancements and upgrades that we should have had. | ||
| - | So, I am FORCED to incorporate the advantages of OS9 into | ||
| - | Forth, as I can no longer do without 4th's other, inherent | ||
| - | advantages. | ||
| - | |||
| - | |||
| - | What is Forth? | ||
| - | |||
| - | Forth is an infinitely extensible metacompilable | ||
| - | language/op system in which subroutining is inherent. | ||
| - | (Metacompilable is a Forth term meaning it can compile new | ||
| - | versions of itself from source) | ||
| - | The stack' | ||
| - | can directly manipulate it. | ||
| - | Tho most implementations are sparse from an applications | ||
| - | viewpoint, (tho I know of none that do not include an | ||
| - | editor & assembler), it is so trivial to extend it, that | ||
| - | you can relatively easily write a LISP or BASIC | ||
| - | interpreter, | ||
| - | seen most of these in sigs or elsewhere.) | ||
| - | Since Forth is so compact, (it compiles to only | ||
| - | subroutine addresses), and so fast, (tho slower than | ||
| - | Machine Lang. to do exactly the same operations, | ||
| - | practically it's often faster, because of the better | ||
| - | organization of the functional blocks), and it can | ||
| - | duplicate the power of any existing language, as well as | ||
| - | any you dream up that are MORE powerful, it's hard to deny | ||
| - | that Forth can be the MOST powerful language there is. As | ||
| - | a practical matter, complete control is in the programmer' | ||
| - | hands, so the extensions will be just as bad as the | ||
| - | programmer forces them to be! (grin) | ||
| - | On the other hand, you don't have to say " | ||
| - | writer! Why didn't he do it THIS way? | ||
| - | recompile the whole system to suit yourself! | ||
| - | because that way, it is your own system. to sell as an | ||
| - | application, | ||
| - | with no royalties owed to anyone, and as a complete | ||
| - | standalone system. | ||
| - | |||
| - | |||
| - | Different Installations | ||
| - | |||
| - | It is also easily transportable. | ||
| - | primitives for the new cpu, and recompile it, with all the | ||
| - | resources of the present system at hand. | ||
| - | And because of th small # of necessary primitives, & of | ||
| - | th extreme modularity & interactive method of programming | ||
| - | this allows, u will not believe how easy such a port is | ||
| - | until u see it! | ||
| - | |||
| - | |||
| - | Examples | ||
| - | |||
| - | You may know that the RSdos BASIC PALETTE cmd (for th | ||
| - | Coco) takes a slot number (0-15) and puts a color value | ||
| - | (0-63) into it. The zero slot's hdw address is 65456. | ||
| - | I defined a PALETTE cmd in Forth thusly: | ||
| - | : PAL -80 + C! ; | ||
| - | : is a word called Colon, and is the most commonly used | ||
| - | compiler. It enters the following word, (a word is a group | ||
| - | of non-space characters bounded by spaces, in this case | ||
| - | PAL), into the dictionary, and compiles the addresses of | ||
| - | the following words, (which normally must have already been | ||
| - | defined), into the dictionary as it's definition. | ||
| - | -80 is the signed 16 bit integer equivalent of 65456. | ||
| - | Mention of a number puts it on the stack. | ||
| - | + takes the 2 top stack entries and adds them, leaving | ||
| - | the result on top of the stack. | ||
| - | ! is pronounced " | ||
| - | and stores it in the address on top of the stack. But it | ||
| - | stores SIXTEEN bit values. In this case we only want to | ||
| - | store 1 byte, so we use Cstore, C being for " | ||
| - | course C! is a different word from !. | ||
| - | ; terminates all definitions started with :. | ||
| - | So now instead of PALETTE8,38 as I would use in basic, I | ||
| - | can do 38 8 PAL. | ||
| - | 38 pushes 38 on the stack. | ||
| - | 8 pushes on the 8. | ||
| - | PAL first takes the top item and adds it and 65456 to | ||
| - | give the address of slot 8, then stores 38 (second stack | ||
| - | item) into one byte at that address. And all of a sudden, | ||
| - | your text is orange.(grin) | ||
| - | To make this cmd " | ||
| - | define a constant, SL0T, thusly: | ||
| - | 65456 CONSTANT SL0T | ||
| - | | ||
| - | Constants! (grin) | ||
| - | Then define PAL thusly: | ||
| - | : PAL SL0T + C! ; | ||
| - | That way, only SL0T would have to be changed for another | ||
| - | system. All system dependent values could be stored in a | ||
| - | single place, and so be easy to set up for a different | ||
| - | system. | ||
| - | Here's an edited example of th procedure for installing a | ||
| - | rewritten primitive, as explained by my friend Bob McIsaac: | ||
| - | -------------- | ||
| - | ' | ||
| - | You can figure a new version then install the hex code | ||
| - | using: | ||
| - | | ||
| - | If it works then install it:- | ||
| - | ' | ||
| - | This works because the code field addrs of a word always | ||
| - | points to executable code and this can be anywhere in | ||
| - | memory. | ||
| - | --------------- | ||
| - | In this example: | ||
| - | A dictionary header is made up like this: | ||
| - | Up to th 1st 31 bytes are th name field. | ||
| - | Next 2 bytes are th LINK FIELD, which points to th | ||
| - | previously defined word. | ||
| - | Next 2 bytes r th CODE FIELD, & point to executable code. | ||
| - | (Th following parameter field, if th word is a primitive.) | ||
| - | The remaining bytes r th PARAMETER FIELD, which may contain | ||
| - | executable code, addresses for other words, variable | ||
| - | storage, constant storage, tables, or what have u. | ||
| - | ' (pronounced " | ||
| - | Address) of th word following it, on th stack. | ||
| - | DUMP gives a hex dump starting at th address on th stack. | ||
| - | CREATE creates a dictionary header for th word following | ||
| - | it, in which th 1st character is altered (smudged, by | ||
| - | flipping a bit) so that it can't be found, (while it is | ||
| - | being defined). | ||
| - | , (Comma) Inserts th 16 bit value on top th stack at th | ||
| - | current end of th dictionary, & bumps th dictionary pointer | ||
| - | 16 bits, (to th NEW end of dictionary). | ||
| - | NEXT puts code in place for a " | ||
| - | Forth machine. | ||
| - | SMUDGE flips th flipped bit in th altered letter of th | ||
| - | keyword, so that actually, in this case, it's working more | ||
| - | like an " | ||
| - | CFA takes a PFA & converts it to a CFA (Code Field | ||
| - | Address). In this case, th PFA of < | ||
| - | its CFA | ||
| - | ! Takes th second stack item (in this case, th PFA of | ||
| - | EMIT) & stores it in 16 bits at th address on top of th | ||
| - | stack, (in this case, th CFA of < | ||
| - | FREEZE sets th system so that it permanently recognizes | ||
| - | this installation. | ||
| - | |||
| - | |||
| - | Small Concept= Large Capability | ||
| - | |||
| - | Just a few additional concepts give u a great deal of | ||
| - | added power. | ||
| - | behaviors of words, and " | ||
| - | things in th most direct way possible. | ||
| - | And th " | ||
| - | elimination of all other local variables. | ||
| - | I find Forth the easiest language in which to | ||
| - | conceptualize a task. Many procedures that would not be | ||
| - | trivial in any OTHER design of language, can b programed in | ||
| - | Forth out of hand. Each part of the problem can always be | ||
| - | programmed seperately, as a preliminary word to the final | ||
| - | word that does the whole job. Also you can start out with | ||
| - | a word that just handles limited conditions, and keep | ||
| - | adding new functions to it as you elaborate on the problem. | ||
| - | If you choose word names carefully, Forth is self | ||
| - | documenting, | ||
| - | of course), the definition. | ||
| - | |||
| - | |||
| - | Grand Scale Programming | ||
| - | |||
| - | I have talked about designing or redesigning whole | ||
| - | systems, for customization, | ||
| - | expect it sounds like something that someone might spend | ||
| - | months, or maybe even years doing, but it more likely would | ||
| - | take u only a matter of days, because: | ||
| - | |||
| - | 1. Forth systems tend to be very small | ||
| - | |||
| - | 2. U usually have th tools to do things in th most direct | ||
| - | way possible. | ||
| - | |||
| - | 3. Th combination of interactive programing w/ very small | ||
| - | modules which are all subroutines usable individually, | ||
| - | allows u to very efficiently " | ||
| - | code. In other words, tho in any language a good | ||
| - | programmer tries to write code whose power increases | ||
| - | geometrically w/ th amount of code he writes, Forth was | ||
| - | designed to allow u to do this very efficiently. | ||
| - | |||
| - | 4. Th modularity, interactivity, | ||
| - | naming them, as well as automatic stack use, makes | ||
| - | debugging a breeze! | ||
| - | |||
| - | |||
| - | Use | ||
| - | |||
| - | You can code interactively, | ||
| - | but then for real work, you enter the editor, and edit | ||
| - | scripts or source onto disk. | ||
| - | Then you can take input from disk with a LOAD cmd, and do | ||
| - | execution and compiling directly from disk (until your file | ||
| - | gives the cmd to take input from term). | ||
| - | Forth can accomplish everything OS9 can, simpler. | ||
| - | |||
| - | |||
| - | My plans | ||
| - | |||
| - | I've always wanted to write my own OS because I | ||
| - | eventually wanted to put out my own hdw, and wanted | ||
| - | complete control of maintenance and no royalties. There are | ||
| - | many PD Forths, and Forth workalikes out there to build | ||
| - | upon. | ||
| - | The system I want to develop now, would include | ||
| - | " | ||
| - | ability to access all common disk formats, (Mac, MSdos, | ||
| - | Amiga, OS9, RSdos, CPM, ProDOS, CDOS, etc.) Each format | ||
| - | description would be contained in a "DOS Descriptor Block" | ||
| - | data structure, and if a new format became popular, you | ||
| - | could just add another DDB. With additional device | ||
| - | descriptors, | ||
| - | etc. | ||
| - | Naturally it will have multitasking, | ||
| - | the most useful commands of OS9. Of course it will always | ||
| - | have the advantage of being a programming lang. as well as | ||
| - | an OS, over OS9. | ||
| - | |||
| - | |||
| - | Your Application | ||
| - | |||
| - | Altho there are versions that run on top of OS9, Flex, | ||
| - | CPM, MSdos, etc., etc, to get the greatest advantages, you | ||
| - | need Forth on the bottom! | ||
| - | |||
| - | |||
| - | Availability on CIS | ||
| - | |||
| - | Put your checkbook away! You can get versions of Forth | ||
| - | for the popular CPUs for down-load time: | ||
| - | |||
| - | 6809 | ||
| - | |||
| - | The TIL09 system is on Cocosig (g coco), in " | ||
| - | Op. Systems" | ||
| - | Computer. | ||
| - | Here is a list of necessary files: | ||
| - | TIL09.DOC, & | ||
| - | M4TH.DOC, Describe operation & capabilities of TIL09. | ||
| - | TEDIT.DOC, Describes editor use, & other necessary commands | ||
| - | imbedded in th editor. | ||
| - | TILBUG.4TH, Bug fixes. | ||
| - | TIL09.GLO, System glossary. | ||
| - | TILASM.DOC, Overview of assembler. | ||
| - | TIL09.BIN, Executable system. | ||
| - | LOADM" | ||
| - | TILDOS.ARC, TILDOS uses RSDOS disk files. Instructions are | ||
| - | included. | ||
| - | META1.BIN, & | ||
| - | META2.BIN, are source for TIL09. | ||
| - | TDCMP.BIN, is source for th metacompiler/ | ||
| - | TEDIT.BIN, is th source for th editor. | ||
| - | TILASM.4TH, source for th assembler. | ||
| - | |||
| - | 68000 | ||
| - | |||
| - | Do a g clm332 to get to Computer Languages Magazine' | ||
| - | forum, & there, in th Forth library u can find: | ||
| - | README.68K, installation instructions. | ||
| - | F83-68.BIN, the executable Forth system. (Uses CPM disk | ||
| - | access.) | ||
| - | KER68K.SCR, source, necessary for adapting the system & | ||
| - | helpful in understanding it. | ||
| - | META68.SCR, source for the metacompiler, | ||
| - | to alter the system, or make a completely new one. | ||
| - | UTL68K.SCR, source for utilities. | ||
| - | Atari16 forum has basically th same forth as F83-68K, but | ||
| - | different disk access extensions for a non CP/M Forth. | ||
| - | |||
| - | 8086 | ||
| - | |||
| - | Also in CLM's Forth Libr.: | ||
| - | README.PC, Dox for MS-DOS 4th. | ||
| - | CMD4TH.BIN, IBM-PC dedicated Forth. (Does NOT go thru | ||
| - | PC-DOS) | ||
| - | F83-86.BIN, DOES go thru PC/MS-DOS. | ||
| - | KER-86.SCR, System source. | ||
| - | CPU-86.SCR, Assembler source. | ||
| - | META86.SCR, Metacompiler source. | ||
| - | |||
| - | 8080 | ||
| - | |||
| - | Also in CLM's Forth Libr.: | ||
| - | README.80, Dox. | ||
| - | KERNAL.SCR, System source. (CPM80) | ||
| - | F83-80.BIN, Executable system.(CPM80) | ||
| - | |||
| - | |||
| - | Learning Forth | ||
| - | |||
| - | For a first text, I'd recommend: | ||
| - | " | ||
| - | DL9... | ||
| - | | ||
| - | helpful. | ||
| - | Forth '83 Standard is available in th Forth forum, (g | ||
| - | forth), as FORTH-.DOC. | ||
| - | There is also a reference file in Forth lib in CLM (g | ||
| - | clm332).... | ||
| - | | ||
| - | address in here. | ||
| - | We r planning a 4th workshop in Cocosig. | ||
| - | interested may contact me for th schedule. | ||
| - | Also, if anyone knows of other live "Forth | ||
| - | Introductions", | ||
| - | |||
| - | |||
| - | Social Aspects | ||
| - | |||
| - | There are people, some of whom r pretty good programmers, | ||
| - | that consider Forth a " | ||
| - | why this is so, (*I* don't feel like a cultist.(grin)), | ||
| - | far I've come up w/ these possibilities: | ||
| - | |||
| - | 1. Forth IS after all fundamentally " | ||
| - | other language. (Despite its similarity to LISP.) | ||
| - | |||
| - | 2. Once some people realize how much they can accomplish w/ | ||
| - | Forth, they may get overexcited, | ||
| - | gone overboard! (Hehe..couldn' | ||
| - | |||
| - | 3. I think it likely that Forth is better than what they | ||
| - | (th people that call it a " | ||
| - | for whatever reason, they would rather not find that out!(grin) | ||
| - | |||
| - | 4. Tho Forth tends to attract good programmers, | ||
| - | it also attracts a few poor ones. (I once saw a guy use a | ||
| - | whole screen to define a single primitive. (grin)) | ||
| - | programmer is not likely to present Forth to a newcommer in | ||
| - | its best light, also if th newcommer is himself a fairly | ||
| - | good programmer, he's likely to figure that if his less | ||
| - | capable friend thinks well of a language, it's probably a | ||
| - | dud! hehe | ||
| - | So, then, if he hears th enthusiasm of someone who really | ||
| - | knows & uses th potential of Forth somewhere near its | ||
| - | fullest, he's likely to attribute such enthusiasm to | ||
| - | " | ||
| - | |||
| - | |||
| - | |||
| - | Problems | ||
| - | |||
| - | Plex or contact me as follows: | ||
| - | Giles Spruill 73347,2651 | ||
| - | Advanced Automation, Inc. | ||
| - | 1217 N.E. Miami Ct., Suite 6 | ||
| - | Miami, FL 33132 | ||
| - | Ph# (305) 371-6408 | ||
| - | |||
| - | I would also appreciate any advice that would help make | ||
| - | this file better. | ||
| - | </ | ||
papierkorb/intro.4th.1754859050.txt.gz · Zuletzt geändert: 2025-08-10 22:50 von mka