类型球拍优化器
Typed Racket Optimizer
我目前正在学习一些 Typed Racket,我有一些哲学上的困境:
Racket 声称是一种语言开发框架,而 Typed Racket 就是在它之上实现的一种语言。该文档提到由于使用了类型,编译器现在可以进行 more/better 优化。
具体问题:
这些优化发生在哪里?
1) 在compile/expand部分(即"programmable"作为语言构建框架的一部分)
-或-
2) 在(字节码)优化器(用 C 语言编写,不能通过框架直接修改)中更进一步。
如果 2) 为真,这是否意味着类型信息在 compile/expand 阶段之后丢失,然后 "rebuilt/guessed" 由优化器丢失,或者中间表示已更改为容纳类型信息并告知后续阶段?
我问这个具体问题的原因是因为我想了解 Racket 语言框架的真正通用性,即对于静态类型语言也是可行的,无需对后端进行任何修改,而类型系统正在只是前端的东西,而运行时的代码仍然是动态类型的(但当然是静态检查的)。
谢谢。
Typed Racket 的优化发生在宏扩展期间。要亲自查看,您可以将 #lang typed/racket
更改为 #lang typed/racket #:no-optimize
,这表明 Typed Racket 完全控制应用的优化。
优化包括使用类型信息将某些过程的各种用途替换为 their unsafe equivalents. The unsafe procedures perform no runtime checks on the types of their arguments and cause undefined behavior (read: segfaults) if used incorrectly. You can find out more in the documentation section entitled Optimization in Typed Racket。
过程的不安全变体的暴露真正使得 user-defined 语言能够实现这些优化。例如,如果您使用类型系统编写自己的语言,可以证明从未使用 out-of-bounds 索引访问向量,您可以替换 vector-ref
with unsafe-vector-ref
.
的使用
在字节码级别也有类似的优化,但这些优化主要适用于 JIT 可以推断在宏扩展时不可见的类型信息的情况。这些不是 user-controlled,但您不必依赖它们。
我目前正在学习一些 Typed Racket,我有一些哲学上的困境:
Racket 声称是一种语言开发框架,而 Typed Racket 就是在它之上实现的一种语言。该文档提到由于使用了类型,编译器现在可以进行 more/better 优化。
具体问题:
这些优化发生在哪里?
1) 在compile/expand部分(即"programmable"作为语言构建框架的一部分)
-或-
2) 在(字节码)优化器(用 C 语言编写,不能通过框架直接修改)中更进一步。
如果 2) 为真,这是否意味着类型信息在 compile/expand 阶段之后丢失,然后 "rebuilt/guessed" 由优化器丢失,或者中间表示已更改为容纳类型信息并告知后续阶段?
我问这个具体问题的原因是因为我想了解 Racket 语言框架的真正通用性,即对于静态类型语言也是可行的,无需对后端进行任何修改,而类型系统正在只是前端的东西,而运行时的代码仍然是动态类型的(但当然是静态检查的)。
谢谢。
Typed Racket 的优化发生在宏扩展期间。要亲自查看,您可以将 #lang typed/racket
更改为 #lang typed/racket #:no-optimize
,这表明 Typed Racket 完全控制应用的优化。
优化包括使用类型信息将某些过程的各种用途替换为 their unsafe equivalents. The unsafe procedures perform no runtime checks on the types of their arguments and cause undefined behavior (read: segfaults) if used incorrectly. You can find out more in the documentation section entitled Optimization in Typed Racket。
过程的不安全变体的暴露真正使得 user-defined 语言能够实现这些优化。例如,如果您使用类型系统编写自己的语言,可以证明从未使用 out-of-bounds 索引访问向量,您可以替换 vector-ref
with unsafe-vector-ref
.
在字节码级别也有类似的优化,但这些优化主要适用于 JIT 可以推断在宏扩展时不可见的类型信息的情况。这些不是 user-controlled,但您不必依赖它们。