We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Annual Squeak Shoutout

00:00

Formal Metadata

Title
Annual Squeak Shoutout
Title of Series
Number of Parts
199
Author
License
CC Attribution 2.0 Belgium:
You are free to use, adapt and copy, distribute and transmit the work or content in adapted or unchanged form for any legal purpose as long as the work is attributed to the author in the manner specified by the author or licensor.
Identifiers
Publisher
Release Date
Language

Content Metadata

Subject Area
Genre
Abstract
Progress made in squeak the past year and a look at the development of spur, the new VM
Projective planeComputer virusTouchscreenLevel (video gaming)Meeting/Interview
AreaSocial classCodeConfiguration spaceSemiconductor memoryObject (grammar)Process (computing)Complete metric spaceOverhead (computing)Gastropod shellMultiplication signMereologyComputer programmingImplementationRevision controlNumeral (linguistics)PixelDampingSingle-precision floating-point formatCompilerInterface (computing)Message passingForm (programming)Image resolutionWebsiteMedical imagingString (computer science)Integrated development environmentWindowDebuggerFLOPSView (database)Endliche ModelltheorieComputing platformCollaborationismVisualization (computer graphics)Machine codeWeb browserNamespaceRandom number generationPhysical systemNormal (geometry)BitTotal S.A.DataflowRootWater vaporBit rateComputer hardwarePrimitive (album)Atomic numberSource codeComputer animation
MorphingHierarchyObject modelDuality (mathematics)Web applicationCartesian coordinate systemImage resolutionQuicksortException handlingCategory of beingCalculationLogarithmSocial classBitCompilerSimilarity (geometry)Object (grammar)ImplementationMultiplication signExpressionSpacetimeCommunications protocolVisualization (computer graphics)IntegerCache (computing)CodecArray data structureUtility softwareGraph (mathematics)RectangleGraph (mathematics)Medical imagingLine (geometry)AreaMultiplicationMathematicsFreewareExecution unitSource codeComputer animation
SpeicherbereinigungSource codeOpen sourceSpacetimePhysical systemComputing platformFunction (mathematics)InformationComputer fileConfiguration spaceGraph coloringVirtual machineMultiplication sign2 (number)Term (mathematics)QuicksortNumberPosition operatorCodeBenchmarkWeb browserParameter (computer programming)Streaming mediaPlug-in (computing)Traffic reportingMathematical analysisTouchscreenSet (mathematics)View (database)BitResolvent formalismLengthDifferent (Kate Ryan album)FreewareType theoryMappingOffice suiteModulo (jargon)Video gameSelectivity (electronic)DemosceneSubsetGroup actionEmulatorRepository (publishing)LoginMachine codeExtreme programmingArithmetic progressionDecimalRow (database)ResultantNetwork topologySign (mathematics)Utility software
Power (physics)Level (video gaming)Point (geometry)Java appletCrash (computing)
Mathematical analysisInformationSpacetimeExecution unitPhysical systemLengthSoftware testingMoment (mathematics)Data loggerCrash (computing)Multiplication signMereologyDifferent (Kate Ryan album)Mobile appVariable (mathematics)QuicksortElectronic visual displayElement (mathematics)Group actionLink (knot theory)Computer file
NumberObject (grammar)Point (geometry)File formatStandard deviationSemiconductor memoryEndliche ModelltheorieProjective planeSpeicherbereinigungMachine codeBitAreaMereologySummierbarkeitHypermediaImage warpingLevel (video gaming)Vector space1 (number)MeasurementStudent's t-testInternetworkingElectric generatorGodDifferent (Kate Ryan album)Right angleBefehlsprozessorPlotterArmTelepräsenzRow (database)CodeHash functionThetafunktionMobile appMultiplication signData dictionaryPredictability32-bitEmailLecture/ConferenceMeeting/Interview
Multiplication signRight angleRule of inferenceWordTwitterComputer animationLecture/Conference
JSONXMLUML
Lecture/Conference
Transcript: English(auto-generated)
Welcome to the afternoon of the Smalltalk Dev Room at Fosdam. May I present Craig Lutter and his Squeak shout-out. Hello. So today I'm just going to talk about some recent activity from the Squeak project. The main thing I'll be talking about is the latest release candidate for the Squeak release, Squeak 4.5.
And then I'll also be talking about a couple of other packages that people have been hacking on recently. So Squeak 4.5 is named Theodore for the son of our late friend Andreas Raab.
As I mentioned last year here, Andreas was a major contributor to our community there from the beginning. Last year at this time he had just passed away from a heart attack.
He left us way too soon. At the time his wife was six months pregnant with their son. So we wanted to name this release in honor of them.
So my first shout-out goes to his wife Kathleen. So I'll just go over a few of the highlights here from the release notes first. I'm just going to start by mentioning the things in italics here and then if there's time I'll go back.
So the first thing I'll mention is Environments by Colin Putney. It's a way of having namespaces basically for having multiple classes with the same name to exist in the same image or object memory.
And in your code you can reference the classes environment, containing environment, to distinguish between classes with the same name. In the area of collections, we have a new kind of collection, a float collection,
which inherits the add and remove message interface of ordered collection, which is a lot more convenient. But internally it uses a float array, so it's still efficient. In numerics we have faster and better implementation of random numbers.
For dates and times, as part of the COG native code generating VMs, we have access to two new primitives, which provide much better time resolution to the microsecond.
In text graphics and sound, form pixel value at also makes use of a new primitive, so you don't have to make a full bitlet when you just want to get a single pixel value.
In the programming environment, UI and source code management system, Monticello, and our community collaboration process for Trunk,
some polish has gone into MVC, the older UI, the one that Smalt like 80 had, so you can actually debug in it again. As I'll be talking about later, at 4 o'clock, when I talk about Spoon on the Raspberry Pi, this is handy for when you're running on slower hardware, which does still exist,
if you're doing things with embedded platforms like Arduino or Raspberry Pi. Just to refresh your memory, this is what MVC, the original model view controller, MVC UI looked like with the great flop out scroll bars.
So I just evaluated three halts here in a workspace, so now the debugger works again. I managed to miss the window of time where MVC didn't work, so I'm not exactly sure what was broken, but I'm assured now that it's fixed. Here's just a normal system browser working as well.
There's an improved command line interface, so you can run one-off shell commands from Smaltalk again,
and I think that's also without the full overhead of the complete OS process in the area of configuration. When you're running Monticello, you can now stub history strings
in anticipation of a smaller image and a more intelligible Monticello history. Bob Arning's done a new historical website for how the Squeak releases have changed over time.
That's well worth checking out. And there's a new facility called Object History that makes it possible to track the creation time of any object to a one-minute resolution.
So under fixes and cleanups, a lot of cleanup has gone into the compiler recently, and the proto-objects message interface has been pared down quite a bit, as it should be, since it's the new class root,
so it should understand as little as possible. What happened with the package organization? You say you've been moving circular dependencies? That was something that Tobias showed me. Oh, yeah, Tobias did some nice visualization work of package dependencies.
We can look at that real quick. Let's see.
Yeah, and I think he used GraphViz to do this? I'm not sure if you can see this, but yeah, it's always quite enlightening
to look at these sorts of dependency graphs. I'm always surprised by at least one thing when I look at this sort of thing. This one, just at first glance to me, looks quite healthy,
and what I would expect, everything depends on collections. So that's one of them. And then this one is very interesting. It sort of visualizes the package space like a bunch of nations in a continent. Just to give you the whole overview here is what it looks like.
Then if we zoom in, we can get a similar idea about collections, but it goes into a bit more detail with all the class categories.
Just scanning around here, looking for anything surprising. Again, it's really improved a lot in the last couple of years.
Yeah, so this is cool. Yeah, and then in the application upgrade area, just a little thing. Rectangles with zero area, just their borders, just lines, can now intersect.
Okay, so we'll go to the rest. So, new and improved sorting utilities for arrays and ordered collections.
A new LRU cache implementation. Please feel free to stop me if you'd like more detail about any of these. I don't claim to be expert in all of these changes, but I'm happy to go and explore around through the image with you. Promise is now a fully chainable object with error handling.
So I assume that should make C-side web app debugging more pleasant. I'm not sure what that means. Some sort of collection support for the compiler.
Logarithmic calculation fixed for integers. And some interesting new protocol for making dates and times. So you can have an expression like five minutes ago. Let's just see what we get.
So here's a date and time for five minutes from when I typed that. Yeah, and so actually conceptually in the object model we have nanosecond resolution.
This is a COG VM, I think, which has microsecond resolution. So there used to be a dual hierarchy of new paragraphs and multi-new paragraphs and so on. And the scanner was a bit messy. So that's been improved.
Re-engineering of paintbox morph. And performance improvements for ADPCM codec. So there's a somewhat controversial feature called smart splitters,
which automatically resizes the real estate given to the different panes in a browser to optimize their position. And this, as I understand it, this feature sort of watches your browsing behavior and tries to give more space to the things that you use more often over time.
I just opened this image, so I don't think we're going to see anything too amazing if I just open a system browser now. But it sounds like an interesting feature to me and probably worth playing around with. Fixed color selection, being able to point to a place in the screen and use that as a way to choose colors.
I guess that was broken for a while. The length of a debug log report you get, if you have, say, a VM crash, that length is now settable.
Yeah, the Monticello preloader can now resolve moves between arbitrary packages. That's probably a bit more obscure, unless you're using Monticello configurations.
So Monticello file output is now encoded in UTF-8 instead of Latin-1. Yeah, there's a new system space analysis tool. That sounds interesting.
Yeah, so that's cool. If you have a Mac and you want to say about the system, you can get something a bit like that. That's handy, instead of having to hunt around for the magic incantation for doing these various things. And this VM-related stuff looks especially interesting to me, since I've been doing a lot of VM hacking lately.
And as you select more of these things, then more of these items show up in this report. So that's really handy, just knowing what VM plugins you've got loaded.
So the I here means internal. Yeah, that's really handy to know. Maybe I'll just go through these. Yeah, so this tells you the latest update you've got loaded from the update stream.
The parameters you started with. The source code files you're streaming over. All your preferences. That's kind of handy to have them all in one place. The preferences browser is quite useful, but even though it has a search utility, it can be a little challenging to know what all the settings are.
So just another view you can get on what all the settings are. The major problem with settings is that if you don't know how it's called,
like for these fonts, you probably would have to have free type. If you don't know that it's free type, then you will not find it this way. Yeah, exactly. I'm not sure what the difference in color here means.
A summary of your Monticello source code repositories. That's handy. And the working copies you've got in progress. So we looked at a few of these already.
This is a nice one. A lot of this information was always quite obscure. You actually had to read the VM source to know what a lot of these things were. So it's good to see them made more transparent here.
Yeah, some information about the garbage collector is always nice. Your host platform. Oh, and you can run the benchmarks right from here. That's cool. I forget what the numbers were when I first started paying attention to benchmarks,
but it's probably about 1% of this performance. So yeah, this is pretty cool. Just in terms of sends per second, I think when I started paying attention to benchmarks, it was like 1 million sends a second.
And then we're running more virtual machine instructions per second than probably about three times as many as native instructions on the first machines where I thought Smalltalk, well, especially the Morphic UI, felt comfortable.
That seemed to start feeling comfortable to me around 200 MHz. So similarly you can run space analysis. So Morphic was workable at about half the speed of Swing. Oh, hey, now we've got a crash.
Now I can show you the debug log. Sorry, say it again. So that was about usable at the level where you need twice as much power for Java. Yeah, yeah, exactly. I think that was around 1998 when we crossed that point.
I think I might have saved this under a different name.
Well, first let me look at the...
So squeakdebug.log just got made here. So on the Mac you can look at this through the normal log display stuff. So something with Monticello went bad.
Unless that's an old one. Oh no, okay, something with 3D. Of course every time the VM crashes are so rare when they happen they're always so startling to me that I can't really remember what I was doing
UI-wise at that moment. Does anyone remember what happened right before? But anyway, one of the new features I was just talking about was you can set the length of this. Whereas before it was just sort of grow and grow and grow and it got to be a little annoying.
So let's see if I can get back to where I was. Oh, okay. Oh, that's right. I was looking at the 4.5 release candidate.
Well, I talked about the most important things that caught my eye so I'll just go back to this about the system stuff. So, oh yeah, I was trying to do a space analysis and I'm not sure why that needed 3D to show the answers
or maybe it was analyzing part of the system that had to do with 3D. I won't look at that again. Oh, running all tests won't actually do that. So you can run all the S units that you've got. And then last, information about your log file and being able to look at it.
And it's pretty much the same stuff we saw in the console app. Oh, but the stack looks different.
This actually looks more actionable to me. I can probably figure out what happened. So that's cool. Okay, well just in the last couple of minutes I'll ask if there are any questions. Can you say something about the new VM? Oh yeah, so Elliot Miranda has been hard at work
over at Cadence design systems. And they're continuing graciously to let him contribute his COG VM work back to the community. And so most recently he's been working on 64-bit object memory support. Dan Ingalls had done most of that work.
Dan Ingalls and Ian Piomarta had done most of that work back when Dan was at Hewlett-Packard in 2003. But there were still some rough edges, especially in the area of running an old 32-bit object memory with a new 64-bit VM and getting that all to work right on different CPUs.
And he's also... Yeah, so the main idea of COG is about native code generation. And he's focusing mostly on Intel. He works on the Mac. But I know in the last couple of Google summers of code
he's been working on ARM CPU support as well. And then most recently he's got a sub-project called SPUR which is a new object memory design. And he's got a new garbage collector, I know, for sure. And also just various clean-ups with the object header format.
And pinable objects, so you can have objects that don't move around in memory when the garbage collector runs, which should be really good for media-intensive apps. And... What else was there in there?
Yeah, I think that was about it. Sorry? Media floats? Oh, immediate floats, yeah. Yeah, so COG has been very solid for the last few years. He and I used it a lot at Teleplace, formerly known as QUACK, with Andreas,
doing the 3D telepresence work with a lot of streaming media. We were doing telephony and 3D. Yeah, so that work's been going very well.
Regarding SPUR, is there some measurable speed-up or is there any numbers to say if it's more efficient? Oh, well, I mean, it's part of COG. It's just the refinement of the object memory model
and a new garbage collector. The whole point of those requirements is to support the new collector. I don't know if increased speed is really a design goal of his for the collector. I think it was mostly just having to do with making pinable objects
so that they don't move. So there must be some performance improvement around that, but I haven't seen any numbers yet. Yes, I think there is a 40 to 40 percent speed-up.
Oh, great. You spend 40 or 40 percent less time around the bench. Nice. This must be because the new garbage collector is much faster and also because in the new object model there is some specific two speed-up behind caches. In fact, the hash doesn't object to number exactly.
Yeah, but the hash means that for big hash prediction you have better performance and dictionary access. So I'll just close showing one package that another member of our community,
Edgar De Kline, has resurrected from several years ago called Mathmorphs. So here is something called a theta row plot. And if this looks cool to you, you can go and find out more about it. Thank you very much. Thanks a lot. So if you want to build COD, you can come see me.
You're using Mathmorph.
So should I start? Yeah. Thank you.