Alle Sprachen, in denen eine Aufgabe gestellt werden kann
Eine Aufgabe wird in einer Sprache gestellt, und die Sprache bestimmt, wie der Editor aussieht und wie die Arbeit ausgeführt wird. Es gibt einundzwanzig davon, und keine braucht eine Installation.
Die, die ein Programm sind
Python, Java, Go, C, C++, C#, Haskell, OCaml, R, Ruby, PHP, Rust, Kotlin, Prolog, Node mit JavaScript, Node mit TypeScript und Bash. Jede erhält einen Editor, eine Schaltfläche „Ausführen“ und einen Platz für die Ausgabe, und jede wird tatsächlich kompiliert oder interpretiert: Eine Java-Aufgabe, die sich nicht kompilieren lässt, zeigt Ihnen den Compiler, der das sagt.
Jede davon kann verborgene Tests enthalten, die ein Tab „Tests“ aufnimmt, sowie eine Datendatei, die das Programm liest. Das Framework ist das der jeweiligen Sprache: pytest für Python, JUnit 5 für Java, go test für Go und der Test-Runner von Node für beide Node-Sprachen. Ein Bash-Test ist ein Skript, das besteht, wenn es ohne Fehler endet. Ein C- oder C++-Test ist eine Funktion namens test_ gefolgt von etwas, die besteht, wenn sie zurückkehrt, und scheitert, wenn sie abstürzt oder ein assert fehlschlägt; ein C#-Test ist eine öffentliche statische Methode namens Test gefolgt von etwas, die besteht, solange sie keine Ausnahme auslöst. Ein Haskell-Test ist eine Definition auf oberster Ebene namens test_ gefolgt von etwas, deren Typ IO () oder Bool ist; er besteht, wenn die Aktion zurückkehrt oder der Wert True ist. Ein OCaml-Test ist eine Funktion von unit namens test_ gefolgt von etwas, die besteht, wenn sie zurückkehrt, und ein R-Test ist eine Funktion ohne Argumente namens test_ gefolgt von etwas, die besteht, wenn sie zurückkehrt; mit stopifnot() lässt man sie scheitern. Ein Ruby-Test ist eine Methode auf oberster Ebene namens test_ gefolgt von etwas und ein PHP-Test eine Funktion namens test_ gefolgt von etwas, beide ohne Parameter und bestanden, wenn sie zurückkehren; ein Kotlin-Test ist eine Funktion auf oberster Ebene namens test_ gefolgt von etwas. Ein Rust-Test ist jede mit #[test] markierte Funktion, ausgeführt vom eigenen Test-Harness von Rust, und ein Prolog-Test ist ein Prädikat namens test_ gefolgt von etwas ohne Argumente, das besteht, wenn sein Ziel gelingt. Jeder scheitert, indem er einen Fehler auslöst oder eine Ausnahme wirft.
Eine Web-App in Python, Node, Go, Java und statische Websites aus HTML, CSS und JavaScript kann außerdem aus einem öffentlichen GitHub-Repository unter einer eigenen Adresse bereitgestellt werden, was in diesem Handbuch eine eigene Seite hat.

Was die Programmiersprachen unterscheidet
Pakete stammen aus der Paketdatei des Projekts, ganz oben im Dateibaum und mit „Pakete“ gekennzeichnet: requirements.txt oder pyproject.toml für Python, pom.xml für Java, go.mod für Go und package.json für Node und TypeScript auf Node, mit genau benannten Versionen. Sie werden in einem getrennten Container geholt und der Ausführung schreibgeschützt übergeben, und die Ausführung selbst hat kein Netzwerk. Eine neue Aufgabe öffnet sich mit einem kleinen Beispiel, das Sie ersetzen. Lernende sehen die Datei immer und können sie nur ändern, wenn die Aufgabe es erlaubt. Bash, SQL, C, C++, C#, Haskell, OCaml, R, Ruby, PHP, Rust, Kotlin und Prolog haben keine Paketdatei, da es kein Netzwerk gibt, das ein Paketmanager erreichen könnte.
Um eine Paketdatei zu verwenden, die Sie schon haben, laden Sie sie ganz oben im Baum hoch oder legen dort eine Datei dieses Namens an: Sie wird zur Paketliste der Aufgabe statt zu einer gewöhnlichen Datei. Eine Aufgabe hat eine, um also eine Python-Aufgabe von requirements.txt auf pyproject.toml umzustellen, benennen Sie die Datei um. Eine Java-pom.xml wird auf ihre Eigenschaften, ihr Dependency Management, ihr Parent und ihre BOM-Importe sowie ihre Scopes hin gelesen, wobei ein Paket mit Test-Scope nur für die Tests da ist, und nur Maven Central ist erreichbar. Eine Java-Aufgabe aus der Zeit vor der pom.xml behält ihre ältere dependencies.xml, die weiterhin funktioniert; fügen Sie eine pom dort ein oder benennen Sie sie in pom.xml um, um zu wechseln. Die Paketdateien haben in diesem Handbuch eine eigene Seite, mit dem, was jede nennen darf, und wie die Pakete installiert werden.
Die Editoren sind nicht gleich schlau, und es ist besser, das vor der Wahl zu wissen. Python hat Fehlerprüfung mit roten Wellenlinien, Vervollständigung, Hover-Hilfe und Funktionssignaturen, alles durch Lesen des Codes ermittelt und ohne ihn je auszuführen. JavaScript und TypeScript auf Node unterstreichen Syntaxfehler schon beim Tippen, während ein TypeScript-Typfehler erscheint, wenn Sie „Ausführen“ drücken, weil das der Compiler entscheidet. Java, Go, C, C++, C#, OCaml, R, Ruby, PHP, Rust, Kotlin und Bash haben Syntaxhervorhebung und nichts Klügeres, und Haskell und Prolog werden als einfacher Text angezeigt, da der Editor für beide keinen Modus hat.
Einige Einzelheiten, nach denen Lehrkräfte fragen. In Java heißt die öffentliche Klasse immer Main, und die Vorlage zeigt das. Jede Go-Datei ist package main. Bash ist echte bash, daher funktionieren Arrays und [[ ]]. Die Standardeingabe ist ein Feld unter dem Code, und weil read -p ohne Terminal nichts anzeigt, gibt die Bash-Vorlage zuerst ihre eigene Eingabeaufforderung aus. C und C++ werden als C17 und C++20 mit eingeschalteten Warnungen kompiliert, und eine Warnung wird angezeigt, hält das Programm aber nie vom Laufen ab. Ein C#-Programm kann mit einer Main-Methode oder mit Anweisungen auf oberster Ebene geschrieben werden. Die Tests werden an das Ende des Programms angehängt, und das Programm wird geladen, um sie auszuführen, daher lesen die Vorlagen ihre Eingabe mit einem Ersatz für das Dateiende. OCaml hat keinen Main-Guard, sodass ein let () = auf oberster Ebene läuft, wenn die Tests laufen. Ein R-Programm schützt sein main mit if (sys.nframe() == 0) main(), wie es die Vorlage tut, was falsch ist, wenn die Tests die Datei laden. In R liest readline() in einem Skript nicht von der Standardeingabe: Verwenden Sie readLines(file("stdin")). Eine Haskell-Testdatei kann eigene Importe enthalten. Ruby- und PHP-Programme schützen main mit if __FILE__ == $0 und einem realpath-Vergleich, wie ihre Vorlagen es tun, und ein Prolog-Programm mit :- initialization(main, main), sodass keines während der Tests läuft. Ein Rust-Test, der in einer Schleife hängt, wird nur durch das Zeitlimit der gesamten Ausführung gestoppt. C#, Haskell, OCaml, R, Ruby, PHP, Rust, Kotlin und Prolog laufen auf einer dedizierten Maschine und nicht auf jeder, daher meldet eine Ausführung, wenn diese Maschine ausgefallen ist, das, statt zu starten, und ein erneuter Versuch etwas später funktioniert.
Ein Programm, das Dateien schreibt, einen Bericht oder ein Diagramm, bekommt diese unter der Ausgabe angeboten, sobald die Ausführung endet, insgesamt bis zu fünf Dateien. Textdateien dürfen bis zu 64 KB groß sein, und ein Bild als PNG, JPEG oder WebP bis zu 1 MB wird ebenfalls unter der Ausgabe angezeigt, sodass ein mit matplotlib gezeichnetes Diagramm einfach erscheint. Was das Programm geschrieben hat, wird nach seinem Inhalt beurteilt und nicht nach seinem Namen, SVG wird nie als Bild angezeigt, und alles, was weggelassen wurde, wird mit dem Grund aufgeführt. Die Links gelten eine halbe Stunde und laden immer herunter, ohne sich im Tab zu öffnen.
Die, die mehr als eine Datei sind
Eine Webseite ist HTML, CSS und JavaScript in drei Bereichen mit einer Live-Vorschau. Eine SQL-Aufgabe ist eine Abfrage und die Datenbank, gegen die sie läuft, in zwei Tabs. Für eine echte Shell stellen Sie ein Container-Lab oder ein VM-Lab.
Jede davon hat in diesem Handbuch eine eigene Seite, denn was eine Lehrkraft einstellt und was Lernende tun, ist jeweils verschieden.
Die, die überhaupt kein Code sind
Eine schriftliche Arbeit, ein Quiz und zwei Arten von Diagrammen. Sie werden alle genauso gestellt wie ein Programm und anders bewertet.
Häufige Fragen
- Kann ich in einem Modul Sprachen mischen?
- Ja. Ein Modul enthält alle Aufgaben, die Sie hineinlegen, in beliebiger Sprache.
- Welche Python-Version?
- Python 3.13, im Editor selbst angezeigt, damit niemand fragen muss.
- Können Lernende Pakete installieren?
- Bei jeder Aufgabe mit einer Paketdatei, das ist jede Programmiersprache außer Bash, C, C++, C#, Haskell, OCaml, R, Ruby, PHP, Rust, Kotlin und Prolog, sofern Sie es erlaubt haben. Lernende können die Liste immer sehen; die Aufgabe entscheidet, ob sie sie ändern können.