Skip to main content

Plankalkul Interpreter

PyPI Language Historical License

The first high-level programming language, running again.

Plankalkul ("Plan Calculus") was designed by Konrad Zuse between 1942-1945. Building on the pioneering work of Rojas et al. (FU Berlin, 2000) who created the first implementation, this package provides an accessible Python interface.

Installation

pip install plankalkul

Quick Start

from plankalkul import run

# Calculate factorial
result = run('''
    P1 factorial (V0[:8.0]) => R0[:8.0]
        1 => R0[:8.0]
        1 => Z0[:8.0]
        W [ Z0[:8.0] * R0[:8.0] => R0[:8.0]
            Z0[:8.0] + 1 => Z0[:8.0] ] (Z0[:8.0] <= V0[:8.0])
    END
''', 5)

print(result['R0'])  # 120

Or run from command line:

plankalkul  # Runs demo programs

Why This Matters

Feature Plankalkul (1945) First "Modern" Language
Data structures Yes C (1972): 27 years later
User-defined types Yes C (1972): 27 years later
Assertions Yes Eiffel (1986): 41 years later
Structured control Yes ALGOL (1960): 15 years later

The first language had features that took decades to "reinvent".

Language Syntax

Program Structure

P<number> <name> (<parameters>) => <returns>
    <statements>
END

Variables

Prefix Meaning
V0, V1... Input parameters
Z0, Z1... Local/intermediate variables
R0, R1... Return values

Type Annotations

[:8.0]      ; 8-bit integer
[:1.0]      ; 1-bit (boolean)
[:16.0]     ; 16-bit integer
[:n×m.0]    ; n×m array

Operations

Operation Symbol ASCII Alternative
Assignment → =>
Multiply × *
Divide : /
Not equal ≠ !=
Less/equal ≤ <=
Greater/equal ≥ >=
Logical AND ∧ &
Logical OR ∨ |
Logical NOT ¬ !

Control Flow

Conditional:

(condition) => statement

While loop:

W [ statements ] (condition)

Counted loop (W1):

W1 (count) => counter_var { statements }

The W1 loop iterates from 0 to count-1, storing the current iteration in counter_var. This syntax was reconstructed from academic implementations based on Zuse's manuscripts.

Example Programs

Maximum of Two Numbers (Zuse's Original)

P1 max (V0[:8.0], V1[:8.0]) => R0[:8.0]
    V0[:8.0] => R0[:8.0]
    (R0[:8.0] < V1[:8.0]) => V1[:8.0] => R0[:8.0]
END

Factorial

P2 factorial (V0[:8.0]) => R0[:8.0]
    1 => R0[:8.0]
    1 => Z0[:8.0]
    W [ Z0[:8.0] * R0[:8.0] => R0[:8.0]
        Z0[:8.0] + 1 => Z0[:8.0] ] (Z0[:8.0] <= V0[:8.0])
END

Sum of 1 to N

P3 sum (V0[:8.0]) => R0[:8.0]
    0 => R0[:8.0]
    1 => Z0[:8.0]
    W [ R0[:8.0] + Z0[:8.0] => R0[:8.0]
        Z0[:8.0] + 1 => Z0[:8.0] ] (Z0[:8.0] <= V0[:8.0])
END

Factorial using W1 (Advanced Syntax)

P Factorial(V0[:8.0]) => R0[:8.0]
    1 => R0[:8.0]
    W1 (V0[:8.0]) => Z0[:8.0] {
        R0[:8.0] * (Z0[:8.0] + 1) => R0[:8.0]
    }
END

This advanced syntax comes from the Hovestar implementation, reconstructed from Zuse's manuscripts.

Historical Context

Timeline

Year Event
1936 Zuse builds Z1 (mechanical computer)
1941 Z3 completed (first programmable computer)
1942-45 Plankalkül designed
1943 Z3 destroyed in Allied bombing
1945 WWII ends, Zuse flees with Z4
1948 Zuse writes manuscript "Der Plankalkül"
1972 Plankalkül published
2000 First implementation (FU Berlin)
2025 This implementation (The Ian Index)

Why It Was Forgotten

  1. War: Designed during WWII, destroyed in bombing
  2. Language barrier: Written in German
  3. Isolation: Zuse didn't know about Turing or von Neumann
  4. Politics: Work in Nazi Germany carried stigma
  5. Commercial failure: No resources to implement

What Zuse Got Right

Plankalkul had features that took decades to "reinvent":

  • Data structures (like C structs): reinvented 27 years later
  • User-defined types: reinvented 27 years later
  • Assertions: reinvented 41 years later
  • Strong typing: reinvented 25 years later
  • Structured control flow: reinvented 15 years later

Technical Details

Architecture

Source Code → Lexer → Tokens → Parser → AST → Interpreter → Result

Implementation

  • Lexer: Handles both Unicode (→, ×, ≤) and ASCII (=>, *, <=) notation
  • Parser: Recursive descent parser
  • Interpreter: Tree-walking interpreter with variable scoping
  • Type System: Basic type checking (integers, booleans, arrays)

License

MIT License — completing Zuse's public domain vision.

Related Projects

🎮 Zuse Chess (1942) — Play Konrad Zuse's chess algorithm in your browser. The first chess program ever written, reconstructed from 78 pages of original manuscripts.

References

  1. Zuse, K. (1948). "Der Plankalkül"
  2. Rojas, R. et al. (2000). "Plankalkül: The First High-Level Programming Language and its Implementation"
  3. Bauer, F.L. & Wössner, H. (1972). "The 'Plankalkül' of Konrad Zuse: A Forerunner of Today's Programming Languages"

"The significance of Plankalkül lies not in what it became, but in what it could have been."

Konrad Zuse deserves to be remembered.

Metadata

Release files for plankalkul 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for plankalkul 0.2.1
File Size Uploaded
plankalkul-0.2.1.tar.gz 16.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for plankalkul 0.2.1
File Interpreter ABI Platform
plankalkul-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 30.9 kB

Release files / plankalkul-0.2.1.tar.gz

Download URL plankalkul-0.2.1.tar.gz
Size 16.3 kB
Tags Source
SHA-256 checksum
How to use checksums
6891f473f26d8bbf91f5402f70ed3e04941c33bc329064530b0123b6016747a5
BLAKE2b-256 checksum
How to use checksums
db870c1a9d3a2142fd684ff1602502b32e3d64fee0cdadf5d7ce05e287790b37
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release files / plankalkul-0.2.1-py3-none-any.whl

Download URL plankalkul-0.2.1-py3-none-any.whl
Size 14.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
970832bcb84f3e884789f450861d7cdd8622cb4674d1fa89f8ad222bf65ad2bc
BLAKE2b-256 checksum
How to use checksums
85fea76e9cbfdb32e0ecab57d5a78660da8ed6903a528df87872ffa8b7c45904
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page