Interfaces or Abstract Classes?

Instead of having interfaces, C++ just has classes but you can define a class where all of its methods are abstract. With multiple inheritance, a C++ class can effectively implement multiple interfaces. Should Magpie have abstract methods? Does it need interfaces at all?

Advantages for interfaces:

Advantages for abstract classes:

Answer: It Should Have Interfaces.

Unlike classes, interfaces in Magpie allow implicit compatibility: a concrete type that has matching methods is compatible with the interface automatically. That allows a measure of duck typing, but it's not something I think all classes should allow. I don't think arbitrary concrete classes should be implicitly compatible based just on method compatibility.

This doesn't necessarily rule out abstract classes or methods too: they serve a different purpose.