Add a summary to the end of part 1 of types series
This commit is contained in:
parent
9192b870b6
commit
347c818ab6
|
@ -241,9 +241,12 @@ Before I explain any further, let me show you the rule.
|
||||||
{{< /latex >}}
|
{{< /latex >}}
|
||||||
|
|
||||||
In the above (and elsewhere) we will use the metavariable \\(e\\) as a stand-in for
|
In the above (and elsewhere) we will use the metavariable \\(e\\) as a stand-in for
|
||||||
any _expression_ in our source language. Expressions are things such as `1`,
|
any _expression_ in our source language. In general, expressions are things such as `1`,
|
||||||
`x`, `1.0+someFunction(y)`, and so on. In other words, they're things we can evaluate
|
`x`, `1.0+someFunction(y)`, and so on. In other words, they're things we can evaluate
|
||||||
to a value. For the moment, we will avoid rules for checking _statements_ (like `let x = 5;`).
|
to a value. For the purposes of this article, though, we're only looking at basic
|
||||||
|
types such as numbers and strings, as well as adding them. Thus, at this point, expressions look more like
|
||||||
|
`1`, `1+2`, `"hello"+1`. Notice from that last one that expressions need not be well-typed.
|
||||||
|
For the moment, we will avoid rules for checking _statements_ (like `let x = 5;`).
|
||||||
|
|
||||||
Rules like the above consist of premises (above the line) and conclusions (below the line).
|
Rules like the above consist of premises (above the line) and conclusions (below the line).
|
||||||
The conclusion is the claim / fact that we can determine from the rule. In this specific case,
|
The conclusion is the claim / fact that we can determine from the rule. In this specific case,
|
||||||
|
@ -327,6 +330,24 @@ this article.
|
||||||
- [This paper](https://dl.acm.org/doi/10.1145/3412932.3412939), titled _Type debugging with counter-factual type error messages using an existing type checker_.
|
- [This paper](https://dl.acm.org/doi/10.1145/3412932.3412939), titled _Type debugging with counter-factual type error messages using an existing type checker_.
|
||||||
- [Another paper](https://dl.acm.org/doi/10.1145/507635.507659), _Compositional explanation of types and algorithmic debugging of type errors_.
|
- [Another paper](https://dl.acm.org/doi/10.1145/507635.507659), _Compositional explanation of types and algorithmic debugging of type errors_.
|
||||||
|
|
||||||
|
One last thing. So far, I've been defining what each metavariable means by giving you
|
||||||
|
examples. However, this is not common practice in the theory of programming languages.
|
||||||
|
There is actually another form of notation that's frequently used from defining what
|
||||||
|
various symbols mean; it's called a [grammar](https://en.wikipedia.org/wiki/Formal_grammar).
|
||||||
|
A grammar for our little addition language looks like this:
|
||||||
|
|
||||||
|
{{< latex >}}
|
||||||
|
\begin{array}{rcll}
|
||||||
|
e & ::= & n & \text{(numbers)} \\
|
||||||
|
& | & s & \text{(strings)} \\
|
||||||
|
& | & e+e & \text{(addition)}
|
||||||
|
\end{array}
|
||||||
|
{{< /latex >}}
|
||||||
|
|
||||||
|
This reads,
|
||||||
|
|
||||||
|
> An expression is a number or a string or the sum of two expressions.
|
||||||
|
|
||||||
I think this is all I wanted to cover in this part. We've gotten a good start!
|
I think this is all I wanted to cover in this part. We've gotten a good start!
|
||||||
Here's a quick summary of what we've covered:
|
Here's a quick summary of what we've covered:
|
||||||
|
|
||||||
|
@ -364,3 +385,52 @@ Here's a quick summary of what we've covered:
|
||||||
|
|
||||||
Next time we'll take a look at type checking expressions like `x+1`, where
|
Next time we'll take a look at type checking expressions like `x+1`, where
|
||||||
variables are involved.
|
variables are involved.
|
||||||
|
|
||||||
|
### This Page at a Glance
|
||||||
|
{{< dialog >}}
|
||||||
|
{{< message "question" "reader" >}}
|
||||||
|
Hey, what's this section? I thought we were done.
|
||||||
|
{{< /message >}}
|
||||||
|
{{< message "answer" "Daniel" >}}
|
||||||
|
We are. However, various parts of this series will build on each other,
|
||||||
|
and as we go along, we'll be accumulating more and more various symbols,
|
||||||
|
notation, and rules. I thought it would be nice to provide a short-and-sweet
|
||||||
|
reference at the bottom for someone who doesn't want to re-read the whole
|
||||||
|
section just to find out what a symbol means.
|
||||||
|
{{< /message >}}
|
||||||
|
{{< message "question" "reader" >}}
|
||||||
|
So it's kind of like a TL;DR?
|
||||||
|
{{< /message >}}
|
||||||
|
{{< message "answer" "Daniel" >}}
|
||||||
|
Yup! I also would like to somehow communicate the feeling of reading
|
||||||
|
Programming Languages papers once you are familiar with the notation;
|
||||||
|
after a little bit of practice, you can just read the important figures
|
||||||
|
and already be up-to-speed on a big chunk of the content.
|
||||||
|
{{< /message >}}
|
||||||
|
{{< /dialog >}}
|
||||||
|
|
||||||
|
#### Metavariables
|
||||||
|
| Symbol | Meaning |
|
||||||
|
|---------|--------------|
|
||||||
|
| \\(n\\) | Numbers |
|
||||||
|
| \\(s\\) | Strings |
|
||||||
|
| \\(e\\) | Expressions |
|
||||||
|
|
||||||
|
#### Grammar
|
||||||
|
{{< block >}}
|
||||||
|
{{< latex >}}
|
||||||
|
\begin{array}{rcll}
|
||||||
|
e & ::= & n & \text{(numbers)} \\
|
||||||
|
& | & s & \text{(strings)} \\
|
||||||
|
& | & e+e & \text{(addition)}
|
||||||
|
\end{array}
|
||||||
|
{{< /latex >}}
|
||||||
|
{{< /block >}}
|
||||||
|
|
||||||
|
#### Rules
|
||||||
|
| Rule | Description |
|
||||||
|
|--------------|-------------|
|
||||||
|
| {{< latex >}}s : \text{string} {{< /latex >}}| String literals have type \\(\\text{string}\\) |
|
||||||
|
| {{< latex >}}n : \text{number} {{< /latex >}}| Number literals have type \\(\\text{number}\\) |
|
||||||
|
| {{< latex >}}\frac{e_1 : \text{string}\quad e_2 : \text{string}}{e_1+e_2 : \text{string}} {{< /latex >}}| Adding strings gives a string |
|
||||||
|
| {{< latex >}}\frac{e_1 : \text{number}\quad e_2 : \text{number}}{e_1+e_2 : \text{number}} {{< /latex >}}| Adding numbers gives a number |
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 5869d99db17ce2da4aa41fbe7322b4b0fbfd8b0f
|
Subproject commit c5a28bf7ef0ea0ec4f534cf2bff231d1ad43bcea
|
Loading…
Reference in New Issue
Block a user