Kragen is right that PostScript is a lot more like Lisp or Smalltalk than Forth, especially when you use Owen Densmore's object oriented PostScript programming system (which NeWS was based on). PostScript is semantically very different and much higher level that Forth, and syntactically similar to Forth but uses totally different names (exch instead of swap, pop instead of drop, etc).
But its most obvious similarities with Forth are based on generic Computer Science concepts like stacks, which is not something particularly unique to Forth itself, so saying PostScript was influenced by Forth ignores other much more influential languages like Interpress, JaM, and Design System, which directly influenced PostScript and were designed by the same people. Also, PostScript is not threaded like Forth. But it's homoiconic, unlike Forth and Lisp.
https://en.wikipedia.org/wiki/Threaded_code
https://en.wikipedia.org/wiki/Homoiconicity
https://medium.com/@donhopkins/the-shape-of-psiber-space-oct...
The heavily commented PostScript source code of PizzaTool for NeWS shows Owen's OOP PostScript system in action:
https://donhopkins.com/home/archive/NeWS/pizzatool
PostScript was a direct descendent of and heavily influenced by Xerox PARC's Interpress, by John Warnock and Charles Geschke, which itself was a direct descendent of JaM, which stands for "John and Martin", by John Warnock and Martin Newall. And JaM was a descendent of Evans and Sutherland's Design System, by John Warnock and John Gaffney.
https://en.wikipedia.org/wiki/John_Warnock
http://historyofinformation.com/detail.php?entryid=1213
https://en.wikipedia.org/wiki/Martin_Newell_(computer_scient...
https://en.wikipedia.org/wiki/Charles_Geschke
https://en.wikipedia.org/wiki/Interpress
https://en.wikipedia.org/wiki/Evans_%26_Sutherland
Brian Reid (whose brother is Glenn Reid, author of several books on PostScript from Adobe) wrote up an excellent historical summary in 1985 on the laser-lovers mailing list of the influences and evolution of PostScript.
https://en.wikipedia.org/wiki/Brian_Reid_(computer_scientist...
http://glennreid.blogspot.com/
Here's a post I wrote earlier:
https://news.ycombinator.com/item?id=19874245
>DonHopkins 8 months ago [-]
>Brian Reid wrote about page independence, comparing Interpress' and PostScript's different approaches. Adobe's later voluntary Document Structuring Conventions actually used PostScript comments to make declarations and delimit different parts of the file -- it wasn't actually a part of the PostScript language, while Interpress defined pages as independent so they couldn't possibly affect each other:
https://groups.google.com/forum/#!topic/fa.laser-lovers/H3us...
>By now you can probably see the fundamental philosophical difference between PostScript and Interpress. Interpress takes the stance that the language system must guarantee certain useful properties, while PostScript takes the stance that the language system must provide the user with the means to achieve those properties if he wants them. With very few exceptions, both languages provide the same facilities, but in Interpress the protection mechanisms are mandatory and in PostScript they are optional. Debates over the relative merits of mandatory and optional protection systems have raged for years not only in the programming language community but also among owners of motorcycle helmets. While the Interpress language mandates a particular organization, the PostScript language provides the tools (structuring conventions and SAVE/RESTORE) to duplicate that organization exactly, with all of the attendant benefits. However, the PostScript user need not employ those tools.
There's more interesting discussion about the relationship between PostScript and Forth on c2:
http://wiki.c2.com/?ForthPostscriptRelationship
Here's a lot more stuff I've written about PostScript and Forth (two of my favorite topics!):
https://news.ycombinator.com/item?id=11479364
https://news.ycombinator.com/item?id=13198492
https://news.ycombinator.com/item?id=13705664
https://news.ycombinator.com/item?id=13705739
https://news.ycombinator.com/item?id=18317280
https://news.ycombinator.com/item?id=18692144
https://news.ycombinator.com/item?id=18695275
https://news.ycombinator.com/item?id=18696116
https://news.ycombinator.com/item?id=19873630
Thank you so much!! What an amazing effort. I've only read a few of your linked comments so far, but look forward to exploring all those. Thanks again, all very much appreciated.
You're welcome! OOPS (Object Oriented PostScript ;), I meant to say that PostScript and Lisp are homoiconic, but Forth is not. The PSIBER paper on medium goes into that (but doesn't mention the word homoiconic, just describes how PS data structures are PS code, so a data editor is a code editor too).
https://medium.com/@donhopkins/the-shape-of-psiber-space-oct...
Also, here is a metacircular PostScript interpreter, ps.ps: a PostScript interpreter written in PostScript! Since PostScript is homoiconic and so much like Lisp, it was as easy as writing a metacircular Lisp interpreter (but quite different in how it works, since PostScript and Lisp have very different execution models).
https://donhopkins.com/home/archive/psiber/cyber/ps.ps
And here is an explanation of why I wrote it:
https://donhopkins.com/home/archive/psiber/cyber/ps.ps.reaso...
Some Forth systems like Mitch Bradley's OpenFirmware have a metacompiler that can compile the same or different versions of Forth for the same or different architectures (or even word sizes or threading methods), which is a totally different thing than a metacircular interpreter, but also very cool and useful.
https://www.bradrodriguez.com/papers/moving4.htm
https://github.com/MitchBradley/openfirmware/blob/master/for...
Also here's some stuff about LispScript, which is a Lisp to PostScript compiler developed by David Singer and Rafael Bracho at Schlumberger around 1987, and some discussions about the joys of using the same scripting language on the client and on the server and sending JSON-like data structures (polymorphic PostScript arrays and dictionaries) back and forth over the network as events. What we were trying to do with NeWS PostScript between both the NeWS client and server eventually finally happened with JavaScript/JSON between the web browser and server with node.js, and is now called "AJAX".
https://donhopkins.com/home/archive/NeWS/NeScheme.txt
>PostScript is often compared to Forth, but what it lacks in relation to Forth is a user-extensible compiler. You can write your own PostScript control structures and whatnot, like case and cond, to which you pass procedures as arguments on the stack, but the PostScript scanner is not smart -- but there is no preprocessing done to the PostScript text being read in, like the way immediate words in Forth can take control and manipulate the contents of the dictionary and stack while the text source is being read in and compiled, or like the way Lisp macros work. This is one of the things I would like to be able to do with something like LispScript.
https://en.wikipedia.org/wiki/NeWS
>NeWS was architecturally similar to what is now called AJAX, except that NeWS coherently:
>used PostScript code instead of JavaScript for programming.
>used PostScript graphics instead of DHTML and CSS for rendering.
>used PostScript data instead of XML and JSON for data representation.
Also, check out NFS Version 3 aka NeFS, which was NeWS for files -- PostScript in the kernel.
https://news.ycombinator.com/item?id=9271578
>You might get a kick out of Sun's proposal for "NFS 3.0" aka "NeFS". The basic idea was to put a PostScript interpreter in the kernel for extensibly and efficiently executing distributed and even local file system operations. It not only cuts down on network transactions for the same reason NeWS and AJAX does, but even locally you can avoid billions of context switches by executing "find" and tasks like that in the kernel, for example.
The Network Extensible File System Protocol Specification 2/12/90
http://www.donhopkins.com/home/nfs3_0.pdf (pages in reverse order)
https://news.ycombinator.com/item?id=17077721
>Here's some old but interesting discussion about NeFS that I saved from Comp.protocols.NFS. (they were SHOCKED I say SHOCKED!!!)
http://donhopkins.com/home/archive/NeWS/Comp.protocols.nfs.N...
https://news.ycombinator.com/item?id=17482780
And later on around 1990-1993, Arthur van Hoff wrote PdB at the Turing Institute in Glasgow, an object oriented C to PostScript compiler called PdB (for Pure dead Brilliant), which is kind of like TypeScript, conceptually. We used PdB to develop HyperLook (Networked PostScript based HyperCard for NeWS), which I used to port SimCity to NeWS on Unix. (A few years after that, Arthur wrote the Java compiler in Java at Sun in 1995, and lot of other cool stuff since then!)
https://en.wikipedia.org/wiki/Arthur_van_Hoff
https://medium.com/@donhopkins/hyperlook-nee-hypernews-nee-g...
https://news.ycombinator.com/item?id=10088193
>Arthur van Hoff wrote PdB, and we used it for to develop HyperLook (nee HyperNeWS nee GoodNeWS). You could actually subclass PostScript classes in C, and vice-verse!
https://compilers.iecc.com/comparch/article/93-01-152
>Subject: PDB -- ANSI-C to PostScript compiler arthur@turing.ac.uk (1993-01-21)
>From: arthur@turing.ac.uk (Arthur van Hoff)
>Organization: The Turing Institute Ltd., Glasgow, Scotland
>Date: Thu, 21 Jan 1993 12:52:14 GMT
>Hi PostScript Hackers, [...]
>There is no more need to write PostScript! Start using PdB right now! PdB is an optimizing compiler to compile ANSI-C (like) code into Adobe compatible PostScript. It includes executables, examples and many useful header files. Note that it is not dependend on NeWS.
It's considerably less impressive than some of the examples you've linked, but quite a long time ago I wrote a simple Forth VM as a printable postscript document. Might be topical: https://github.com/JohnEarnest/Four.Ps