This section is really more useful for me than for Magpie users, but it may offer some insight into why the language is designed the way it is. When I first started working on Magpie, I'd run into basic design questions that needed answering. Each time, I would sit down and work my way through it until I reached a solution that seemed to make sense. I'd code up the result and move on.
Later, I'd forget all of the reasoning and then second guess the result. "Why did I do it this way when this other way makes so much more sense?" After going in circles a few times, I realized I should really write down not just the answer, but the reasoning that led to it.
Each page in this section is a specific language design question, the answer (if I have one), and the reasoning that led to it. They're somewhere between a Socratic dialogue and a personal journal. They may be kind of hard for anyone but me to understand, but maybe you'll get something from them.
Please keep in mind that I write these as I go, which means a lot of this content may be outdated as later design decisions affected or overrode it.
- Are All Types First Class?
- How Do Callable Fields Work?
- What Is the Type of a Generic?
- Are Types in Java or Magpie?
- Can All Generic Arguments Be Inferred?
- How Are Classes Declared?
- How Are Generic Functions Checked?
- How Are Methods Defined?
- How Do Abstract Members Work?
- How Do Fields Work?
- How Do Operators Work?
- How Does Inheritance Work?
- Interfaces or Abstract Classes?
- What Conversions Are Needed?
- Where Do Type Expressions Appear?
- How Are Syntax Extensions Imported?
- How Do Multimethods Work?
- How Are Bare Names Interpreted?
- How Do Callables Work With Multimethods?
- What is a Multimethod's Identity?
- How Do Multimethods Interact with Modules?