Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

It wasn't the image concept. You use it every day in Docker containers for everything else.

But saving the image has some drawbacks. Mutability always requires special care.



The key is the plural in "Docker containers". You're not doing everything by modifying one Docker container that's been handed down over literally generations, you're rebuilding images as you need to, usually starting from a golden master, but sometimes starting from a scratch image into which you just copy individual files. It's the "cattle, not pets" mentality, whereas a Smalltalk or Lisp Machine image is the ultimate pet.


> You're not doing everything by modifying one Docker container that's been handed down over literally generations

You don't do that with Smalltalk, either, at least not for the last 30 years or so. Smalltalk has worked with version control systems for decades to maintain the code outside the image and collaborate with others without needing to share images.


It’s fun when you realize something that happened 30 years ago is a relatively recent addition to the typical workflow.


I try not to think about these things, I've mostly worked with hardware-centric companies and on "legacy" systems. So many things they're doing that no one else does because 5-25 years ago everyone else figured out the lessons from 30-60 years ago, except for these companies.


> you're rebuilding images as you need to, usually starting from a golden master

For example, cp the "golden master" into the current directory and rename it "nbody.pharo_run.image".

"fileIn" the source code file (name passed on the commandline) "nbody.pharo" (and then cleanUp and garbageCollect) and "snapshot" the image.

Then invoke the program "main.st". In this example, the source code file defined a class method BenchmarksGame>>do: which performs a calculation and prints the result on stdout.

https://benchmarksgame-team.pages.debian.net/benchmarksgame/...

It's the "cattle, not pets" mentality.

(There are different ways to manage startup, this is an adhoc simplistic approach.)


I disagree, it really was the image concept, or very specifically how it was created and maintained over time.

A docker container is composed typically of underlying components. You can cowboy it for sure, but the intent is to have a composable system.

The Smalltalk image resulted from the developer just banging on the system.


> just banging on the system

And then "periodically building a new system image incorporating all submitted code files, and releasing the image for use by the team."

1984 "Smalltalk-80 The Interactive Programming Environment" page 500

https://news.ycombinator.com/item?id=45838056


Except that's not really what happened. You're ignoring the range of in-image tools which kept track if who did what, where. From versioning of individual methods, to full blown distributed version control systems, which predated git.

Not to sound harsh or gatekeep, but folks who keep repeating the canard that "The Smalltalk image resulted from the developer just banging on the system", mostly never used smalltalk in the first place.

Give the original smalltalk devs some credit for knowing how to track code development over time.


No, I haven't ignored those tools. They were all stop-gaps that worked in a "meh" way to various degrees. Smalltalk was always optimized to one guy banging away on their solution. Add a second developer and things got much hairier, and more so as you kept adding them.


Hmm, well I don't know exactly when Monticello was first developed, but it was certainly in heavy use by the early 2000s. How is that "meh" when compared to ... cvs & subversion?

I don't know much about the systems used in commercial smalltalks of the 90s, but I'm sure they weren't "meh" either (others more knowledgeable than me about them can chime in).

image-centric development is seductive (I'm guilty). But the main issue isn't "we don't know what code got put where, and by whom". There were sophisticated tools available almost from the get go for that.

Its more a problem of dependencies not being pruned, because someone, somewhere wants to use it. So lots of stuff remained in the "blessed" image (I'm only referring to squeak here) which really ought not to have been in the standard distribution. And because it was there, some other unrelated project further down the line used a class here, a class there.

So when you later realise it needed to be pruned, it wasn't that easy.

But nevertheless, it was still done. Witness cuis.

In other words, it was a cultural problem, not a tooling problem. It's not that squeak had too few ways of persisting & distributing code - it had too many.

IMHO, the main problem was never the image, or lack of tools. It was lack of modularisation. All classes existed in the same global namespace. A clean implementation of modules early on would have been nice.


1988 "An Overview of Modular Smalltalk"

https://dl.acm.org/doi/pdf/10.1145/62084.62095


Interesting. Shows how aware they were of these 2025 criticisms, way back in the 80s (which shows how much of an oversimplification these criticisms are of the real situation).

You probably already know about this, but in case you didn't, there is 1 project which adds modules to cuis Smalltalk:

http://haver.klix.ch/index.html


Digitalk’s Team/V unobtrusively introduced a non-reflective syntax and versioned source code using RCS. Team/V could forward and backwards migrate versions of Smalltalk “modules” within an running virtual image.

https://wirfs-brock.com/allen/posts/914


A Smalltalk with all reflexivity removed just sounds pointless, no?


The point would have been different.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: