- Learn Type:Driven Development
- Yawar Amin Kamon Ayeva
- 355字
- 2021-07-02 14:41:26
Static and dynamic environments
Let's develop a mental model for what happens in a program with types and values. At its core, a program is made up of a series of type and value definitions. For example:
/* src/Ch02/Ch02_Demo.re */
type person = {id: int, name: string};
type company = {id: int, name: string, employees: list(person)};
let bob = {id: 1, name: "Bob"};
let acmeCo = {id: 1, name: "Acme Co.", employees: [bob]};
Here, we're defining person and company types, and then allocating a person (bob) and a company he works for (acmeCo).
Without worrying too much about the syntax (we will introduce this in Chapter 4, Group Values Together in Types), let's think about how the programming environment sees this program.
In a statically typed programming language, the typechecker and runtime environment together make up the static and dynamic environments. These are areas where type definitions are stored while typechecking takes place, and where value definitions are stored during program execution (runtime). We can think of these as two distinct areas that are only relevant during the distinct phases of compilation and runtime. After compilation, all type information is wiped out (type erasure), but during runtime the dynamic environment becomes active in memory (that is, the stack and the heap).
Here is how the static and dynamic environments look for the preceding code:

In each of the static and dynamic environments, each definition is allowed to refer to definitions that came before it. This is a crucial abstraction technique – it's how we build larger programs out of smaller ones at both the type and value levels.
Among other things, this strict separation balances the needs of safety and efficiency. Note that this is in sharp contrast to dynamic typing, where types exist at runtime as well, and must be checked before every operation.
- 劍指JVM:虛擬機實踐與性能調優
- DevOps入門與實踐
- 數據結構簡明教程(第2版)微課版
- PHP+Ajax+jQuery網站開發項目式教程
- 代碼閱讀
- Learning Python Data Visualization
- 進入IT企業必讀的324個Java面試題
- WildFly Cookbook
- 人人都能開發RPA機器人:UiPath從入門到實戰
- Software Development on the SAP HANA Platform
- Java語言程序設計實用教程(第2版)
- Node.js應用開發
- 產品架構評估原理與方法
- Python Penetration Testing Essentials
- PHP 7 Programming Blueprints