View Single Post
Old 05 December 2020, 19:42   #18
Registered User

bloodline's Avatar
Join Date: Jan 2017
Location: London, UK
Posts: 360
Originally Posted by Thomas Richter View Post
It's a small-talk like "message" passing system. For this to happen at language level, you would have to have a language that supports it. ANSI-C does not, so all the message handling has to be done manually.
Yes, exactly! I was really put off BOOPSI in the ‘90s with all these convoluted function calls... I was young, I didn’t understand it, and avoided it. Had they just implanted it using a language with supported small-talk like message passing, I’m sure I would have picked it up. I seem to be one of the few people on Earth who actually likes Obj-C (certainly I think 2.0 is a really good language), and I found NeXTStep a breeze to understand.

Well, as far as the design is concerned.... I'm not so happy about it. First of all, boopsi messages are handled in the input.device task, as part of the intuition input handler to be precise. This means that any long-going activity blocks the mouse and the responsiveness of the system. Instead, the system would have been much better if the activity would be off-loaded to a side-task, and standard exec message communication would have been used. The way how it is done right now means that it is the responsibility of the boopsi to off-load an activity to a potential side task, and intuition is of little help.
I perhaps shouldn’t be surprised, but it does upset me to hear of such poor implementation! It explains why MUI was much maligned on the slower CPUs.

Perhaps you are in a position to think about it, moving forward

Second, the message dispatch system requires each boopsi to go through a big "switch-case" statement, for each layer, at worst up to the root class, so this is not ideal. Hence, there is a lot of almost-identical decisions made multiple times, in each layer of the system. Having particular entry points in the boopsi library would have been better, but there would have been a need to register them somehow.
Given my (limited) understanding of BOOPSI, I can’t think how it could be implemented any other way, using ANSI C? Again, without moving to a different language, like Obj-C, where I believe the runtime is able to cache dynamically dispatched method calls and perform other optimisations to speed method calls...

I could be totally wrong here, this goes far outside of my experience of Operating System design!

Third, the system is not ideally documented, so which message is handled exactly how often remains opaque to the user, and incompatible boopsis have been created as a side effect of this.

As messages are "dynamically dispatched" by the message ID only, message IDs will and have been added, so this is a case for better using their symbolic names. There are too many of them, and the set changes and is extensible.
You are really painting a bad picture here perhaps it’s time to replace it!?
bloodline is offline  
Page generated in 0.04643 seconds with 11 queries