Tony Garnock-Jones
eighty-twenty.org · Personal blog · on HN since 2011
Tony Garnock-Jones writes on programming languages, operating systems, networking, and actors, with notes on Smalltalk, Erlang, and tail calls.
What HN saysHN commenters mainly link his post showing that Mendeley encrypts its user database, which they read as lock-in, and a paper on functional operating systems.
28HN people shared it
10linked it in comments
56stories submitted
1.2Kstory points
3 months agolast shared
2011people per year2026
Most-shared posts
- 1Why Object-Oriented Languages Need Tail Calls (2011)5 people · 58 points · first shared 2016 · 71 comments on HN
- 2Why OO Languages Need Tail Calls4 people · 34 points · first shared 2011 · 5 comments on HN
- 3Mendeley encrypts your data so you can't access it4 people · 1 points · first shared 2018 · discussion on HN
- 4The Weaknesses of Smalltalk Are the Strengths of Erlang (2011)3 people · 4 points · first shared 2015 · 1 comments on HN
- 5Lying to TCP makes it a best-effort streaming protocol2 people · 215 points · first shared 2018 · 91 comments on HN
- 6History of Actors2 people · 71 points · first shared 2016 · 9 comments on HN
- 7Monads in Dynamically-Typed Languages2 people · 45 points · first shared 2015 · 2 comments on HN
- 8Our operating systems are incorrectly factored2 people · 6 points · first shared 2016 · 1 comments on HN
- 9UI for sums must remember products2 people · 4 points · first shared 2024 · discussion on HN
- 10TypeScript: Messages from Interfaces and Back2 people · 3 points · first shared 2021 · discussion on HN
- 11Why learn Smalltalk?2 people · 2 points · first shared 2019 · discussion on HN
- 12Purely Functional Operating Systems2 people · 1 points · first shared 2022 · discussion on HN
- 13Monads in Dynamically Typed Languages2 people · 1 points · first shared 2015 · discussion on HN
- 1460x speed-up of Linux “perf”1 people · 477 points · first shared 2021 · 215 comments on HN
- 15Developing with Squeak on a Cellphone1 people · 42 points · first shared 2020 · 27 comments on HN
What HN people wrote when they linked it
tonyg · 2022-01-15
IMO, Smalltalk-the-system is best thought of as an OS, yes. (Remember how everyone ridiculed the idea of Smalltalk's images right up until virtual machines became a thing?) It has a runtime and a systems programming language, too: the Smalltalk VM, and Smalltalk-the-language. Analogously, Unix has its kernel and C, respectively. The global variables of Smalltalk are analogous to Unix files. Smalltalk processes to Unix processes. It's not a perfect analogy but I found it surprisingly useful once I stumbled across it.
Preferable, though? Not sure. Certainly, as Marcel notes, a flat file system isn't the best idea; but then, is a hierarchical strict tree? (Related: https://eighty-twenty.org/2011/05/08/weaknesses-of-smalltalk-strengths… https://eighty-twenty.org/2016/05/05/unix-is-incorrectly-factored)
I think you'd have to burn the disk packs (ie: neither Smalltalk nor Unix as they stand make a suitable foundation), but out of the ashes I think something largely based on Smalltalk taking into account lessons from the forty (!) years that followed it could definitely end up being preferable.
Coming back to OP, and viewing Smalltalk as an operating system on equal footing with Unix: Different operating systems interact best via networks. Which neither Smalltalk-the-OS, Smalltalk-the-language, Unix-the-OS nor C-the-language support particularly well.
Luc · 2022-08-14
> Of particular interest is Henderson’s paper “Purely Functional Operating Systems” which was difficult to find the last I checked.
Find it here: https://eighty-twenty.org/2022/06/23/henderson-functional-operating-sy…
xyzal · 2020-03-26
It should be noted that Mendeley encrypts user database, presumably to lock in its users: https://eighty-twenty.org/2018/06/13/mendeley-encrypted-db
acdha · 2019-02-28
Mendeley is owned by Elsevier so they’re likely to continue user-hostile things like locking down your data to prevent interoperability:
https://eighty-twenty.org/2018/06/13/mendeley-encrypted-db
Lord_Nightmare · 2019-01-23
They're using SEE, see https://eighty-twenty.org/2018/06/13/mendeley-encrypted-db
ufo · 2016-09-27
loop/recur is good for replacing structured loops but tail recursion is more general, since it can replace arbitrary gotos.
One example is given by Guy Steele in "Why Object-Oriented Languages need Tail Calls". Basically, tail recursion lets you keep O(1) stack space even in the face of opaque method dispatching in OO code. https://eighty-twenty.org/2011/10/01/oo-tail-calls
Another required reading are the "Lambda the Ultimate" papers, if you haven't read them yet. The "GOTO" one is particularly relevant here. http://library.readscheme.org/page1.html
abecedarius · 2016-03-03
It's kind of interesting that TCO goes together with FP, because logically it makes at least as much sense for OOP, as Guy Steele pointed out at http://www.eighty-twenty.org/2011/10/01/oo-tail-calls.html
kd0amg · 2015-12-21
> You could pass around explicit dictionaries with all your values or some such, … if you have an extremely low-overhead way of doing so
A lot of that plumbing could be hidden from the user given the right dynamic features.
http://www.eighty-twenty.org/2015/01/25/monads-in-dynamically-typed-la…
primodemus · 2012-01-10
mirror of the post by Guy Steele: http://www.eighty-twenty.org/index.cgi/tech/oo-tail-calls-20111001.htm…
YorkshireSeason · 2019-04-06
monads if the language is functional
Monads are not a functional concept. For example an imperative language like Scala (which, being in the ML family of languages has a powerful and first-class functional sublanguage) has monads that work perfectly fine with imperative computation. Indeed, I find it a good programming style to let
trivial, ubiquitous monads, like printing / IO / global state, be handled by the built-in primitives, while higher-level, unusual, application-dependent effects are implemented explicitly using monads.
Monads are essentially a form of overloading / re-defining composition operators, e.g. the semicolon operator in traditional imperative languages. In languages like Haskell and Scala, types (and higher kinds) are used for this purpose, hence it is often though that monadic programming is restricted to statically typed languages with powerful types, and don't make sense for dynamically typed languages. Nothing could be further from the truth. All we need is a 'hook' into the sequencing mechanism(s) the language provides, at least in principle. Admittedly, the outcome is not nearly as pretty as in statically typed languages. See [1, 2] for discussions.
[1] T. Garnock-Jones, Monads in Dynamically-Typed Languages. https://eighty-twenty.org/2015/01/25/monads-in-dynamically-typed-langu…
[2] O. Kiselyov, Monadic Programming in Scheme. http://okmij.org/ftp/Scheme/monad-in-Scheme.html