But what, I hear someone ask, if I want to get speed from functions like this 
without compiling everything with -d:danger?

Given fib.nim:
    
    
    import std/[os, strutils]
    
    {.push checks: off, optimization: speed, inline.}
    proc fib(n:int):int{.raises:[].} =
      if n < 2: n
      else:
        fib(n-1) + fib(n-2)
    {.pop.}
    
    proc main() = echo commandLineParams()[0].parseInt.fib
    
    main()
    
    
    Run

and fib2.nim:
    
    
    import std/[os, strutils]
    
    {.push inline.}
    proc fib(n:int):int{.raises:[].} =
      if n < 2: n
      else:
        fib(n-1) + fib(n-2)
    {.pop.}
    
    proc main() = echo commandLineParams()[0].parseInt.fib
    
    main()
    
    
    Run

When compiled as such:
    
    
    $ nim c -d:release fib.nim
    $ nim c -d:danger fib2.nim
    
    
    Run

This benchmark is consistent:
    
    
    Summary
      './fib 47' ran
        1.10 ± 0.01 times faster than './fib2 47'
    
    
    Run

Reply via email to