An experimental language for algorithmic problem solving.

Algorithms,
clearly expressed.

Python-inspired syntax. Static types. Data structures that belong in the language. More room to think through the problem.

A little Birdie code.

A map. A loop. A solution.

Keep track of the numbers you have seen. When the missing partner appears, return both indices.

Parameter types are explicit. The map’s key and value types are inferred from how it is used.

Walk through the examples
two-sum.bdProposed syntax
fn twoSum(nums: [int], target: int) [int]:
    seen = map()

    for i, num in nums:
        diff = target - num

        if diff in seen:
            return [seen[diff], i]

        seen[num] = i

    return []

Small language.
Deliberate choices.

Birdie is being designed around familiar algorithm problems. Each feature should make the solution easier to read and reason about.

Familiar, with a few good habits.
Indentation-based blocks, explicit function parameters, and predictable type inference. Readable code with useful static checks.
The right collection, right there.
First-class stacks, maps, and more are part of the design. Express the data structure directly, without import boilerplate.
Understand the work.
A future cost model will count language-level operations, helping you investigate an algorithm beyond wall-clock timing.
Still finding its feet

A work in progress.
An open one.

Birdie is early in development. The examples show proposed syntax; the first interpreter is planned in Go. A browser playground comes later.

See the development direction
Follow along on GitHub