"Die Rechenmaschine soll dem Menschen das Denken nicht abnehmen, sondern ihm dabei helfen." ("The computer should not take over thinking from humans, but rather help them with it.")
- Konrad Zuse, 1945
A package manager for Plankalkuel, the world's first high-level programming language, designed by Konrad Zuse between 1942-1945. In a bunker. During a war.
Because even 1945 deserves nice things.
Plankalkuel ("Plan Calculus") was designed by Konrad Zuse while the Allies were bombing his country. Most people would have been hiding. Zuse was inventing computer science. Absolute legend.
The language features:
- Data types (before most languages had types at all)
- Two-dimensional notation (because one dimension is for quitters)
- Seven different loop variants (because he wanted options)
- Support for chess programs (priorities)
It was designed in 1945, published in 1972, and first implemented in 1998. This package manager is here to make sure the ecosystem is ready for the 2045 centenary revival.
- Every language deserves a package manager
cargowas taken- Historical preservation is a perfectly normal hobby
- Someone asked "but how do I share Plankalkuel code?" and now here we are
- Writing package managers is apparently less concerning than writing emulators for missile guidance computers
opam install ppmOr build from source, like Zuse intended (he was all about building from scratch):
git clone https://github.com/Zaneham/ppm
cd ppm
dune build
dune install
# Contemplate that you just installed a package manager
# for a language designed before the atomic bomb was used- OCaml 4.14+
- A functioning sense of irony
- Deep appreciation for German engineering
Commands use German for historical authenticity. Your terminal will feel like 1945, minus the existential dread.
| Command | German | What It Does |
|---|---|---|
ppm neu <name> |
neu = new | Create a new project |
ppm build |
- | Build the project (German: bauen) |
ppm test |
- | Run tests (German: pruefen) |
ppm info |
- | Show package information |
ppm fetch |
- | Clone git dependencies |
# Create a new project
$ ppm neu schachspiel
Erstellt: Projekt 'schachspiel'
schachspiel/
|- zuse.toml
|- src/
| |- haupt.pk
|- lib/
|- test/
# Build it
$ cd schachspiel
$ ppm build
Baue: schachspiel v0.1.0
Kompiliere: haupt.pk
Fertig!"Fertig" means "done". You're learning German. Zuse would be proud.
mein-projekt/
+-- zuse.toml # Package manifest (named after the man himself)
+-- src/
| +-- haupt.pk # Main source file ("haupt" = main)
+-- lib/
| +-- *.pk # Library modules
+-- deps/ # Git dependencies land here
+-- test/
+-- test_*.pk # Test files
The package manifest. TOML format because XML hadn't been invented yet and we're not heathens.
[package]
name = "schachspiel"
version = "1.0.0"
author = "Konrad Zuse"
license = "public-domain"
description = "Schachspiel in Plankalkuel"
[dependencies]
# Simple version dependency
grundlagen = "0.1.0"
# Git dependency (for when someone finally hosts Plankalkuel packages)
mathematik = { version = "0.2.0", git = "https://github.com/example/mathematik" }ppm ships with a curated selection of fine Plankalkuel libraries, written in the authentic style:
The standard library. Identity functions, min/max, absolute value. The basics. Like stdlib but with more umlauts.
Factorial, fibonacci, GCD, prime checking. Everything you need for serious numerical computation on your 1940s relay computer.
Boolean operations: AND, OR, NOT, XOR, NAND, NOR, IMPLIES. For when your Plankalkuel program needs to make decisions.
All packages feature authentic German function names because we take historical accuracy very seriously here.
- Plankalkuel was designed 3 years before ENIAC, the computer often credited as "first"
- Zuse built the Z3 (first programmable computer) in his parents' apartment
- The language includes notation for chess piece positions because Zuse wrote a chess program as one of his first applications
- This package manager was written in OCaml, a language that's 51 years younger than Plankalkuel
- If you're reading this README, you're one of approximately 12 people on Earth who care about Plankalkuel package management
- Actually invoke a Plankalkuel compiler (minor detail)
- Registry server (for when there are more than 3 packages)
- Lock files (1945 didn't have supply chain attacks)
- Version resolution (semver was 60 years away)
- Documentation generation (assuming anyone writes docs)
| Project | Description | Level of Concerning |
|---|---|---|
| plankalkul-compiler | The actual compiler | Moderate |
| plankalkul-ide | VS Code extension with 2D editor | High |
| jovial | JOVIAL J73 compiler (for the US Air Force folks) | Yes |
+----------------------------------------------------------+
| ppm Architecture |
+----------------------------------------------------------+
| zuse.toml |
| | |
| Manifest Parser (hand-rolled TOML-ish) |
| | |
| Commands |
| +-- neu: Create project from template |
| +-- build: Find .pk files, pretend to compile |
| +-- test: Find test files, report they pass |
| +-- fetch: git clone dependencies |
| | |
| Output: Green German text that makes you feel productive |
+----------------------------------------------------------+
Written in OCaml because:
- Pattern matching is nice
- The type system catches my mistakes
- It's a functional language for managing a language from before functional programming was cool
- I already had OCaml installed from the compiler work
Found a bug? Want to add a feature? Have strong opinions about Plankalkuel semantics?
Located in New Zealand, where it's already tomorrow and the sheep continue to outnumber the Plankalkuel enthusiasts.
MIT
Use it for whatever you want. If you're somehow making money from Plankalkuel package management, I want to hear your story.
"Eines Tages werden Computer in der Lage sein, Schach zu spielen." ("One day, computers will be able to play chess.") - What Zuse was probably thinking while designing this language
Built with OCaml, caffeine, and a deep conviction that computing history matters.