Hacker News new | past | comments | ask | show | jobs | submit login

I think you have rose tinted classes on.

COM is/was a rats nest of confusing and frequently duplicated APIs with insanely complicated rules that by the end really only Don Box understood. CoMarshalInterThreadInterfaceInStream was one of the simpler ones, iirc. COM attempted to abstract object language, location, thread safety, types, and then the layers on top tried to add serialisation and documented embedding too, except that the separation wasn't really clean because document embedding had come first.

Even just implementing IUnknown was riddled with sharp edges and the total lack of any kind of tooling meant people frequently screwed it up:

https://blogs.msdn.microsoft.com/oldnewthing/20040326-00/?p=...

The modern equivalent of COM is the JVM and it works wildly better, even if you look at the messy neglected bits (like serialisation and RPC).




I think the good ideas from COM are: IUnknown, consistent error handling through HRESULT, the coding style that emerges from being clear about method inputs and outputs.

Some things done not as well as these core ideas: registration done globally in the registry, anything to do with threading, serialization, IDispatch.

I think in many situations you can take lessons from the good parts and try to avoid the bad.

I don't see how pointing out common bugs helps your argument though. You can write bugs in any paradigm.


Yes you can write bugs in any paradigm, but some designs are just empirically worse than others when it comes to helping people write correct code.

IUnknown is a classic case of something that looks simple but in fact a correct implementation is not at all trivial, yet COM developers were expected to get it right by hand again and again. COM itself didn't help with it at all, so the ecosystem was very dependent on IDE generated code and (eventually) ATL and other standard libraries.

None of the things you highlight were good ideas, in my view, although probably the best you can do in C.


> The modern equivalent of COM is the JVM and it works wildly better, even if you look at the messy neglected bits (like serialisation and RPC).

Actually it is the WinRT introduced in Windows 8.


Well yes, except adoption of WinRT in industry appears to be zero.


Well, except that is the only way forward for new Windows applications, even classical Win32 is being coerced into it via Project Centipede.


New windows application that only target windows 10+. Backwards compatibility is a major limit to it's adoption.




Consider applying for YC's first-ever Fall batch! Applications are open till Aug 27.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: