Design Principles Behind Smalltalk (1981)
cs.virginia.edu
cs.virginia.edu
I like this one especially.
It rings true if you imagine a world where you have complete control over your machine, you don't worry about possibly external code breaking or extracting your stuff and so on.
But lets just pretend we don't need to worry about these things for some reason. It would be so powerful. And I don't mean you have 'root' privileges, I mean your programming environment owns, controls and _is_ everything that happens. No black boxes, no overhead, nothing. Just _one_ runtime that is integrated all the way down with the expressive power of a Lisp/Smalltalk/Self or similar. It's sad that this doesn't seem like a viable option.
My favorite inspiration for “chipping away at it” is https://ephtracy.github.io/ who has been slowly building up the coolest 3D art tools one commit at a time.
So, if you're trying to build an "everything" environment, sure, try to get everything in. But know that you will fail. And therefore, don't trap people. Leave them a way to get "outside".
/rant
I get that all of this has reasons, often historical. PC/Internet adoption just grew so fast during 80's and 90's that nobody even had the time to think it all through and design a coherent system. Even new OS's and runtimes have to carry over all this legacy stuff. I mean I get it and as a web developer I'm probably more part of the problem than the solution. But boy would computing be simpler, more powerful and expressive if we could just start over and lean on the ideas of (mostly) early, holistic visions and prototypes of personal computing.
I mean I get it and as a web developer I'm probably more part of the problem than the solution.
Ironic Humblebrag? The developer tools and consoles built into browsers are in some ways a return to the Smalltalk and LISP Machine development ideals I've read about, if you consider the Internet the machine.Pretty sure the idea was and is to run Smalltalk on bare metal. Which you can absolutely do.
The more realistic problem is: what if you still need Firefox, or Office, or Photoshop? One solution is probably to run Windows and Smalltalk on a hypervisor. You still get low-level access from Smalltalk (hypervisor calls, hardware access, etc.) without giving up Windows (or Linux, etc.) apps and compatibility.
Running a web browser in a hypervisor is also probably a good idea for isolation reasons.
Another interesting idea is to run Smalltalk on the JVM (which itself was inspired by the Self and Smalltalk VMs.) You lose some low level access from Smalltalk but you gain interoperability with Java as well as portability.
Type 1 hypervisor + language runtime on cloud deployments
https://news.ycombinator.com/item?id=23496800 - 2020, 87 comments
https://news.ycombinator.com/item?id=17825747 - 2018, 30 comments
https://news.ycombinator.com/item?id=13611222 - 2017, 54 comments
https://news.ycombinator.com/item?id=1758057 - 2010, 1 comment
https://news.ycombinator.com/item?id=1643098 - 2010, 4 comments
[0] <https://pharo.org/>
Not sure if this is a typo, but if not it is the first time I've ever seen it typed in such a way. No judgement, just noticing.
This one gets me every time:
Personal Mastery: If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual.
That combined with instant feedback can make you feel like a rockstar coder.
And Smalltalk delivers.
But let's not forget that there are a ton of people (many more than the above) who are constantly overwhelmed by computers even though they only use very few features. There's people who can't use ATMs and smartphones. Most computer users only ever use the most common applications (browsers, music/video players etc).
Perhaps some want to play in a garden without needing to dig and plant and weed and…
And the creative spirit is what brings innovation. Tons of what's obvious now wasn't obvious when someone created it.
https://computerhistory.org/blog/xerox-alto-source-code/
https://computerhistory.org/blog/the-deep-history-of-your-ap...
Devs code better products if they enjoy using the tools.
Is there any evidence for that claim?
So far nothing has been offered.
Perhaps most software development should be about effectiveness or reliability or …
It is the programmer that has to figure out, often with experiments, what changes to the program work best.
Therefore it makes no sense to me to focus on anything but serving the programmer.
We would never have had Hypercard if it weren't for Smalltalk and Alan Kay, and we've never had a platform as good as Hypercard since. That's a crying shame.
Ironically, Smalltalk drives what the Clojure/DOP crowd considers the cause of this: custom languages. Creating classes means you have to know specific method names (a new language) to interact with a specific object. Eventually you can't wrap your head around it - but Smalltalk offers an env where you can come up with custom visualization to compress all this knowledge.
Another approach is DOP: your programs are all mixes of {} and [] and your functions mostly transform data.
I guess the question here is which approach represents your problem-solution with less concepts? Classes and method names? Or keys (as in {}) and functions?
You'll still end up with namespaces that contain all your abstractions, but it seems like DOP minimizes accidental complexity as the building blocks are simpler.
What Smalltalk brings that other systems lack is the visual environment for building different representations. Clojure (my DOP example) has the REPL and data browsers but these lack the expressiveness of the Smalltalk VM.
I haven't followed subsequent evolution of the language/environment;
I'm wondering: has anyone taken on integration of an idea of something like a native notion of modules/versioned package management?
I enjoyed the premises of working with changesets and a monolithic image, to a point;
but it always seemed it would not be that hard to integrate a contemporary notion of modularity...
I'd love an environment which allowed me to develop in Smalltalk, debug in an image, yet freeze the dependencies, with smart ephemeral compilation and the like, and...
Monticello: http://www.wiresong.ca/monticello/
I haven't used the latter, but the former is easy to use and based on libgit. Create a new repository, select the packages that go into it, make the initial commit. After that it'll tell you when the changes don't match the repo. You can select down to the method level since it's aware of the language's syntax and semantics. The generated repository looks like the Iceberg repo itself, a collection of directories for the packages and then .st files for the classes and their contents.
Once upon a time, back in the day:
https://www.google.com/books/edition/Mastering_ENVY_Develope...
Fast forward to 2022. Compared to current app sizes, it's laughably small. Compared to Electron/web apps, it's probably faster and more responsive. And the licensing issues have been solved with open source versions.
iirc Dolphin Smalltalk used windows controls and packed to exe.
iirc Smalltalk/X " translates the input file into temporary c-source file and calls the standard C-compiler cc to create a binary object module."
https://live.exept.de/doc/online/english/programming/stc.man...
- fully free/open source implementations
- native widget integration (or we don't care anymore because we're used to crappy web apps)
- the resource usage and responsiveness gap between commonly deployed apps (such as JavaScript and web apps) and Smalltalk apps has either evaporated or is less of an issue because of faster hardware and more memory
But as you may be implying, I think that there are additional barriers to Smalltalk being used more commonly, such as unusual syntax, a different workflow compared to Java/Python/Javascript/etc., lack of type safety (note that even Python and Javascript have typed versions while typed Smalltalk doesn't seem to have caught on) and the fact that it's neither considered a web technology, nor is it promoted by influential platform companies. I suspect that the Pharo people might think that Smalltalk has a bad reputation (or something) so they never say "Smalltalk." I tend to think that not calling it Smalltalk leads to a bad outcome of confusion and fragmentation.
Smalltalk is type safe & not statically checked.
"Type safety is the property that no primitive operation ever applies to values of the wrong type."
page 263 "Programming Languages: Application and Interpretation"
[pdf] https://cs.brown.edu/~sk/Publications/Books/ProgLangs/2007-0...
What does this mean?
* meta-object protocol
Not true at all. For example, artists using Photoshop are typically not programmers and don’t understand the system at all. That doesn’t stop them from creating world class art. A great creative system hides all the complexity from the artist and frees them to express themselves in a way that is natural to them.
Also, understanding the complete system, from software to hardware etc. is pretty much impossible for an individual. So your “low level understanding” of a system will always be a simplified model of what is really going on.
I have seen this kind of thinking before and IMHO it leads you down the wrong track. Abstractions are there for a reason.
Smalltalk is a good example of this. Yes it allows you to manipulate lower levels of the stack (compared with most languages). But that hasn’t resulted in creative outcomes demonstrating the value of being able to do this. Smalltalk failed in the programming language market place.
Edit: Alan Kay sometimes also mentions "slogan land", where you state things too black and white, so that management types understand the essence. Perhaps that applies to these rules too.
That would be nice but it is pretty much impossible in practice. No uniform framework exists that is optimum for all situations and special cases. There is a reason why we still have many different programming languages and programming environments.
Programming languages are tools used to solve problems. They are not “frameworks for communication”. Except in the narrow case of a programmer reading source code.
COBOL is an example of a programming language designed with this idea in mind (Readable by non-programmers). Enough said.
Thus writing a program is communicating your intent to the computer. I see that hard to dispute.
Nope. Not true. Not if you want to create a successful programming language. All successful programming languages used in the real world are multi-paradigm languages.
I disagree. A much simpler, and more general model is to view computing as data + data transformations. The OO thinking is a more complicated subset of this.
[Edit wrong paste before sorry]
>In designing a language for use with computers, we do not have to look far to find helpful hints. Everything we know about how people think and communicate is applicable.
Taking grammatical structures as the principal guide, I'd say that functional language design is the goal.
That’s a bad idea. A single one-size-fits-all storage solution that works for all problems in all scenarios doesn’t exist. There is a reason why we use many different storage solutions as technologies to solve problems.