1. A method for extracting a stream graph for a hardware circuit from a program written in a programming language, comprising: receiving a program; analyzing the program, by a processor, for one or more constructs in the programming language that builds the stream graph for programming the hardware circuit, a node in the stream graph representing a computation to be performed, the computation expressed in the programming language, an edge in the stream graph representing data flowing from the node to another node in the stream graph; and outputting one or more artifacts representing the stream graph, wherein the stream graph can be compiled for the hardware circuit to execute and produce a result with different node initialization values and different streaming data values that are presented in an execution of the program not known at compile time, and wherein the stream graph can be built using recursive computation and the connectivity of the stream graph can be arbitrary.