Plankalkul Interpreter
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
- War: Designed during WWII, destroyed in bombing
- Language barrier: Written in German
- Isolation: Zuse didn't know about Turing or von Neumann
- Politics: Work in Nazi Germany carried stigma
- 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
- Zuse, K. (1948). "Der Plankalkül"
- Rojas, R. et al. (2000). "Plankalkül: The First High-Level Programming Language and its Implementation"
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| plankalkul-0.2.1.tar.gz | 16.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|