Earlier quoted context omitted.
Have you tried collaborating with Forth? There's a lot of documented history of people doing so in industry when it was actually used, and more recently I've usually found Forth codebases approachable and easy to follow. Personally I think this is the pay-off for writing the code in the first place because Forth is very difficult to write in a clear way, if you actually manage to do it you've probably made it very cl…
"Have you tried collaborating with Forth?" No, I never did more than very simple experiments with Forth (which is why I started my comment with "what I heard"). "because Forth is very difficult to write in a clear way" But that pretty much means, that the average programmer will have problems with collaborating.
Forth: The programming language that writes itself
161–170 of 174 posts
Re: Forth: The programming language that writes itself
#162Earlier quoted context omitted.
Certainly that is how I read it. It divides effort, spreads it too thinly among too many disparate projects with essentially the same goals, and as a result, they all advance much more slowly. Examples: how many successors to C are there now? Hare, Odin, Joy, Zig, Nim, Crystal, Jai, Rust, D... And probably as many again that are lower-profile or one-person efforts. For a parallel example, consider desktop environment…
The thing is, the most fundamental obstacle to unification, is that unification is a very hard feature to obtain. Even in an LC formalization, do you expect that two "text editor" programs would be interchangeable? Would only a canonical text editor be allowed? Does the LC facilitate arbitrary extensions, that perhaps follow some rules at the interface/boundary? While I also lament what is, on the whole, wasted work…
In case of UIs, this is still an open problem and will be for many years, but I suspect we could do it by defining, in some kind of fuzzy logic for example, what a good UI does look like. Then we could transfer elements from one UI into another.
Or we could just start at the edge. For example, we can unify what a "user input" is, and what a "widget on the screen" is. Formalizing everything would allow us to do such transformations on programs, for example, universal input/output remapping. And then we could continue to unify into more specific logic of what input is being read and how things are drawn on the screen.
Untyped lambda calculus (and its sibling combinatory logic) is just language for expressing logic, nothing more. And it already exists (arguably it's one of the first programming languages, predates Forth and Lisp by at least two decades) and is among the simplest ones we know. I actually became interested in LC so much recently because, believe it or not, expressing things in classical logic is often more complicated than expressing things in LC.
Re: Forth: The programming language that writes itself
#163Earlier quoted context omitted.
> have all lambdas upfront and only composition in the body That is only possible for a very limited subset of lambda terms. For example, it's not possible for the one-point basis A = λx λy λz. x z (y (λw. z)) from which any closed lambda term can be constructed by composition.
Yes, that's deliberate though. (I will call these "concrete" terms, because they lack abstraction in the body, but I am looking for a good name. In fact, no universal one-point basis can be expressed as a single term like that, you need a composition of two; the concrete property is not preserved in composition, although it might be preserved in weaker bases than S,K, such as B,C,K - kind of affine logic.) Anyway, th…
Don't you mean xA = B ?
> x can just disregard A and return B
Not if you require x to be strict, i.e. it must use its argument.
Re: Forth: The programming language that writes itself
#164Earlier quoted context omitted.
Yes, that's deliberate though. (I will call these "concrete" terms, because they lack abstraction in the body, but I am looking for a good name. In fact, no universal one-point basis can be expressed as a single term like that, you need a composition of two; the concrete property is not preserved in composition, although it might be preserved in weaker bases than S,K, such as B,C,K - kind of affine logic.) Anyway, th…
> there exists a term x that satisfies Ax = B Don't you mean xA = B ? > x can just disregard A and return B Not if you require x to be strict, i.e. it must use its argument.
No, that equation can be created as a special case from equation TAx = B (where Txy = yx is a transposition combinator).
> Not if you require x to be strict, i.e. it must use its argument.
I am not sure it would generally help but maybe you mean it only in case of equations xA=B (not Ax=B as I suggested). I also think this strictness condition would be too limiting.
In equation Ax=B, we can take A of the form R_n A_1 .. A_n, where R_n reduces Ax to x A_1 .. A_n (R_n rotates x in front of n arguments).
So if x is concrete and takes n arguments, we can think of it as "text" (parenthesised expression) in symbols that are to be interpreted as A_1, .. A_n. Requiring that every possible symbol is used in a language text fragment is a weird condition, which doesn't make much sense to me.
In any case, my definition of typing judgment then allows to put a chosen condition on a text composed from chosen symbols, which is quite powerful and can be used to e.g. determine whether a quoted expression is valid. And arguably it is a very natural definition in the context of ULC. (I read to Mock a Mockingbird 30 years ago - in partial Slovak translation - and most problems there could be formulated as the Ax=B equation for x being a concrete term.)
Re: Forth: The programming language that writes itself
#165Earlier quoted context omitted.
> Why is it that languages like this don't scale? Stanislav Datskovskiy addressed this rather well: https://www.loper-os.org/?p=69
I've read that a number of times, but this is the first time since the rise of vibe engineering. > I predict that no tool of any kind which too greatly amplifies the productivity of an individual will ever be permitted to most developers. There's a new essay in here, somewhere, about why copilot and AI coding is succeeding at bridging this gap.
I mean, unless it proves with time that in fact it does not help at all and actually slows people down.
https://metr.org/blog/2025-07-10-early-2025-ai-experienced-o...
Re: Forth: The programming language that writes itself
#166Earlier quoted context omitted.
I've read that a number of times, but this is the first time since the rise of vibe engineering. > I predict that no tool of any kind which too greatly amplifies the productivity of an individual will ever be permitted to most developers. There's a new essay in here, somewhere, about why copilot and AI coding is succeeding at bridging this gap.
It is too risky for companies to rely on a language that have a small pool of programmers. The bigger the company, the bigger the language must be. AI multiplies this availability, not productivity.
Which means management must make a choice: getting good code relatively fast from a small pool of high-value individuals that it must therefore cherish and treat well...
Or get poor-quality code, slowly, but from a large and redundant group of less skilled developers, who are cheaper and easier to replace.
It is a truth universally acknowledged that from the three characteristics of "good, fast, and cheap", you can pick which two you want.
In this case, maybe the choice is as simple as "good and fast" or "cheap."
If the structure of the business or the market requires management to pick "cheap" (with concomitant but unspoken "bad and slow") then the structure, I submit, is bad.
Re: Forth: The programming language that writes itself
#167Earlier quoted context omitted.
Well, you do you, and indeed, the entire community is free to do as it wishes. What I find surprising is that there are multiple entire Amiga-themed Linux distros – for example: https://www.commodoreos.net/CommodoreOS.aspx I reviewed it. I was not very impressed. https://www.theregister.com/2025/05/06/commodore_os_3/ And ones which put an Amiga emulator front and centre: https://cubiclenate.com/pimiga/ https://wilkie…
I think you can categorise Amiga enthusiasts in various ways, this is my taxonomy: 1. Hardware enthusiasts who specifically love the Amiga's original hardware, its peripherals, and the early post-Commodore direction (PowerPC accelerators), and/or modding all of the above. These sort of people used WarpOS back in the day and probably use MorphOS or AmigaOS 4 today. The question is whether, for these people, modern sin…
I'm well aware of ROX Desktop and have used it in the past. I've written about it:
https://www.theregister.com/2025/01/14/the_end_of_absolute_l...
ROX's AppDirs provided the app format used in AppImage.
I am sure I remember a Mac-like one, and I've asked -- https://news.ycombinator.com/item?id=29937562 -- but to no avail.
You say a WM isn't enough, and I agree, but in this case, amiwm is still right there.
I own an Amiga and I'm interested and I try to cover Amiga news, but back in the 1980s, I was an Archimedes owner. I loved RISC OS and I never mastered AmigaOS. This is not something I personally want, although I'd love to write about it.
Re: Forth: The programming language that writes itself
#168Earlier quoted context omitted.
The thing is, the most fundamental obstacle to unification, is that unification is a very hard feature to obtain. Even in an LC formalization, do you expect that two "text editor" programs would be interchangeable? Would only a canonical text editor be allowed? Does the LC facilitate arbitrary extensions, that perhaps follow some rules at the interface/boundary? While I also lament what is, on the whole, wasted work…
Sometimes you can prove mathematically that two different approaches are equivalent, but differ only in name or some parameter, and that's a unification of sorts, without proliferation of standards. In case of UIs, this is still an open problem and will be for many years, but I suspect we could do it by defining, in some kind of fuzzy logic for example, what a good UI does look like. Then we could transfer elements f…
Certainly, but that would already be supposing most of the work to unify at the source level is done, unless an extremely strong normalization is possible.
> Untyped lambda calculus (and its sibling combinatory logic) is just language for expressing logic, nothing more. And it already exists (arguably it's one of the first programming languages, predates Forth and Lisp by at least two decades) and is among the simplest ones we know. I actually became interested in LC so much recently because, believe it or not, expressing things in classical logic is often more complicated than expressing things in LC.
(Personally, I prefer combinators slightly more)
I don't deny the power of LC for some uses, but taking one program, reducing it down to an LC equivalent, and then resurfacing as another program (in a different language, but otherwise equivalent), or some other program transformations you may desire, would certainly be elegant in some sense, but very complex. It's like programming in Brainfuck; the language itself is very simple, and making mechanistic tooling for it is very simple, but I don't think the tooling we could invent in 50 years would be sufficient to make Brainfuck simple to read or write. Moreover, formalizations of, say, "button" are not a problem, but scaling to different screens, devices, use cases, and so on will greatly increase the scope. This OS represents input events this way, this hardware provides that sort of data. I think this is the same problem as to why people, everyday, don't bother to make formal arguments almost all of the time. It's not that a formal argument along the lines of "you didn't take out the trash today, so I have reason to be frustrated with you" can't be formulated or proven, but rather that the level of rigor is generally considered both fatiguing and unnecessary.
Any time someone suggests something that should make things much simpler, I'm skeptical. There are things that have essential complexity too great to be made simple, and then humans maybe have an inherent overhead of accidental complexity, above and beyond the accidental complexity we accidentally add. I'm still interested to see where your efforts lead, but I'm not expecting to see cheap nuclear fusion for another 10 years at least, so.
Re: Forth: The programming language that writes itself
#169Earlier quoted context omitted.
It's a different solution for a different time. Forth was an excellent way to write a powerful and expressive programming language that could self-host with a bare minimum of assembly language "bare metal" programming. The fridge-sized computer that Forth was originally developed on had double-digit kilobytes of memory (maybe 8192kwords, with 16-bit words) and clocked instructions through at a whopping 300kHz or so.…
What would your top two tips for beginning Forth programmers be? Other than "don't use Forth".
Then find a computer you're really into, and port fig-Forth to it, just for fun. Don't copy the source across, type it in with your own changes as you go.
Edit: Don't forget to have fun. That's the most important thing. You're doing this because you *can*, and just to see what will happen.
Re: Forth: The programming language that writes itself
#170Earlier quoted context omitted.
> I originally wrote GraFORTH Oh really? Given you were around at about the correct time period, could you hazard a guess at what dialect this very old Forth game from Byte magazine was written in? https://github.com/RickCarlino/Cosmic-Conquest-1982 It has some graphics commands in that I couldn't find in any other version of Forth on the Apple II. I'm a little outside the Apple II demographic, since they didn't real…
> could you hazard a guess at what dialect this very old Forth game from Byte magazine was written in? The writeup identifies the original Forth source/version as most likely FIGForth '78, so I assume that's correct. This doesn't mean it has no code borrowed from elsewhere, and we might never sort that out. I should add that Forth has the property that you go from nothing to writing programs pretty quickly, because i…
The first Forth machine I used was the Jupiter Ace, which was a home computer sold in the UK by a couple of guys who spun their company off from Sinclair. It was a bit too underpowered and a bit too late and a bit too weird to really "land" - everyone either had a ZX Spectrum or a Commodore 64 by then, and schools and rich kids had BBC Micros (I got right into 6502 machine code on the one we had in school when I was about 9, and then got my hands on its predecessor, the Acorn Atom). I also had a couple of Epson HX20s that the company my dad worked for had used as data loggers, which had Forth ROMs fitted. That's how I got right into 6809 programming, and that chip is ludicrously suitable for Forth!
I got Cosmic Conquest working on an Apple II emulator but the support code around getting it working is frankly terrifying. I used a fig-Forth disk, and wrote my own implementations of the graphics words used there, which I guess is what the original author did.
Tracking them down has so far proved impossible, and it's quite likely they are no longer around.