ADR-0002: Programmiersprache & Tooling

Status
Proposed
Datum
2026-05-15
Decider
Malte (mit Claude)
Verwandt
ADR-0004 (Framework), ADR-0009 (Marktdaten), ADR-0010 (Backtesting)
Tags
tooling, foundation

Kontext

mvest braucht eine Programmiersprache und ein Tooling-Setup als Fundament. Die Wahl prägt verfügbare Bibliotheken (Quant, ML, Daten-APIs, Agent-Frameworks), die Geschwindigkeit der Entwicklung und welche Mitwirkenden später leicht beitragen können.

Entscheidungstreiber

Betrachtete Optionen

Option A — Python 3.12, Paket-Manager uv

Python als Single-Language-Stack für Agents, Backend, Daten-Layer und CLI. uv als Paket-Manager und Runner (Astral, Rust-basiert).

Reifstes Quant-Ökosystem.

LLM-/Agent-Libs nativ.

uv ist 10–100× schneller als pip/poetry, deterministische Lockfiles, Drop-in zu pip.

FastAPI + Pydantic decken Backend & Schema-Validation in einer Toolchain ab.

Performance bei rechenintensiven Loops mittelmäßig — gegen Vektorisierung mit numpy/pandas in der Praxis kein Problem.

Type-System weicher als bei TypeScript/Rust.

Option B — TypeScript (Node, Bun oder Deno)

TypeScript als Single-Language-Stack. Frontend würde davon profitieren.

Starkes Typsystem.

Frontend & Backend in einer Sprache, wenn man SPA fährt.

Quant-/Finance-Ökosystem deutlich schwächer (keine echten Äquivalente zu vectorbt, ta-lib, pdfplumber-Qualität).

Agent-Frameworks vorhanden, aber weniger ausgereift als die Python-Pendants.

Datenanalyse in TS ist umständlich gegenüber pandas.

Option C — Polyglot (Python Backend, TypeScript Frontend)

Python für Agents/Daten, TypeScript für ein SPA-Frontend.

„Best of both."

Zwei Toolchains, zwei Build-Pipelines, doppelte Schema-Definitionen (oder OpenAPI-Codegen).

Für einen Single-Dev erhebliche Mehrarbeit, ohne dass v1 davon profitiert.

Server-rendered Frontend (HTMX, geplant in ADR-0013) macht TS überflüssig.

Entscheidung

Wir wählen Option A: Python 3.12 mit uv als Paket- und Run-Manager.

Konkrete Festlegungen:

Konsequenzen

Positiv

Negativ