Menu

Code optimization Log in to Edit

Brandon Barker jeffrey

When not to attempt clever code optimization

  • A macdef in ATS cannot involve types (but it can in ATS2); use macros only in cases where using functions would be inconvenient. Using macros probably does not make your code run more quickly, since gcc -O2 already inlines functions somewhat aggressively.

  • Making use of the knowledge that separate val declarations within the same scope technically denote different vals on the stack should not preclude one from using a natural style. For instance:

    val x = 5
    val x = 7

here no extra space is allocated for the second 'x' due to constant propagation. It is in generally unlikely that such a coding style would incur any penalty.

Optimization tips

  • Instead of freeing an instance of a linear type and immediately creating and returning a new one with the same value in a case expression, like this

    case+ x of
    | ~GRgenes (genes) => GRgenes (genes)
    

    do this

    case+ x of
    | GRgenes _ => (fold@ x; x)
    

    because @fold is compiled into a "noop".

  • Remove anonymous closure definitions from function calls when possible, to avoid having them created each time the loop is called. For instance, a simple string comparison function can be created like so:

    val cmp_str = lam(x:string,y:string):int =<cloref> compare (x, y)
    

Related

Wiki: Home

Discussion

Anonymous
Anonymous

Add attachments
Cancel





Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.