In Mac OS (1984), controls were different from windows. Advantage was that controls were more light-weight, disadvantage that one couldn&#x27;t build a control out of smaller controls (at least, the system did not support that). Its event loop also was extremely rudimentary. If you got a mouse click event, you would have to make a system call to find out what window it was in, then a system call to find a control, etc. If the OS had a real kernel and memory protection, that would have killed performance.<p>Carbon moved the &quot;giant switch statements&quot; out of the views, inside the library (edit: maybe, even into the kernel. That way, application processes only would be woken up if they really had work to do). Controls had to tell the library what events they were interested in, and what function to call to handle them.<p>Advantage was that the system didn&#x27;t need to fire zillions of events to controls that didn&#x27;t do anything with them (for example, few controls respond to &quot;mouse moved&quot; events, but if the system doesn&#x27;t know that, it has to send corresponding events to a top-level window, the control below it, the control in the control below it, etc.). That decreased power usage (at least in theory; code and data accessed could be closer to each other, decreasing cache misses, and there were fewer JSR-switch-do nothing-RTS cycles), and allowed for the system to introduce more high-level events (double-click, triple-click, &quot;mouse entered&quot;, &quot;mouse moved outside the area of the control&quot;, etc) without decreasing performance; disadvantage that registering the exact set of events one was interested in wasn&#x27;t fun (especially because, in those days, one needed to pass universal procedure pointers to the Carbon library to register handlers)<p>If you have lambdas and reflection, the latter can be made free for programmers. So, I guess that is an area one could look at. I&#x27;m not sure the gains will be real in a system where the windows live in a browser window, though.