I'm aware that just exposing class interfaces (via COM or other means) is an option, but that tends to cause many problems of its own:

- You can no longer call new or delete on the underlying class; you're obliged to use factory methods. This leads to issues with templates and stack allocation (although this will be less of an issue for D compared to C++).

- You can't directly inherit from any of the library's classes. This is an issue for any library which wants to allow "custom components" (for example, widgets in a GUI toolkit, dialog boxes in a browser plugin, or controls in a desktop panel). Coding strictly against interfaces is one workaround, but that often makes things more complicated than they need to be.

- The library can't provide template methods for classes exposed this way, and class methods can no longer be inlined.

- It forces the developer to maintain both a public interface and a private implementation; he can no longer code as though he's writing classes for his own use.

All of these are relatively minor issues, but taken together, they make library development quite difficult. For example, I think it would be almost impossible to develop a COM GUI toolkit.

Reply via email to