1.4 KiB
Future
This document introduces some ideas for future improvements.
Basic Optimizations
Implement basic optimizations such as common subexpression elimination and loop invariant code motion.
Importantly, common subexpression elimination could be used to avoid redundant type checks.
Operation-specific Optimizations
Some operations or combinations of successive operations can be replaced with more efficient operations. Examples:
-
If
s
is a string,s[i] == 'x'
doesn't need to construct the intermediate single-character string objects[i]
but just compare the character value toord('x')
. -
a + ':' + b
(two string concetenations) can be implemented as single three-operand concatenation that doesn't construct an intermediate object. -
x in {1, 3}
can be translated intox == 1 or x == 3
(more generally we need to evaluate all right-hand-side items).
Integer Range Analysis
Implement integer range analysis. This can be used in various ways:
- Use untagged representations for some registers.
- Use faster integer arithmetic operations for operations that only deal with short integers or that can't overflow.
- Remove redundant list and string index checks.
Always Defined Attributes
Somehow make it possible to enforce that attributes in a class are always defined. This makes attribute access faster since we don't need to explicitly check if the attribute is defined.