1. A computer implemented method of program compilation to improve parallelism during the linking of the program by a compiler, the method comprising: converting statements of the program to canonical form; constructing a traversable representation for each procedure in the program; and traversing the program to construct a functional dataflow graph, in which an assignment statement or function call is represented as a node, a control flow decision is represented by a first set of nodes, an array or set is represented as a second set of nodes, and edges of the functional dataflow graph represent typed data; identifying at least one loop in the functional dataflow graph that can be executed in parallel; and transforming the at least one loop to a set operation by retyping connections between nodes of the functional dataflow graph.