The Absolute No-Frills Quite Ignorant Incomplete Beginner’s Guide to Smalltalk
deprogrammaticaipsum.com
deprogrammaticaipsum.com
Sorry, but if you're using VIM and command line, you're missing all of the best parts of Smalltalk. It's like trying to learn HTML/CSS by designing web pages in Word.
If you want to see what the fuss is really all about, you should download a standalone Pharo VM and latest stable image: https://pharo.org/download
It instantly gives you everything you need to learn and develop things with a modern IDE. It has Playground (better REPL), the famed debugger, the code explorer and a bunch of other things.
Then listen to MOOC: http://mooc.pharo.org/
Then buy The Blue Book on Ebay (Smalltalk-80: The Language and its Implementation). Absolutely worth it. Yes, even now. Yes, even if you don't plan to use SmallTalk.
If you need help, join Pharo Discord or use the mailing list.
Later, I used Common Lisp with SLIME and had a very similar experience, at least as productive, except that I was using my preferred IDE (Emacs) and saved the code to normal files so I could use more common tools like grep, SVN/Git, etc. I still built code into an image, which I could update live via the REPL.
I haven't used GNU Smalltalk personally, but I do like the idea of a Smalltalk that's less of an island, particularly if that makes it more palatable to a new generation of programmers.
> The Smalltalk galaxy was at the origin of the Graphical User Interface (GUI)
Well, the operating system of the Alto and the first groundbreaking WYSIWYG desktop applications were written in BCPL. Sure, Smalltalk did also run on the Alto, but the responsibles apparently have not considered it suitable for practical use. See e.g. http://xeroxalto.computerhistory.org/xerox_alto_file_system_....
> And since Java was strongly influenced by Objective-C, Smalltalk’s legacy amplified even more.
A bold claim. Actually Java was the implementation of the Simula 67 object model with a C syntax. Smalltalk was not involved here (neither Obj-C). Gosling is quite clear in this respect. The HotSpot JIT eventually was implemented by the folks who were already involved with the Self JIT, but it would be far-fetched to attribute these achievements to Smalltalk.
Even more points, but I'm running out of time.
As Dan Ingalls mentions in his recent HOPL (History Of Programming Languages) paper, several times an idea would be discussed between different groups and in the next meeting the Smalltalk guys would show it working while the other groups were still sketching on the whiteboard. Seeing the idea in action would prompt them to also implement it in Mesa or similar language.
The screenshot in the article (which _does_ have overlapping windows) is evidently Smalltalk-80 because Smalltalk-76 used the "hollow colon" character in its message syntax where Smalltalk-80 uses the typographic colon.
If this was true, this would be a point against Smalltalk, not for it.
Maybe ST80 was what Alan Kay needed.
Maybe what the rest-of-us needed was Modular Smalltalk?
"An Overview of Modular Smalltalk"
https://scholar.google.com/scholar?hl=en&as_sdt=0%2C5&q=An+O...
As many of us did.
What I had not previously considered was how the novelty of gui software and the vision may have overwhelmed more mundane concerns.
Seems like — even with the image, even with the ST80 language — there could have been a coarse separation into layers of functionality, and that would have been enough to address some of the practical concerns.
But that was mundane, not fun.
If PARC ST80 had provided both:
no-gui no-ide boostrapped image + libs
:and:
bootstrapped image + libs + gui
:and:
bootstrapped image + libs + gui + tools
:as separate images.
Pharo has some good guide books, but they still keep things contained just within the single VM.
How do I read user input and spit something back out? Does all the activity need to take place inside the VM? Seems so constraining.
That said, if it comes down to more OS specific stuff, then yes, you may need to do more work. Squeak/Pharo very directly support loading external modules (platform specific code written specifically to a VM-specific API) as well as a reasonably competent FFI implementation. I have less knowledge of other implementations but I'm sure something similar is also available.
Contained to the VM itself, yes? I've never seen any information on packaging a GUI and making it presentable to a user. For example, what if I want to style/brand it to not look like Pharo or a smalltalk VM? How limited am I with that?
> If you mean accessing data from the filesystem, yes that can be done as well.
How? I've never seen it explained in a book, but I could easily have missed it. That's more of what I'm talking about though. For example, how do I read / parse a CSV for the computer? Or better yet, download a CSV from the internet and then parse it.
> And guess what, there is even network support.
I'm aware of this because I know there's a web framework. I think there's an entire book on this for Pharo.
> what if I want to style/brand it to not look like Pharo or a smalltalk VM?
Use emulated platform widgets or native widgets or invent your own widgets.
> Or better yet
http://books.pharo.org/booklet-Scraping/html/scrapingbook.ht...
I don't actually use Pharo though I've toyed with it; reading files is well documented (e.g., in the free book Deep Into Pharo). While I think there are convenience methods for standard input and output, but you can at a minimum use normal file access with /dev/stdin and /dev/stdout.
My first thought was "Oh nice, a guide to help introspective folks to start a conversation"
I'm pretty sure there's a decent audience for such a guide, which is not toned like "Stu the Cockatoo is New at the Zoo". =)
Someone asking how to order a sandwich (from a pretty stressful sandwich shop..) There's a huge audience for what most people consider the simple stuff.
I think smalltalk is neat, but have never been too successful in getting up to speed. It doesn't help that I could never use it where I work. Also, although the stdlib is great, I still often have no idea how to do something. Compare that to Python, Perl, C#, Java, Bash, Powershell....etc. With those languages, I can ask nearly anything and get find 10 websites with examples and code snippets.
[1] https://www.uksmalltalk.org/ [2] https://vimeo.com/ukstug
Others use Pharo.
Instantiations is supporting old IBM VASmalltalk installations.
But I don't think it makes to much sense in starting new Smalltalk developments besides the learning experience.
Legacy systems are actually used.
If you don't have legacy systems then ride the wave of enthusiasm that comes with using the latest newest tech.
For example, GNU Smalltalk does not load the whole standard library from scratch when you start it, the way for example Python does when you "import os". In addition it's perfectly possible (or even common) to load more packages into the image so that any file-based scripts you launch load faster.
And even though by default the compiler is written in C, if you load the "Compiler" package then GNU Smalltalk switches on the fly to a parser and bytecode compiler that's written in Smalltalk. If you load the "Debugger" package, exceptions will take you to a gdb-like debugger, with a companion text-based interactive inspector. (The scheduler is part of the image in the same way as in Smalltalk-80, and features such as exception handling and the debugger are entirely implemented in Smalltalk; the only custom feature of the GNU Smalltalk VM that the debugger uses is single-stepping).
So even though the image is not as pervasive as in Smalltalk 80 or Pharo (development happens in files and builds upon an image, instead of happening straight in the image), the image is there and it's not just an implementation detail.
True but the first thing the VM does if it does not give an image is create empty classes and load files that define those classes. Only then does it do whatever it was asked to do, so the ObjectMemory was not loaded from a persisted state but is effectively indistinguishable from one.
Once the image exists, the main difference between the GST file-based approach and the traditional Smalltalk-80 image-based development is that saving the image back is not "saving your work" but "preparing a cache" in which to load source files ephemerally. But that's just an additional possible use of the image that could be implemented in Squeak/Pharo as well, just like GST had class browser for development if you really wanted.
For example? Compared to what?
Getting rid of objects not belonging to the application to be deployed is difficult or impossible. According to my analysis of the original ST80 v2 virtual image there is a very high interdependency among objects; and since there is no static type information, many dependencies are not statically identifiable. There are also many objects that have not been created or initialized anywhere in the source code (neither in the sources file nor in the Bluebook interpreter), but on which the functionality of the system depends. Versioning of objects and corresponding source code is difficult, also combining a certain version of different components or communication drivers with other parts to be integrated, and so on.
> Compared to what?
E.g. Java or C++ or any technology with clearly identifiable compilation and configuration units.
1) So don't get-rid, now where is "the problem"?
2) So only add "belonging to the application" stuff to the base image.
> … objects that have not been created or initialized anywhere in the source code … but on which the functionality of the system depends.
3) So those are objects that will always be deployed, now where is "the problem"?
> Versioning of objects and corresponding source code is difficult…
So application source code isn't just text that can be saved in text files and versioned like other text files, and loaded into a Smalltalk image in a scriptable repeatable build process?
Well, not every software manufacturer want's to deploy all development tools used to develop the software and possibly code which is only meant to be used inhouse. And if you e.g. deploy to safety-related targets you even have to demonstrate that there is no "dead code" (e.g. DO-178). Of course it doesn't matter for hobby or non-critical applications.
> So application source code isn't just text that can be saved in text files and versioned like other text files
In ST80 source code is just an external dump file; the actual configuration unit is the virtual image. Bootstrapping a virtual image from source code in ST80 is very difficult or nearly impossible.
Just the development tools included in the base Smalltalk implementation — we can choose whether or not to include other stuff.
> Of course it doesn't matter for …
Apparently, it doesn't matter for the whole range of business critical applications that do not need to be DO-178 certified.
> In ST80 source code is just an external dump file …
Do you mean that in ST80 source code can be saved as a text file and versioned like other text files?
> Bootstrapping a virtual image …
We can use a base virtual image someone else implemented. (Like we use a JVM someone else implemented, …)
Would a Smalltalk image without gui classes not be feasible?
I mean that "deploy all development tools used to develop the software" seems to be a separable from "Bootstrapping a virtual image from source code in ST80 is very difficult or nearly impossible".
bootstrapped image + libs + gui + tools + app ==> development environment
bootstrapped image + libs + gui + app ==> gui deployment
bootstrapped image + libs + app ==> headless deployment
> smalltalk is not just a language, but a whole environment
I mean could the fellow have his "whole environment" for development - and - have his no-gui no-ide boostrapped image + libs + app for deployment.