HN user

atrn

49 karma
Posts0
Comments35
View on HN
No posts found.

I did a lot of work with transputers and occam in the 1980s and wrote an OS for a machine that used them. The exposure to the CSP way of thinking was a blessing. occam-2 on the other hand was a little too primitive.

I remember when Inmos marketing came up with "We wanted to make occam the FORTRAN of parallel processing". My response was "You have." (a reference to occam-2 having only static arrays and no concept of a record/struct)

They had a functioning compiler and decided to concentrate on other areas and it's not too uncommon for a languages's compiler to NOT be written in that language. Afterall Rust relies on the non-Rust LLVM.

At home I use buckling springs (Unicomp model M style plugged into an iMac) - I live alone and can make lots of typing noise. In the office its a Filco with some color Cherry switch I forget but its a lot better than the keyboard that came with the box they supply.

No beard but it would be grey...

A variant of this has been my PS1 since the 90s (yes, mostly on workstations with a GUI by then [Sun,NeXT,HPUX etc...]). Unfortunately bash doesn't like a lone ';' without something before it ("-bash: syntax error near unexpected token `;'") so I've had to use ':; ' with it (I like its use of readline, emacs user since Gosling's in the early 80s).

Triple-click, middle-click (for xterm and others that do that) is efficient and easy. The csh-inspired '!!' can work nicely too though.

A great engineer and hacker. I've recorded (bass) through his circuits numerous times over the decades.

I don't know if it was his idea or not but I always loved the Portico 5042 tape emulator. Want the sound of tape? Then run the signal through some tape heads. A proper "hack".

I really wish Go's select had guard clauses. The need to nil channels feels like a hack. However I haven't actually had much need for them but haven't written many things that would need them.

I do miss PAR's synchronization semantics, which Go programmers know as the "sync.WaitGroup" idiom. Given the number of times I see Go developers asking about synchronizing goroutine termination perhaps having some form of concurrent control structure atop 'go' could help. Or maybe not - they'd just start asking about their inability to terminate :) At least PAR is easy enough to simulate (I wrote myself a little 'par' package to hide the WaitGroup manipulations with functions/closures as the [CSP] process bodies).

I did a lot of occam in the 1980s working with transputer-based machines (I wrote a sort of OS for the system our company was building to target TV/film animation). At the time Inmos marketing came up with the line "We want to make occam the FORTRAN of parallel processing." My response, referring to occam's lack of data structuring, was, "You have."

Coming from an occam/transputer background (in the 1980s) I felt goroutines were too low level. Luckily its trivial to add a PAR-like construct via sync.WaitGroup (e.g. github.com/atrn/par). That said Go's channels are far easier to work with - buffering and multi-producer/-consumers being very common needs which, in occam, you implement yourself. The lack of guards in Go's ALT (select) is a shame and the nil channel hack is just that, a hack.

transputers had four links and comms beyond that required routing in s/w. I wrote such a thing for a transputer machine.

Also, the auto-discovery wasn't really auto... That was the boot code probing for CPUs on other ends of links and propagating itself to connected CPUs, building a map of the network in the process (which is kind of cool).