3 ms·
Weirdly, the github page says: > COM has been superseded by WinRT which builds on COM to provide even more guarantees about the binary interface. Yet the WinR
by Crinus 7y ago
Weirdly, the github page says:
> COM has been superseded by WinRT which builds on COM to provide even more guarantees about the binary interface.
Yet the WinRT page says:
> The Windows Runtime is based on Component Object Model (COM) APIs, and it's designed to be accessed through language projections. A projection hides the COM details, and provides a more natural programming experience for a given language.
Which implies that WinRT doesn't supersed (ie. replace) COM but it uses COM itself (though the "language projection" part makes me think that the way it is used is so convoluted that you need language extensions to make it tolerable :-P).
- pjmlp 7y agoWinRT is an evolution of COM. Basically there is a new base interface, IInspectable instead of IUnknown, and many more datatypes are allowed to cross the wire between processes, making it easier to also use generics, lists and arrays across COM libraries. Additonally, .NET metadata libraries are using instead of the old COM type libraries. If you prefer, it is the original design of .NET before the CLR came into play, and related to the Longhorn architecture, just using COM instead of .NET. A path started in Vista. Now for this Rust approach to win the hearts of Windows devs, it needs to be as productive as C++/CX or C++/WinRT VS tooling, in all COM/UWP usage scenarios.
- Crinus 7y agoOne thing i'm not sure about WinRT and cannot figure out from the docs, AFAIK it is possible to "bit bang" (or "byte bang" if you will) a COM object by arranging everything in memory using plain old C structs (or equivalent for other languages) from compilers that weren't COM aware. Is it possible to do the same with WinRT or it requires the language to be WinRT aware? F.e. could i get something like TCC and write some code that uses a WinRT object even though TCC has no idea about WinRT?
- pjmlp 7y agoNot really, as it is more elaborated. https://docs.microsoft.com/en-us/uwp/winrt-cref/winrt-type-system https://docs.microsoft.com/en-us/uwp/winrt-cref/winrt-type-s... The documentation is a bit lacking, as it appeared with WinRT, then we had UAP, and finally UWP. While it all boils down to the same, those marketing changes, did cause the documentation to keep changing. Alongside C++/CX, there was the low level "Windows Runtime C++ Template Library (WRL)", which was basically an evolution of ATL, with MDIL 2.0. https://docs.microsoft.com/en-us/cpp/cppcx/wrl/windows-runtime-cpp-template-library-wrl?view=vs-2015 https://docs.microsoft.com/en-us/cpp/cppcx/wrl/windows-runti... Eventually MIDL improved to 3.0, as the work on C++/WinRT progressed. https://docs.microsoft.com/en-us/uwp/midl-3/ https://docs.microsoft.com/en-us/uwp/midl-3/ https://channel9.msdn.com/Shows/ifdefWINDOWS/MIDL3-with-Larry-Osterman https://channel9.msdn.com/Shows/ifdefWINDOWS/MIDL3-with-Larr... Here are some technical documents and sessions related to WinRT. "The Windows Runtime" https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/The-Windows-Runtime https://channel9.msdn.com/Events/Lang-NEXT/Lang-NEXT-2012/Th... "Windows Runtime internals: understanding "Hello World"" https://channel9.msdn.com/events/Build/BUILD2011/PLAT-875T https://channel9.msdn.com/events/Build/BUILD2011/PLAT-875T The C++/WinRT talks from Kenny Kerr, related how they migrated from C++/CX language extensions to the C++17 compliant WinRT in chronological order. "CppCon 2017: Scott Jones & Kenny Kerr “C++/WinRT and the Future of C++ on Windows”" https://www.youtube.com/watch?v=7TdpWB_vRZM https://www.youtube.com/watch?v=7TdpWB_vRZM "Effective C++/WinRT for UWP and Win32" https://www.youtube.com/watch?v=nOFNc2uTmGs https://www.youtube.com/watch?v=nOFNc2uTmGs "Meet C++/WinRT 2.0: Faster and smarter in the open" https://www.youtube.com/watch?v=X41j_gzSwOY https://www.youtube.com/watch?v=X41j_gzSwOY Uff, hope this sheds some light on your questions and anyone else that wants to get a clearer picture of COM and its evolution into UWP.
- ak39 7y agoThis reply should go into HN hall of fame. Thank you very much!
- asveikau 7y ago> it is possible to "bit bang"... a COM object by arranging everything in memory using plain old C structs ... from compilers that weren't COM aware. Is it possible to do the same with WinRT or it requires the language to be WinRT aware? Yes, actually, you can do that. I had such code working. Basically declared the IInspectable VTable as a C struct and filled it with my own implementation. Then wrote an "activator" for the relevant classes the same way. [What COM used to call factories.] Did the same thing with a few VTables for MS-authored WinRT classes calling into them in the other direction. All this was tedious, I had complicated reasons for wanting to do this and I eventually switched to WRL when those reasons disappeared. Writing COM/WinRT from C++ with something like WRL is much nicer.
- mwcampbell 7y ago> Now for this Rust approach to win the hearts of Windows devs, it needs to be as productive as C++/CX or C++/WinRT VS tooling, in all COM/UWP usage scenarios. Possibly related, I just spotted this [1] on the personal blog of Kenny Kerr, creator of C++/WinRT: > On a personal note, I’m spending a lot of my time working with the Rust language and can’t wait to share more about that eventually. Disclosure: I work on Windows at Microsoft, but not in this area. Posting on my own behalf though. [1]: https://kennykerr.ca/2019/10/09/xlang-cppwinrt-repos/ https://kennykerr.ca/2019/10/09/xlang-cppwinrt-repos/
- pjmlp 7y agoVery interesting, given how he made C++/WinRT possible. Thanks for bringing it up.