News for hackers. Stuff that matters.
Re:Stack-Oriented Programming by jerf on Tuesday January 14, 2020 @04:30PM (#22049434)
It's a lot like Lisp, especially as it was decades ago. The language itself is low-level but you can construct some very high-level-like constructs in it yourself. Where it differs is that Lisp is a low-level language for a machine that doesn't really exist unless you have a Lisp machine, and Forth is for your actual hardware... as viewed through a set of stacks, anyhow. I suspect had it ever been used for large code bases it would have had a similar problem that Lisp had, where any given program might be elegant but there would be too much convention differences between any two programs to let them work together very well, similar to the problem that Lisp has sometimes been considered to have with macros. (It's great to be able to synthesize your own entire world, but no two programmers synthesize the same world.)
Re:Stack-Oriented Programming by ngcc_hk on Tuesday January 14, 2020 @09:11PM (#22051193)
Can forth handle delay execution. Or a conditional where one later parameter never need is not reached. It seems all parameters at least needed to be in first, say a rough lisp like use case.

(Def ExecN func n infinite-series)

(ExecN + 10 integer)

... can it be done in forth.

Re:Stack-Oriented Programming by int_19h on Tuesday January 14, 2020 @10:32PM (#22051549)
Immediate words in Forth are somewhat analogous to macros, and therefore can do this kind of stuff if need be - not evaluating something, or evaluating something several times. Take a look at a sample implementation of IF/ELSE/THEN and DO/LOOP: https://github.com/nornagon/jonesforth/blob/4f853252f715132e...

Forth also has anonymous words (:NONAME), so you can dynamically define a computation and pass it around on the stack, and later execute it. I don't think there's any way to clean them up, though (no GC).

Re:Stack-Oriented Programming by RodgerTheGreat on Tuesday January 14, 2020 @10:20PM (#22051503)
Of course. You can build whatever functional abstractions you like in Forth. Some time ago I did a number of experiments with lazy generators: https://github.com/JohnEarnest/Mako/blob/master/lib/Algorith...

The above dialect uses { } to delimit anonymous inline word definitions. RetroForth has a similar feature, and Factor uses the same syntax for "quotations", which have slightly different semantics but roughly the same meaning.

Re:Stack-Oriented Programming by ngcc_hk on Wednesday January 15, 2020 @06:23AM (#22053328)
Thanks. If I start today to learn as I have searched a bit ... it seems to have a dialect retroForth whilst I see a 10 years old recommend swiftforth ...

Actually the tutorial that host a forth on js (like clojurescript just self implement).

Which path to go?

Do not want to learn lisp ended up in scheme.

Re:Stack-Oriented Programming by lebuffon on Wednesday January 15, 2020 @09:29AM (#22054381)
Forth can be a little troublesome in that area. There is a standard language but it is primitive. Extensions for real world problems tend to diverge in syntax. This has lead to a saying: "If you've seen one Forth, you've seen one Forth" :)

It's better than in the past with an ISO standard (IMHO) but know that if you change language providers there will be differences for things like external library linking (if available), GUI interaces etc.

There are demo versions of commericial systems at:

https://www.mpeforth.com/resource-links/downloads/

https://www.forth.com/download/

And of course a major pass-time in the Forth community is writing your own Forth. There is even a few Forths written in Python. (for instructional purposes only I assume)

http://openbookproject.net/py4fun/forth/forth.html

Re:Stack-Oriented Programming by RodgerTheGreat on Wednesday January 15, 2020 @07:30AM (#22053623)
On desktops I've used gforth[0]. It's rather large and heavyweight, but easy to install and has decent documentation; not a bad starting point. Alternatively, JonesForth[1] is an excellent extensively-commented implementation suitable for reading start-to-finish.

[0] https://www.gnu.org/software/gforth/

[1] https://github.com/nornagon/jonesforth/blob/master/jonesfort...