I would still like to see the benchmark comparison for BricsCad though. IMO that might be a lot faster.
And for those thinking this is just for input. Consider reading from a CSV file several 1000 points, you want as little to hangup the system as possible.
An interesting lesson to be learned: if you have subroutines for your subroutines, within a program, do not define them within the subroutine, but rather define them within the main program.
To a point. The issue is that you then end up either having to pass all variables as arguments, in which case you'd be losing some efficiency (passing arguments has an extra overhead over just using global variables). Or you need to ensure no variable name clashes due to the dynamic scoping. Performance-wise it makes sense yes, but it could cause bugs if you're not careful.