Stream (abstract data type)

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search

In type theory and functional programming, a stream is a potentially infinite analog of a list, given by the coinductive definition:[1][2]

data Stream α = Nil | Cons α (Stream α)

Generating and computing with streams requires lazy evaluation, either implicitly in a lazily evaluated language or by creating and forcing thunks in an eager language. In total languages they must be defined as codata and can be iterated over using (guarded) corecursion.

File:UML dotnet streams.svg
UML package diagram of the stream hierarchy in .NET

Java provides the Stream interface under the java.util.stream namespace.

JavaScript provides the ReadableStream, WritableStream and TransformStream interfaces.[3]

Python have the StreamReader and StreamWriter classes in the asyncio module.[4]

.NET provides the abstract class Stream[5] which is implemented by classes such as FileStream and MemoryStream.[6]

In Rust a struct can implement the Read trait.[7] There is also the Cursor struct wraps an in-memory buffer.[8]

See also

[edit | edit source]

References

[edit | edit source]
  1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
  8. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).