Skip to content
This repository was archived by the owner on Apr 1, 2025. It is now read-only.

Commit 5addbd6

Browse files
committed
Remove some dead links
1 parent c69933e commit 5addbd6

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

docs/program-analysis.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
Program analysis allows us to ask questions about and analyze the behavior of computer programs. Analyzing this behavior allows us to (eventually) answer subtle but powerful questions such as, will this use more than 8 GB of RAM? Does this present a user interface? We perform program analysis statically—that is, without executing the program.
44

55
We’re able to compute the following end results using evaluation:
6-
1. **[Import graph](https://github.com/github/semantic/blob/master/docs/import-graph.md):** graph representing all dependencies (`import`s, `require`s, etc.)
7-
2. **[Call graph](https://github.com/orgs/github/projects/390):** a control flow graph that represents calling relationships (ie., how one particular function calls other functions). This information is often vital for debugging purposes and determining where code is failing.
8-
3. **[Control flow graph](https://github.com/orgs/github/projects/471#card-11585654):** representation of _all_ paths that might be traversed through a program during its execution.
6+
1. **Import graph:** graph representing all dependencies (`import`s, `require`s, etc.)
7+
2. **Call graph:** a control flow graph that represents calling relationships (ie., how one particular function calls other functions). This information is often vital for debugging purposes and determining where code is failing.
8+
3. **Control flow graph:** representation of _all_ paths that might be traversed through a program during its execution.
99

1010
### Abstract interpretation
1111
To do program analysis, we implement an approach based on the paper [Abstracting Definitional Interpreters](https://plum-umd.github.io/abstracting-definitional-interpreters/), which we've extended to work with our [à la carte representation of syntaxes](http://www.cs.ru.nl/~W.Swierstra/Publications/DataTypesALaCarte.pdf). This allows us to build a library of interpreters that do different things, but are written with the _same_ evaluation semantics. This approach offers several advantages; we can define _one_ evaluator and get different behaviors out of it (via type-directed polymorphism).
@@ -55,7 +55,7 @@ We compute effects non-deterministically.
5555

5656
<!--- WIP: come back and briefly talk about why this is useful for program analysis --->
5757

58-
<!--- WIP: come back and briefly talk about why this is useful for runEvaluator --->
58+
<!--- WIP: come back and briefly talk about why this is useful for runEvaluator --->
5959

6060
### Potential use-cases
6161

0 commit comments

Comments
 (0)