Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What forth systems you use? #2

Open
VoidVolker opened this issue Feb 27, 2015 · 84 comments
Open

What forth systems you use? #2

VoidVolker opened this issue Feb 27, 2015 · 84 comments
Labels

Comments

@VoidVolker
Copy link
Member

VoidVolker commented Feb 27, 2015

  1. What forth systems do you use and for what OS?
  2. What is your favourite forth system or systems?

My answers:

  1. Windows: SP-Forth, Quark Forth
    Linux: gForth, SP-Forth linux
    OSX: nop
    Embedded: one time was Swift Forth
  2. SPF, Quark, gForth. I think VFX Forth looks very useful. Have no time to try it :(
@philburk
Copy link

I use my pForth on Mac, Windows, Linux and embedded systems.

@larsbrinkhoff
Copy link
Member

I'm mostly toying with my own lbForth. Sometimes I test things in Gforth.

@ghost
Copy link

ghost commented Mar 1, 2015

I've been using amforth, flashforth, and asforth on the Atmel atmega328.
For Arm processors I have been using gforth, Riscy Pygness, and rf.
For 30 years I used figforth on a Sinclair Spectrum.
Was using win32forth and bigforth on Intel machines.

@narke
Copy link
Member

narke commented Mar 1, 2015

I'm migrating to colorForth but I mostly use gforth and pforth.

@crcx
Copy link
Member

crcx commented Mar 1, 2015

I mostly use my own dialects (Retro and Parable) on iOS, OS X, and Linux. I occasionally work with SwiftForth and gForth (on Windows and Linux, respectively).

@rclabs
Copy link

rclabs commented Mar 3, 2015

I use GForth on Linux.
My favorite is GForth for no particular reason other than it seems complete and is available as a package to debian/ubuntu.

@scotws
Copy link

scotws commented Mar 12, 2015

GForth on Linux as well, and as comparison while writing my own Forth for the 6502.

@jamesbowman
Copy link
Member

Likewise, Gforth on Linux has been my primary for many years.

I also occasionally use VFX Forth for Linux, which is amazingly fast.

These days I am using my own Forth on an embedded CPU, SwapForth.

On Thu, Mar 12, 2015 at 6:39 AM, Scot W. Stevenson <notifications@github.com

wrote:

GForth on Linux as well, and as comparison while writing my own Forth for
the 6502.


Reply to this email directly or view it on GitHub
#2 (comment).

James Bowman
http://www.excamera.com/

@ghost
Copy link

ghost commented Mar 12, 2015

A long time ago I used retroforth, then what I wrote myself together and now,
when I'm programming anything forth related I use mostly gforth.

No particular favorite at the moment.

@chitselb
Copy link
Member

Over the years, I've used MMSForth on a TRS-80 Model 4; Blazin' Forth on a C=64; Quartus Forth on a Palm Pilot; Gforth on Linux; FigForth is the first Forth I ever got running on my PET, and I'm currently working on PETTIL, an artisanal Forth for the PET hosted here on github. Of these, my favorite would have to be Blazin' Forth, which did a really nice job of teaching me the language, exposing the C=64 hardware, bringing me into the open source world, etc...

@jkotlinski
Copy link

Blazin' Forth is great :) I used it for inspiration for my own C64 Forth, DurexForth.

@bshepherdson
Copy link

I hacked on my own not-quite-standard handwritten ARM assembly Forth, which was fun, but it's much too slow for my current project (a Gameboy emulator).

For the Gameboy I need something fast that can speak to SDL2; GForth does nicely.

For another project, however, I can't use GForth. That project is bare metal but not embedded (plenty of RAM and CPU power), so I need fast binaries I can ship to the bare metal opaquely, without GForth's forcing of the GPL.

To make a long, confidential story short and publishable: there might be open source fallout from this project, but even if so it'll have to be Apache licenseable, and in either case to publish binaries without needing to expose 100% of the source code under GPL.

I'm too new to the modern Forth world to know: are there any fast, standard(ish) Forths around that fit that bill?

@larsbrinkhoff
Copy link
Member

SP-Forth compiles to optimised x86 machine code. Documentation may be hard to read.

@bshepherdson
Copy link

ARM support is a not-quite-essential extra. But that's still a useful data point, thanks!

@Lehs
Copy link

Lehs commented Apr 7, 2015

I'm using Windows and SP-Forth. My favorite toy was Fig-Forth. I'm also looking at SwiftForth.

@cwpjr
Copy link
Member

cwpjr commented Apr 7, 2015

I have a ARM Cortex M fig/f83ish Forth (FISH) here:

https://www.mediafire.com/folder/6fqkfykcel80s/FISH_Forth

@larsbrinkhoff
Copy link
Member

@cwpjr Maybe put that on GitHub?

@cwpjr
Copy link
Member

cwpjr commented Apr 8, 2015

@larsbrinkhoff FISH is a Reference Model, meaning that it is closed source.

Does anyone know or have an opinion about using github to distribute "binaries" (really .hex and ..sym files and pdf documentation).

With FLASH_SAVE the system can be extended...

@chitselb
Copy link
Member

chitselb commented Apr 8, 2015

There are binary cassette tape images (*.tap files) in
github.com/chitselb/pettil that work just fine for me and all the other
users of PETTIL worldwide (also just me)

On Wed, Apr 8, 2015 at 3:32 PM, Clyde Willis Phillips Jr. <
notifications@github.com> wrote:

@larsbrinkhoff https://github.com/larsbrinkhoff FISH is a Reference
Model, meaning that it is closed source.

Does anyone know or have an opinion about using github to distribute
"binaries" (really .hex and ..sym files and pdf documentation).

With FLASH_SAVE the system can be extended...


Reply to this email directly or view it on GitHub
#2 (comment).

@jkotlinski
Copy link

@chitselb Maybe it pleases you to hear that I gave PETTIL a test ride earlier today? But I wasn't able to find any binaries even though I looked for it. "Releases" is the usual way to distribute binaries using Github.

@chitselb
Copy link
Member

@jkotlinski I just saw this. Maybe I should be more social here. I'll see about including the binary (tmp/pettil.obj) , which can now only be built from source from the github.com/chitselb/pettil repo on a system that has Ruby, xa65 and bash.

@BlameTroi
Copy link

I'm running on Mac, Windows (2 platforms), Ubuntuish Linux, and Raspberry Pi. After experimenting I've settled on gforth for my relearning experience even though it doesn't run well on Android. My current plans are go through a stack of old Forth books, write some stuff for fun, and then build one of those bare metal Forths for the ARM.

As I work through various books I'll probably post reviews in a respository. I know most of the written words are severely outdated but I'm old school and like to work with a text as I explore.

@forthy42
Copy link
Member

Am Donnerstag, 27. August 2015, 13:06:59 schrieb Troy Brumley:

I'm running on Mac, Windows (2 platforms), Ubuntuish Linux, and Raspberry
Pi. After experimenting I've settled on gforth for my relearning experience
even though it doesn't run well on Android.

What kind of issues do you have with Gforth on Android? "Doesn't run well" is
a form of bug report that unlikely will be fixed ;-).

Bernd Paysan
"If you want it done right, you have to do it yourself"
net2o ID: kQusJzA;7_?t=uy@X}1GWr!+0qqp_Cn176t4(dQ_
http://bernd-paysan.de/

@hcchengithub
Copy link
Member

I use jeforth on Windows. It tops on javascrip so can do whatever javascript can with benefits of forth. This is its kernel that has only 'code' and 'end-code' at first. You build your own things then.

@BlameTroi
Copy link

@forthy42 I haven't been able to get past the problems with the console IO, which is a known issue with gforth on Android. Half the time your input is not echoed in a timely manner. I read about this elsewhere but decided to try it to see how bad it was. I wasn't willing to put up with it.

@forthy42
Copy link
Member

Am Montag, 31. August 2015, 08:44:54 schrieb Troy Brumley:

@forthy42 I haven't been able to get past the problems with the console IO,
which is a known issue with gforth on Android.

It's a known issue with some keybords, which only have word-mode, no character
mode.

Half the time your input is
not echoed in a timely manner. I read about this elsewhere but decided to
try it to see how bad it was. I wasn't willing to put up with it.

Ah, that issue. Some keyboards do not pass each keystroke to Gforth when it
happens, but wait for a complete word.

That's why I have a list of recommended keyboards. Those all work as
expected. Use e.g. hacker's keyboard; Go keyboard is also good enough (with
cursor+tab).

The problem with word mode is that I'm not supposed to pass those characters
to the actual input, because that's subject to auto-correction and further
input.

I will see what I can do to work around the word-mode problem; for now, please
try it with a better keyboard that follows Google's specification.

Bernd Paysan
"If you want it done right, you have to do it yourself"
net2o ID: kQusJzA;7_?t=uy@X}1GWr!+0qqp_Cn176t4(dQ_
http://bernd-paysan.de/

@BlameTroi
Copy link

I'll give it a whirl. I have hacker's keyboard already, but I didn't think to try it. Otherwise I enjoy gforth and am having a blast on my mac getting into the language.

@forthy42
Copy link
Member

forthy42 commented Sep 1, 2015

Am Montag, 31. August 2015, 14:39:12 schrieb Troy Brumley:

I'll give it a whirl. I have hacker's keyboard already, but I didn't think
to try it. Otherwise I enjoy gforth and am having a blast on my mac getting
into the language.

What keyboard do you use otherwise? I gave a few popular a try, and the worst
is Swype, or using Swype-style input on other keyboards that support it. I've
a fix for that which should mostly work for the other offenders, too (that
will show up the next day or so). I've not yet found a way to tell Swype how
much there's in the edit buffer when you use the volume keys to navigate in
the history - setting the editor object to the actually edited text doesn't
work. Apparently Swype makes its own assumptions about what the edited object
actually contains, and limits backspaces to the text it thinks is there, and
that's the wrong way to go.

Bernd Paysan
"If you want it done right, you have to do it yourself"
net2o ID: kQusJzA;7_?t=uy@X}1GWr!+0qqp_Cn176t4(dQ_
http://bernd-paysan.de/

@BlameTroi
Copy link

I like swype for social media, but it's completely useless for precise typing. I do 95% of my social media stuff on my Galaxy Note 3. I'm not sure I could even use swype on a smaller screen :) I was able to experiment quickly with the hacker keyboard and gforth felt like gforth again.

@MitchBradley
Copy link

MitchBradley commented Jun 28, 2017 via email

@RogerLevy
Copy link
Member

RogerLevy commented Jun 28, 2017

@DRuffer no, why?
@AndreasKlimas that sounds totally reasonable
@ChristerNilsson it's not Forth ... I tried it out for a number of weeks, expecting an easy transition. in the concatenative family of course. but Postscript isn't Forth either
@MitchBradley that's my attitude as well and i also think devs have done a good job of responsible naming. it definitely makes categorizing easier.

@larsbrinkhoff
Copy link
Member

@RogerLevy, I wrote "for the purposes of this group", by which I mean that it's probably not a problem to leave the interpretation of "Forth" open to each individual. As pertaining to interacting with this group.

@DRuffer
Copy link
Member

DRuffer commented Jun 28, 2017 via email

@RogerLevy
Copy link
Member

RogerLevy commented Jun 28, 2017

@DRuffer Well, blocks in colorforth don't even work the same way as classic blocks, so I don't see how it even holds up as an example of compatibility. True direct portability is a pipe dream, the conventional concept of it is irrelevant to Forth, when everything is so easy to add yourself. If you're going to have to potentially modify your app to port it to colorforth (and who is doing that anyway? but for arguments sake) and blocks are so easy to implement the way you want it i don't see a need for there to be blocks in every Forth for it to be called a Forth - which is a separate issue from compatibility, which I'm definitely not qualified to or interested in figuring out. (and anyway I think it's largely a lost cause in the pure sense of the word and we'll only ever have something "good enough" for Forth)

@RogerLevy
Copy link
Member

@DRuffer and btw, I feel that issues of compatibility in Forth are largely a function of its lack of a namespacing system. Once it has an agreed-upon one, what flavor of block system you use won't matter anymore and it won't matter if a system has it out-of-the-box or not.

@GarthWilson
Copy link

RogerLevy wrote,

we can have at least a simple, loose definition - 2 stacks, dictionary, colon definitions -
personally I'd also add that it should be typeless, have cells, and be interactive

I would add: RPN, consistent stack cell size, stacks are visible to the programmer, has "the pearl of Forth," ie, CREATE, DOES>, and related words, which enable the programmer to make new kinds of defining words and to specify their compile-time behavior and run-time behavior separately, although not every program needs to use these.

About storage, blocks, etc.: My workbench computer does not have a file or block system. I edit the source code on the PC in MultiEdit in order to have the big keyboard and full screen and file storage, and "print" (or so the PC thinks) marked blocks of text over RS-232 to the workbench computer which interprets, assembles, or compiles, as appropriate, on the fly, as little as a word at a time or as much as many pages or an entire file at a time, sometimes while doing something else at the same time. This is done without any special software on the host PC, and without leaving or suspending the editor (since it just thinks it's printing a block to an old-fashioned RS-232 printer). Any computer that can print blocks of plain text from a text editor to RS-232 could act as the host in this way. It doesn't have to be a PC or use any particular OS. The workbench computer just thinks you're typing at an RS-232 keyboard (one that sends out ASCII, not keycodes), and that you're a lightning-fast typist who never makes any mistakes; but actually the source code is coming from the PC. I set this system up when doing some automated test equipment at work in 1990. (See http://6502.org/users/garth/projects.php?project=6) The final programs were in ROM; but I worked on new portions interactively, letting the SBC do its own compilation in RAM this way. Every so often, after accumulating a fair amount of new working code, I ran the metacompiler again to transfer the new code to EPROM. A couple of years later I designed a product that ran Forth but code was again in ROM; so neither of these had a file or block system.

I had to use blocks for a short time in about 1999 but I hated it. They have a few good points but these are generally greatly outweighed by their disadvantages.

@rdrop-exit
Copy link
Member

Blocks aren't necessarily about persistence, Chuck switched to the equivalent of : block 1024 * ;.

@rdrop-exit
Copy link
Member

I think Forth and Factor are in the same family, concatenative languages.
http://concatenative.org/wiki/view/Concatenative%20language

Since Forth pre-dates that denominative by decades, I prefer to think of Factor as part of the family of Forth-like languages.

@AndreasKlimas
Copy link
Member

AndreasKlimas commented Jun 29, 2017 via email

@GarthWilson
Copy link

GarthWilson commented Jun 29, 2017

@AndreasKlimas, that experience was close to 30 years ago. As I remember, an advantage of the blocks was that one or another could tell the Forth system to load a particular block, or range of blocks, based on a condition for example. But if you had to insert a block, the numbers of the blocks after it would get bumped up, so they no longer had their original block numbers. For example what had been block 61 would become 62; so if you say 61 LOAD, now you'd get the one before the one you intended. I can imagine ways to remedy that only to a limited extent. In a text file, I envision a way to get the capability of loading various sections by using labels that would be searched for, so you could say for example, "Is true? If so, load from <label_X> to <label_Y>." What you can do with text files is have several different ones and optionally INCLude or or another, meaning pull them in at that point, like calling them for compilation.

I did not like that the lines were only 64 characters long. Even with shadow screens, that only made for 128 characters, and with an immovable barrier in the middle. I got more than that (132) on my monitor with the1990's MultiEdit text editor running under DOS. Yes, DOS could do more than 80 columns. I usually kept it set to 132x43, and occasionally 132x60, as much as approximately a triad of screens plus their shadow screens, viewable simultaneously; but I could tile and window it any way I wanted. Sometimes I had as many as 35 files open at once, and the editor was point-and-click, drag-and-drop, etc..

I also didn't like the blocks being only 16 lines each. If I'd change my mind and needed to add more material in the middle than would fit without losing lines off the bottom, it was a mess to fix.

The professional programmers' text editor was just far more flexible. But I can see why, back in the day of very limited resources, it made sense to keep to the simple block disc interface. I sometimes wondered how it would be if blocks were 4K each, 128 columns by 32 lines.

@AndreasKlimas
Copy link
Member

AndreasKlimas commented Jun 29, 2017 via email

@RogerLevy
Copy link
Member

@AndreasKlimas True, but simplicity is an idea, and blocks are just a manifestation. They have their limitations. There was a time when they were considered all you'd need, but it's been a long time since then and computers are a lot bigger and faster.

For reasons of speed and utility my old Gamecube Forth fetched blocks on demand from disk in 64kb aligned chunks. If you read from block 0 after initial load you could assume blocks 1-63 were in memory, ColorForth style.

@MitchBradley
Copy link

MitchBradley commented Jun 29, 2017 via email

@Lecrapouille
Copy link

What about macFORTH ? Nobody :) http://bitsavers.informatik.uni-stuttgart.de/pdf/creativeSolutions/MacFORTH_1.2_Oct84.pdf

@MitchBradley
Copy link

MitchBradley commented Jun 30, 2017 via email

@MitchBradley
Copy link

MitchBradley commented Jun 30, 2017 via email

@RigTig
Copy link

RigTig commented Jul 3, 2017

My first Forth was on a VIM-1 board (got renamed to SYM-1); a Rockwell 6502. I hand keyed 8K of Intel hex code twice (once to key in, second one to verify). But it needed disk and I could not afford one, so I buffered 8 blocks in another 8K and wrote a driver to read/write 1K blocks to a cassette tape. Manually controlled tape movement!! Fun, fun, fun!! The blocks were just a simple unit of storage. Of course, they were numbered and called screens for source code. Oh yes, my display was a modified TV and anything more than 64 characters across was too fast for the video bandwidth. So many of the 'standards' were just practical limitations and/or convenient choices based upon the technology available at the time. They worked at the time, but that doesn't mean they ought to be kept. That said, sometimes revisiting the quaint old ways is still fun.

@GarthWilson
Copy link

@RigTig I used a 65c02 (CMOS, more instructions and addressing modes than NMOS) in some automated test equipment in about 1990 at work. It worked out very well. See it at http://6502.org/users/garth/projects.php?project=6 . I mentioned it further up but did not give the link. If you wander around that section of the site, I should comment that the page on my 65c02 workbench computer on which I use Forth there is quite outdated. I have github access to that site, but those oldest pages are not on it. Making additions and edits took too long there, so I started my own 6502-oriented site, http://wilsonminesco.com/, with loads of articles and information. One of the major features is the stacks treatise, at http://wilsonminesco.com/stacks/, which has 19 chapters plus appendices. While Forth is mentioned quite a few times, several chapters are about doing things in assembly in a very Forth-like way.

BTW, the 65xx family has come a long way since the SYM-1, although not as far as the x86. All the off-the-shelf ones being made today are guaranteed for at least 14MHz and usually top out at about twice that (if the supporting parts can keep up, since it's only a slight exaggeration to say a read happens in basically half a cycle which is 20ns @ 25MHz, including time for glue logic), and the fastest ones are running over 200MHz (but in ASICs). The '02 is still selling in volumes over a hundred million (100,000,000) per year, but you don't see them because they're hidden as the processor at the heart of ASICs embedded in automotive, industrial, appliance, toy, and even life-support equipment. The 65816 is the 16-bit upgrade, with more instructions and addressing modes than the 65c02, and is more suitable for multitasking, multithreading, relocatable code, and compilation of higher-level languages. My 65816 Forth runs approximately 2.5 times as fast as my 65c02 Forth at a given clock speed.

@RigTig
Copy link

RigTig commented Jul 3, 2017

My current projects include working with a Forth on STM8 (by Thomas, https://github.com/TG9541/stm8ef). STM8eForth is derived from Dr. Ting's eForth. It is fun to squeeze out of a 8-bit CPU such magical things as a GCODE interpreter for a 3D printer, and multilateration (see https://en.wikipedia.org/wiki/Multilateration#Solution_with_limited_computational_resources). Someone said I needed a bigger CPU, but they haven't any idea of how much punch you can get with a well-crafted Forth solution. I've temporarily digressed into the internal implementation of the Forth and the debug module of the STM8, but that is because it is interesting and fun.
I look at Forth as a toolbox; some tools get used often and others far less so. I am only a hobbyist, but I still surprise some much younger developers with what can be done.

@GarthWilson
Copy link

@RigTig I should have commented earlier— If you still have any interest in the '02, join us on the 6502.org forum at http://forum.6502.org/ . There's a section of the forum dedicated to discussions of various Forth models on the 6502, 65816, and related microprocessors and microcontrollers. The distinguished Dr. Brad Rodriguez, author of CamelForth and somewhat of a giant in the field of Forth, is on there.

@hcchengithub
Copy link
Member

hcchengithub commented Jul 3, 2017 via email

@AndreasKlimas
Copy link
Member

AndreasKlimas commented Jul 3, 2017 via email

@hcchengithub
Copy link
Member

@AndreasKlimas welcome to join us with jeforth where j is JavaScript so it should work anywhere JS is available. Its kernel is 'project-k' @ https://github.com/hcchengithub/project-k , a tiny forth VM with only two words, code and end-code, so 'code Hi console.log("hello world!!") end-code' generates your 3'nd word based on project-k kernel.

@RigTig
Copy link

RigTig commented Jul 5, 2017

@GarthWilson: thanks for links. Not using 6502s right now, but good to know where to touch base.
I am enjoying the challenge of the 8-bit STM8 for the time being. And I have recently used punyforth on esp8266 too.

@gordonjcp
Copy link
Member

I've been using Forth on a 6809-based system for a while now, having adapted Dave Dunfield's Forth for his homebrew machine to the Ensoniq Mirage, a 1980s sampler. This has allowed me to poke at the hardware and build some diagnostic tools to help repair them, as well as making some very peculiar noises.

@wejgaard
Copy link
Member

wejgaard commented Jul 6, 2017

@MitchBradley Thanks for making "blocks versus screens" clear. Thirty years ago I learned to like blocks and screens with a simple constraint: One word definition per screen. IOW, dedicate a whole block to each word in the dictionary. - Suddenly you have ample space for both definition and a good comment. And there is more. You can easily implement hypertext links in the screen editor, and add "structure headers" to the dictionary (with blocks for text) to present the words in a Smalltalk-like browser. You get new options for handling cross-development, e.g. selective loading (only words that are actually used), or single stepping the target code through the source text in the screen. Ex. www.holonforth.com/using.html.

@rdrop-exit
Copy link
Member

rdrop-exit commented Jul 7, 2017

@wejgaard Kudos for taking the block/screen concept so far.
How does Holonforth's 1 screen = 1 word definition approach deal with any interpreted Forth source interspersed between the word definitions?

@wejgaard
Copy link
Member

wejgaard commented Jul 8, 2017

@rdrop-exit Thanks - Usually, the units contain word definitions, and the name of the unit is also (made) the name of the word. But a unit can have any source chunk to interpret immediately and then gets a describing name. The chunk is loaded between the adjacent units. - For the full story (initial version 1989) see www.holonforth.com/ef89.html. Experience it in Holon86 or -11. Note: In Holonforth the editor creates the dictionary, the structure is permanent, the compiler merely inserts code addresses.

@rdrop-exit
Copy link
Member

@wejgaard Thanks for the explanation, very interesting approach.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests