-
Notifications
You must be signed in to change notification settings - Fork 8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Broken methods #6
Comments
The original image (or rather, the two files found on the disk pack, object table and object space) had no categories or method sources at all. To keep the system small (to make it fit into the Notetaker's memory) everything was decompiled from bytecode. It is in the Lively version at the Smalltalk Zoo (the code to read it is in Come to think of it, we should add those two files to the GitHub repo so we can replicate updating from the original to the current version (see In that original version, And yes, I'd happily accept fixes. Preferably as updates in the update stream. The way we used to work is by pushing updates to the update stream, and later me committing them to git and pushing to github. I could explain how to do that – or we could come up with a process to commit to git first and then pull that into the update stream? Ideally, the image would load updates from and push to GitHub directly, but I'm not entirely sure how much effort that would be. |
I just did that, and you can run the original now. After pasting the contents of |
I see. I was just looking at an image with the latest updates and I see the original images have the decompiled source so yes, it does seem to have been an update that did it. For now I'll read up on how to make updates/changesets and either add them here in an issue or as a pull request, whichever you prefer. (I'm afraid of adding directly to the update stream because I'm just a beginner at ST-76/78) Checking further I also noticed that the following look in different places for the update stream. At https://smalltalkzoo.thechm.org/HOPL-St78.html all of the following look in https://lively-web.org/users/bert/St78/updates/
In this repo all of the following look in https://lively-web.org/users/bert/St78/updates/
The following at https://smalltalkzoo.thechm.org/HOPL-St78.html looks in https://smalltalkzoo.thechm.org/users/codefrau/St78/updates/ instead.
I believe these should all point to codefrau. |
For now I'll read up on how to make updates/changesets and either add them
here in an issue or as a pull request, whichever you prefer. (I'm afraid of
adding directly to the update stream because I'm just a beginner at
ST-76/78)
Great. Let’s start by attaching them to an issue until we figure out a good
process.
Checking further I also noticed that the following look in different
places for the update stream.
https://lively-web.org/users/bert/St78/updates/
https://smalltalkzoo.thechm.org/users/codefrau/St78/updates/ instead.
I believe these should all point to codefrau.
Agreed – but I think I’d only update the .st sources for now.
The images, even if they still point to Lively Web, will automatically
switch to the Smalltalk Zoo update stream, because I manually added an
additional changeset to the Lively stream that does that. So if someone
tried to update those images it should work and they will point to the zoo
after.
… |
With the missing methods it appears that they were deleted by updates from the image but not removed from the ClassOrganization. Would simply removing those selectors from their categories in the ClassOrganization be sufficient? Also I just noticed that there are two "As yet unclassified" method categories. One starting with uppercase and one with lowercase A. When making updates, would you prefer that I use the ST76 categories? |
Should be sufficient, yes. Instead of doing this manually, we could put an expression into an update that goes through all classes.
I believe the capitalized one is the right one.
Yes, this would make sense. Thank you! |
Some interesting breakage here :) It seems some method sources reference missing classes so the class names were replaced by 'unknown', see Object>>notify:at:in:for: which contains
where unknown should be SyntaxWindow according to the ST-76 sources. Attached is a fix containing all three classes and the methods fixed to reference them properly. Also recategorizations of Object and Parser. (Yes, I did them in an odd order but I was tracking a bug) :) object-recategorization-ff.zip |
It's not so much that they were "replaced" by I tried your Nonetheless, this is exciting! Thank you! |
Hmm, very odd. I must have done something wrong with Parser, it should only have the recategorizations. I'll have a look at them and see if they need an extra doit to make the changes. (Currently I'm having trouble with the lively file upload not working properly in both chromium and firefox). Speaking of tests, is there anything like a port of SUnit to ST78? It looks simple enough except for figuring out how exceptions work. Edit: yes, I messed up Parser somehow. The reorg of object should work, I needed to refresh the pane to see the changes though. |
Ok, I may have found some weirdness in the updates. Form>#figure is in the browsers method list but gives a "not found" error in an updated image.
which should add it. But at the top of the update are the words
Could this have left Form>#figure with completely blank source? I'm seeing similar things with other methods that give this error. |
You might like the
Not that I know of – unit testing was invented 20 years later, and St76/78 were Xerox-internal prototypes, only St80 was released to the public back then.
There isn't really an exception mechanism but it should not be too hard to add. Even the debugger is not working entirely correctly (although Dan got it working to some extent). The reason for that is that the debugger basically comes straight from St76, but St78 uses a linearized stack rather than actual context objects.
Ah I messed up – the file browser menu items were broken when browsing a different directory than the default one (I put your files on my local disk under And I pushed your reorg changeset now as 6c0c82a. I should have designated you as the |
Re
The idea of In And So it all seems like it should be okay, but it's not, obviously. Somehow both
seems to do the trick. What do you think? |
Dev-serverThat's amazing. It took me a bit to figure out how to set the buttons the same as on the Lively site but I got it in the end. Great stuff :) Unit testsI read the original paper and the core of SUnit seems very very small. Unfortunately it relies on exceptions to handle failures but correct tests should run. ExceptionsI imported the ExceptionHandler and related classes to the image but it falls foul of the same problem that hits the debugger. I expect that if the debugger was fixed, this would follow. AttributionsI got a github email of "3085457+Kirtai@users.noreply.github.com" which would be fine. :) Missing methodsYep, your script works :) (they're along the lines of
followed by going in and manually fixing up anything left.) EndBTW, I was wondering, is restoring removed classes fine? It would be nice if ST78 was ST76-Plus rather than ST76-Minus but I don't know if the system is up to it. Things like the Events, Picture-Editor and Exception-Handling categories. Also, here's the reorganisation of Class and VariableLengthClass :) class-recategorization-ff.st.zip |
I added some details about that in #7.
The question is if I should run this script as an update, or if we want to fix the broken class orgs manually ... I'm tending to just publish it.
The system should be able to handle that fine – the only limitation would be total number of objects (30720) and classes (2048), where we currently use about 43% of object oops and 6% of classOops. I'd like to keep the base system 16 bit with enough room to do meaningful work (even though my 32 bit
Is Picture-Editor the same as our BitRectEditor? And what are the Events about? I don't have a working St76 here.
Thank you! Published as cdeb490 |
For access to the source, if you go to this repo the readme contains details on how to extract and convert the source of Smalltalk-76 from the xmsmall.dsk using Contralto. It also contains pre-extracted source but I did the extraction myself to make sure it was correct and have been using that. Note that while it also has the bootstrap files as text, these files have an error where ↪ has been substituted for ". While the source is also on a linked website, the web pages uses the wrong kind of single quote so methods with them don't copy/paste cleanly. It also has the source for quicksilver which seems to be a publishing tool? The Events category has the classes 'EventQueue', 'MessageTally', 'PriorityInterrupt', 'PriorityScheduler', 'Timer' & 'UserEvent'. So scheduling and system events it seems. These are not in the image. Yes, Picture-Editor is a category for the BitRectEditor & related tools (along with RadioButtons for some reason). These are in the image. They could be left alone or popped into the original category. (Sorry for not digging deeper in that before mentioning it, I never thought of classes being moved to different categories too) Would it be okay to change the class categories to match ST76? Most of them are fine but a few seem to be merged. e.g. 'Picture-Editor' was merged into 'Windows'. It would make comparing easier and match the ST76 documentation better.
That shouldn't be a problem. Many of the missing classes relate to hardware access (e.g. ethernet) or no longer extant filesystems (Juniper, Alto, IFS) so won't be needed. Some missing classes that maybe should be added are Path, Image and maybe things like Timer. Regarding the script, I'll defer to you but the missing methods should be cleaned up with the reorganization I'm doing but publishing it wouldn't hurt afaict. Edit: I just saw the mention of porting ST76 forward to ST78 on the zoo page. |
I talked to @Daningalls:
So I think we are in agreement – we don't want to change this into "a St76" by restoring more features, just making what's there actually work (like we started to do with the text handling fixes and debugger), and more accessible (like with method and class comments). We should instead make a St76 VM, which would mostly differ in the stack/context handling, and need more primitives (one of the big innovations in St78 over -76 was switching fully to BitBlt for all graphics ops rather than bespoke primitives). So recategorization would be fine if it makes sense – OTOH having BitRectEditor be grouped with the other windows would reinforce the notion that it's not a separate "app" but just an object like everything else (I'm sure you saw Alan's demo, about 10:00 minutes in). We're mainly doing this for historical education, it just happens to be fun in itself. Dan also wrote:
I've started #7 to track this. |
Alright, I'll stick to what's there and just reorganise the methods and replace missing class comments. Keeping this one as a historical artifact sounds good. BTW, the only features I actually wanted added to ST78 was the exception handling to support a test framework for testing. Not really an issue for a system that's for preservation though. I would really like an ST76 based system to work with though, so a VM for that sounds great. Turning it into a "modern" ST76 with bitblt would be fun :) I suppose a preservation of ST76 wouldn't need much if anything done on the image side. |
Maybe we can find a way to easily share optional changesets / images. Adding SUnit in the main update stream would feel too anachronistic. We added some stuff that was not in the original system, like the gesture recognizer. But Alan argued that gesture recognition was an established UI tech back then, so we felt it would still represent the spirit, and he did great demos with it. Same with the window dragging / refreshing, where they would have done it if they'd had the compute power (or the sheer audacity of Bill Atkinson who misremembered seeing it so he invented quickdraw regions to do it).
That's what the XEROX PARC engineers thought too, which became Smalltalk 80. Then again, St80 added a whole lot of other stuff, like the dual class hierarchy (I'm still amazed that the VM has no idea about that – the power of Turtles All The Way Down).
All my VM projects aim to not require any image-side modifications. The St78 VM can run the original image fine, the image just happened to be rather buggy (and there are still bugs, e.g. when mixing different styles in the same text, or the debugger). |
Well yes, I meant that the St76 image wouldn't have the problems the St78 image has due to the incomplete conversion. No disrespect meant to your VMs :) re tests, all they actually need is the stack handling bugs fixed well enough that ExceptionHandler et al could be loaded and work. Where the tests are stored doesn't bother me. (Either a changeset or separate Testing image is good.) (I was just about to post this when realized that most of the tests would be the same for St76.) While I do like ST80 a lot I am very intrigued with using an St76 system (or even earlier ones) for day to day programming and seeing what different paths it could evolve along. I wish there was an easy way to get files in and out of ContrAlto, slow as it is. (While the metaclass structure is incredible, I do admit I find it complex and wonder how things would have turned out if Dan Ingalls had made St80 prototype based as he mentioned considering in his HOPL paper) I will keep on with the recategorization of methods and looking for bugs. |
UserView seems to have a lot of changes so I've only moved the methods from St76 and left the rest alone. And more |
I was looking through the Smalltalk-78 image on the Zoo and noticed that some of the methods could not be found when selected in the browser. I also noticed a lot of uncategorised methods and missing Class comments.
Would you be willing to accept fixes from the ST-76 sources extracted from the xmsmall.dsk disk image? Example is attached.
It's Point with the broken #fromPress:value:, #hideData: and #pressCode replaced and recategorized, a class comment added, and #copy recategorized.
This was with a fully updated base image. I checked a fully updated full image but it seemed to be missing even more in the way of temps etc.
Is there a preferred image to work on?
Point.zip
The text was updated successfully, but these errors were encountered: