Stream processing is a term that is used widely in the literature to d
escribe a variety of systems. We present an overview of the historical
development of stream processing and a detailed discussion of the dif
ferent languages and techniques for programming with streams that can
be found in the literature. This includes an analysis of dataflow, spe
cialized functional and logic programming with streams, reactive syste
ms, signal processing systems, and the use of streams in the design an
d verification of hardware. The aim of this survey is an analysis of t
he development of each of these specialized topics to determine if a g
eneral theory of stream processing has emerged. As such, we discuss an
d classify the different classes of stream processing systems found in
the literature from the perspective of programming primitives, implem
entation techniques, and computability issues, including a comparison
of the semantic models that are used to formalize stream based computa
tion.