"The reason is that anyone interfacing with the object needs to have the prototypes during compile time, in order to ensure run time compatibility."
Other static, strongly typed languages manage to handle it fine without prototypes. I see prototypes as an artifact of challenges in compiler design that were solved after the solution of prototypes was introduced. Dealing with prototypes is a hassle, because you need to constantly keep them in sync with the implementation, or have a tool to do it for you. And if the tool is constantly syncing them, then why are they needed in the first place?
Keep Up with TechRepublic