Skip to content
HomeVideosBooks
AllTopicsTrends
BlogsPodcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    Cover of Essential COM

    Essential COM

    Don Box · 1998

    Offering a distinctive approach, this book will teach readers not only how to use COM but how to think in COM. COM can greatly improve the efficiency of applications, but COM fluency is a difficult task. The book is a top resource for developers who need to make the transition from superficial understanding to deep knowledge.

    ProgrammingSoftware EngineeringComputer Science
    Open LibraryAmazon
    Stats for nerds
    11recommend
    18mentions
    12people
    2016–2026years
    78% recommend22% neutral

    Mentions per year

    201620182020202220242026

    What Hacker News says

    1. rramadassAug 2026
      Well said.

      COM was one of the best realizations of "Component-based Software Engineering" and Brad Cox's "Software-IC" model. It was a binary standard and so components could be written in any language and yet be assured of perfect interoperability provided you followed all the rules/conventions. There was a bunch of boiler-plate for the framework itself but once you understood it, everything was smooth sailing in your language of choice.

      One of the things i always advise people is not to focus only on the current way of doing things but to study older well-known libraries/frameworks/architectures/kernels/etc. to really understand "Software Engineering" from many perspectives. That is where insight comes from and real understanding happens.

      For people interested in understanding COM, see the classic Essential COM by Don Box.

      thread
    2. DonHopkinsFeb 2024
      If that didn't make your head explode, try Essential COM by Don Box!

      https://github.com/spb59h2/spb5

      Once you grok it for what it actually is (C++ pure virtual classes), COM is really pretty beautiful. Until you get to the DCOM stuff...

      thread
    3. mananaysiempreAug 2023
      Microsoft (Press) published a fair number of these books—or at least books that were so much better than the reference docs that the latter could barely be said to explain anything, whatever the intent of the authors. This includes the classics: Petzold, Inside OLE, Essential COM, ...
      thread
    4. teh_klevMar 2023
      > One is the transparent intergration with COM

      I think this is one of the things detractors of VB kinda miss. You could build quite sophisticated software to leverage COM/DCOM without needing to go full C/C++ and IDL.

      The place I worked at built software that ran inside Microsoft Transaction Server (latterly COM+) to exploit distributed transactions.

      And then there's the really "advanced" stuff you could do in VB as written about by Matthew Curland in his excellent book "Advanced Visual Basic 6: Power Techniques for Everyday Programs"[0]. Armed with a copy of Curland's book and Don Box's "Essential COM" you could be really dangerous :)

      [0]: https://www.amazon.co.uk/Advanced-Visual-Basic-Programming-D...

      thread
    5. DonHopkinsDec 2021
      Earlier I posted an article by Don Box comparing SOM and COM, and I mentioned that WebAssembly is going through a similar evolution, and might benefit from some of the lessons of COM and SOM:

      COM vs SOM: The Component Object Model and Some Other Model (1999) (archive.org)

      https://web.archive.org/web/19990127184653/http://www.develo...

      https://news.ycombinator.com/item?id=20266450

      https://news.ycombinator.com/item?id=20266627

      >DonHopkins on June 24, 2019 | prev | next [–]

      >This article comparing SOM and COM was written by Don Box. (first archived in January 1999, but doesn't say when published): The Component Object Model and Some Other Model: A comparison of technologies revisited yet again:

      https://web.archive.org/web/19990127184653/http://www.develo...

      https://en.wikipedia.org/wiki/Component_Object_Model

      >It was in response to IBM's somewhat misleading article comparing their SOM with Microsoft COM, last updated July 1994:

      >The System Object Model (SOM) and the Component Object Model (COM): A comparison of technologies summarized

      https://web.archive.org/web/19990117055950/http://www.develo...

      https://en.wikipedia.org/wiki/IBM_System_Object_Model

      >Don Box wrote an excellent in-depth book about COM: "Essential COM": "Nobody explains COM better than Don Box" -Charlie Kindel, COM Guy, Microsoft Corporation.

      https://en.wikipedia.org/wiki/Don_Box

      https://archive.org/details/essentialcom00boxd

      >Unfortunately COM had the most un-googlable name possible (even before there was a Google), so Microsoft renamed it ActiveX.

      >For more comtext, here are some notes I wrote about Win32, COM, OLE, OLE Controls, and ActiveX in 1996:

      https://donhopkins.com/home/interval/pluggers/win32.html

      https://donhopkins.com/home/interval/pluggers/com.html

      https://donhopkins.com/home/interval/pluggers/ole.html

      https://donhopkins.com/home/interval/pluggers/olecontrols.ht...

      https://donhopkins.com/home/interval/pluggers/activex.html

      >Here's a synopsis of COM I wrote in response to "Can someone link to a synopsis describing what "COM" is? It's hard to search for. (e.g. microsoft com visual studio)":

      https://news.ycombinator.com/item?id=12975257

      >Don't get me wrong: I'm not advocating everybody jump on the COM bandwagon! I just think it's interesting and useful to know where it came from, how it evolved, what different layers were built on top of it, and how it compared to the alternatives at the time it was designed. And it's still pretty widely used, and will probably never go away.

      >It certainly had a lot of problems and limitations, and OLE/ActiveX/DCOM/DirectX/etc took it way too far, then Mozilla XP/COM cloned it and also took it way too far (and then back again: see "decomification" and "decomtamination"), but it really was a pretty elegant and successful solution to the problems it was designed to address at the time.

      https://wiki.mozilla.org/Gecko:DeCOMtamination

      https://news.ycombinator.com/item?id=12968830

      https://bugzilla.mozilla.org/buglist.cgi?query_format=specif...

      >It's always good to study history to avoid repeating the mistakes of the past!

      >WebAssembly is going through a similar evolution, and might benefit from some of the lessons of COM and SOM.

      Also, here's a description of the origins of COM that I posted earlier:

      https://news.ycombinator.com/item?id=12975257

      >Glad you asked! One of my favorite topics. ;)

      >COM is essentially a formal way of using C++ vtables [1] from C and other languages, so you can create and consume components in any language, and call back and forth between them. It's a way of expressing a rational subset of how C++ classes work and format in memory, in a way that can be implemented in other languages.

      >It was the outcome of the C / C++ / Visual Basic language wars at Microsoft.

      >[...]

      Also some stuff about Netscape's Internet Foundation Classes:

      https://news.ycombinator.com/item?id=19837817

      >Wow, a blast from the past! 1996, what a year that was.

      >Sun was freaking out about Microsoft, and announced Java Beans as their vaporware "alternative" to ActiveX. JavaScript had just come onto the scene, then Netscape announced they were going to reimplement Navigator in Java, so they dove into the deep end and came up with IFC, which designed by NeXTStep programmers. A bunch of the original Java team left Sun and formed Marima, and developed the Castanet network push distribution system, and the Bongo user interface editor (like HyperCard for Java, calling the Java compiler incrementally to support dynamic script editing).

      >[...]

      There was also a previous discussion about Mozilla's WebAsembly System Interface:

      Mozilla announces WebAssembly System Interface, what JVM should have been (theregister.co.uk):

      https://news.ycombinator.com/item?id=19716179

      https://www.theregister.com/2019/03/29/mozilla_wasi_spec/

      https://news.ycombinator.com/item?id=19717416

      >DonHopkins on April 22, 2019 | parent | context | favorite | on: Mozilla announces WebAssembly System Interface, wh...

      >>"WebAssembly has been designed to scale from tiny devices to large server farms or CDNs..." What's ironic is that the "tiny devices" and even "high end professional desktop workstation and server devices" that Java was originally designed to run on when it was started in 1990 were MUCH tinier than the devices considered "tiny" today.

      >How many more times faster is a typical smartphone today (Raspberry Pi 3: 2,451 MIPS, ARM Cortex A73: 71,120 MIPS) that a 1990 SparcStation 2 pizzabox (28.5 MIPS, $15,000-$27,000)?

      http://www.wikiwand.com/en/Instructions_per_second

      thread
    6. gavinrayOct 2021
      There is, it's called COM, and Windows as an operating system and ecosystem is built on top of it. (Though COM as a specification is not limited to Windows)

      The language you use for defining the types is creatively named "Interface Definition Language (IDL)", and the "MIDL" compiler converts the interface definitions into C & C++ types and objects which can be used. Both via in-process/inter-process function calls, or via RPC/DCOM (Distributed COM).

      https://en.wikipedia.org/wiki/Component_Object_Model#DCE/RPC...

        "As a cross-language component model, COM relies on an interface definition language, or IDL, to describe the objects and associated functions. The COM IDL is based heavily on the feature-rich DCE/RPC IDL, with object-oriented extensions. Microsoft's own implementation of DCE/RPC, known as MSRPC, is heavily used as the primary inter-process communication mechanism for Windows NT services and internal components, making it an obvious choice of foundation."
      
        "DCOM (Distributed COM) extended the reach of COM from merely supporting a single user with separate applications communicating on the Windows desktop, to activating objects running under different security contexts, and on different machines across the network. With this were added necessary features for configuring which users have authority to create, activate and call objects, for identifying the calling user, as well as specifying required encryption for security of calls."
      
      If you want to learn more about this (it's an incredibly powerful concept that has a wide range of uses and is very much still used today), my recommendation would be:

      1. The book: "Essential COM (1997)" by Don Box, one of the architects of COM at Microsoft in the 90s

        https://www.amazon.com/Essential-COM-Don-Box/dp/0201634465
      
      2. The online tutorial "COM in plain C", which is one of the only (it might even be, like, THE only) resources for learning how COM actually works, since generally you use C++ frameworks to interact with it and they cover up all the details.

        https://www.codeproject.com/Articles/13601/COM-in-plain-C
      
      ---------

      Disclaimer: I'm no expert in COM myself, I'm also working through these same learning materials.

      I have a strong interest in FFI/Interop between languages and so have been working through things like "What is an ABI, conceptually?", understanding the C++ Itanium ABI, reading about vtable's, manually emulating C++ classes and class-inheritance with C structs of function pointers (vtables) etc.

      COM is foundational here so it's the thing on my list atm. Hope you find this useful!

      thread

    Related

    Cover of Essential .NET
    2010–2025

    Essential .NET

    Don Box
    3 recommend · 3
    Cover of Software engineering mathematics
    2012–2026

    Software engineering mathematics

    Jim Woodcock
    2 recommend · 4
    Cover of Software fundamentals
    2019–2025

    Software fundamentals

    David Lorge Parnas
    4 recommend · 10
    Cover of Code Complete
    2007–2026

    Code Complete

    Steve McConnell
    393 recommend · 894
    Cover of The art of computer programming
    2007–2026

    The art of computer programming

    Donald Knuth
    336 recommend · 1,799
    Cover of Advanced programming in the Unix environment
    2008–2025

    Advanced programming in the Unix environment

    W. Richard Stevens
    100 recommend · 153
    Cover of Code
    2008–2026

    Code

    Charles Petzold
    recommend · 385
    243
    Cover of Literate programming
    2009–2026

    Literate programming

    Donald Knuth
    18 recommend · 128