I wrote an application with Nim and discovered that an application with the same logic and data structures written in Python has a better execution speed than the Nim version.
I was trying to find out about the reason why Nim has a larger execution speed than Python. I isolated some code and tested two small and equivalent Python and Nim programs. For a loop count of 100000 Python takes 1.0 sec and Nim takes 1.8 sec This speed ratio corresponds to the speed ratio in the real application. I use Python version 2.7.3 and Nim compiler version 0.13.0 I compiled Nim with with -d:release option. I'd like to know what is the reason why in this case Python beats Nim in execution speed. Here are the both programs. The problem is the proc "do_something" # Nim example to test execution speed against a Python version import times, os var board: seq[char] = @['0', 'p', '.', 'p', 'P', '.', 'p', 'P', '.', 'p', '.', 'p', 'P', '.', 'p'] const NE: seq[int] = @[8, 2, 13, 4, 5, 7, 8, 3, 9, 12, 7, 8, 3, 9, 12] const Directions = [NE, NE, NE, NE] # for short: in real application the array elements differ proc do_something(board: seq[char]): seq[char] = var res: seq[char] = @[] for i, p in board: for d in Directions: res.add board[d[i]] return res let t0 = cpuTime() var res: seq[char] let count = 100000 for i in 1..count: res = do_something(board) let t1 = cpuTime() echo "***** Time elapsed for Nim: ", $(t1 - t0), " Counts: ", $count ##echo res.repr # Python example to test execution speed against a Nim version import time, sys board = ['0', 'p', '.', 'p', 'P', '.', 'p', 'P', '.', 'p', '.', 'p', 'P', '.', 'p'] NE = [8, 2, 13, 4, 5, 7, 8, 3, 9, 12, 7, 8, 3, 9, 12] directions = [NE, NE, NE, NE] # for short: in real application the array elements differ def do_something(board): res = [] for i, p in enumerate(board): for d in directions: res.append(board[d[i]]) return res t0 = time.time() res = [] count = 100000 for i in range(1, count): res = do_something(board) t1 = time.time() print("***** Time elapsed for Python: ", str(t1 - t0)), " Counts: ", str(count) ##print res