explaingit

matz/streem

4,598CAudience · developerComplexity · 3/5LicenseSetup · moderate

TLDR

An experimental, early-stage programming language by Ruby's creator that treats programs as data pipelines, connecting a source to a destination with a pipe symbol and processing each item concurrently as it flows through.

Mindmap

mindmap
  root((Streem))
    What It Does
      Pipeline-style programs
      Stream processing
      Concurrent execution
    Core Concepts
      Pipe symbol connects steps
      Source to destination
      Functional influences
      Erlang-style concurrency
    Tech Stack
      C compiler
      bison parser
      flex lexer
    Examples
      stdin to stdout passthrough
      FizzBuzz
      Data transforms
    Audience
      Language designers
      Curious developers
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Things people build with this

USE CASE 1

Run the included example programs to understand how data flows through a Streem pipeline step by step.

USE CASE 2

Build the Streem compiler from C source to experiment with the language and study a minimal compiler implementation.

USE CASE 3

Use Streem's pipeline model as a reference when designing your own concurrent or stream-oriented language.

USE CASE 4

Explore stream-oriented concurrency concepts inspired by shell pipes, functional programming, and Erlang.

Tech stack

Cbisonflex

Getting it running

Difficulty · moderate Time to first run · 30min

Requires bison and flex to be installed before building the Streem compiler from C source.

Free to use, modify, and distribute for any purpose, with no restrictions other than keeping the copyright notice.

In plain English

Streem is an experimental programming language created by Yukihiro Matsumoto, the person who designed the Ruby programming language. The README notes that Streem was still in the design phase when last updated and was not yet fully working. The core idea behind Streem is to treat programs as a series of data flows, similar to how shell scripts pipe output from one command to the next. In Streem, you connect a source of data to a destination using the pipe symbol, and the language handles processing each item as it moves through. For example, connecting stdin to stdout creates a simple passthrough program, and you can insert transformation steps in the middle to filter or modify the data as it flows. This pipeline style draws from ideas found in shell scripting, functional programming languages, and Erlang. The language is intended to be concurrent, meaning multiple parts of a pipeline can run at the same time rather than one step waiting for the previous one to finish. The repository includes a compiler written in C that requires the bison and flex tools to build. A small collection of example programs is included in the examples/ folder, covering things like basic input and output, FizzBuzz, and other simple demonstrations of the pipeline model. The project is licensed under the MIT license and contributions are accepted via pull requests. Given the early-stage nature of the project, Streem is mainly of interest to people curious about programming language design and the exploration of stream-oriented concurrency models.

Copy-paste prompts

Prompt 1
I want to build and run the Streem compiler from source on Linux. What dependencies do I need, bison, flex, anything else, and what are the exact build steps?
Prompt 2
Show me how to write a simple Streem program that reads lines from stdin, filters out blank lines, and writes results to stdout using the pipe operator.
Prompt 3
Walk me through the FizzBuzz example in Streem's examples/ folder and explain how the pipeline model handles the conditional logic.
Prompt 4
I'm curious about stream-oriented languages. How does Streem's pipe model compare conceptually to Unix shell pipes and Erlang message passing?
Open on GitHub → Explain another repo

← matz on gitmyhub — every repo by this author, as a profile.

Verify against the repo before relying on details.