====== Neu in Version 2.2 ======
Version 2.2 entstand im Zeitraum Juni 2025 bis August 2025. Neu hinzugekommen sind folgende Features:
* Vor dem Starten einer Prüfung können Schüler markiert werden, die Zeitverlängerung bekommen und solche, die abwesend sind. Näheres dazu [[api:ide_manual:start#pruefungsmodus_830_min|in diesem kurzen Video.]]
* Viele Funktionen wurden für die Nutzung mit Tablets (insbes. iPads) optimiert.
* In der Dateiliste können jetzt auch Ordner erstellt werden.
* Dateien und Workspaces können jetzt per Drag and Drop benutzerdefiniert sortiert werden
* Löschen ganzer Ordner in der Liste der Workspaces ist jetzt möglich.
* Hinzugekommen ist ein Einstellungs-Modul, in dem Einstellungen je Benutzer, Klasse und Schule geändert werden können (**Datei->Einstellungen**). Die Menge der Einstellungsmöglichkeiten wird ständig erweitert. Derzeit ist Folgendes einstellbar:
* Programmhilfen beim Hovern über Bezeichnern
* Automatisches Schließen von Klammern/Anführungszeichen
* Automatisches Ergänzen von fehlenden Strichpunkten
* Darstellung von Typen im Klassendiagramm wahlweise "Pascal-Style", z.B. ''name: String'' oder "Java-Style", z.B. ''String name''
* Hintergrund exportierter Klassendiagramme wahlweise weiß oder durchsichtig
* Sortierung des Dateibaums
* Sortierung des Workspacebaums
* Das Klassendiagramm kann wahlweise farbig oder schwarz-weiß gezeichnet werden.
* Das Klassendiagramm kann als png-Datei exportiert werden.
* Der Import von Workspaces (Datei -> Workspace importieren) wurde deutlich verbessert.
* Methode World.getAllShapes()
* Method-Chaining bei Methoden von Shape und FilledShape (z.B. ''Circle c = new Circle(100, 200, 50).setFillColor(red).setBorderColor(green)'')
* Integration des Klassendiagramm-Features in die Embedded-Version mit Serialisierung der User-Anpassungen in der IndexedDB des Browsers
* Buttons in der Embedded-IDE, die es ermöglichen, die ganze embedded IDE oder auch nur den Ausgabebereich auf Browser-Größe zu erweitern und wieder zu verkleinern.
* Button für "Goto Cursor" im Debug-Modus
* Automatisches Erstellen von Gettern und Settern durch Quickfix, wenn sich der Cursor in der Zeile der Deklaration eines Attributes befindet
* Exportfunktion, die alle Workspaces eines Nutzers in einer einzigen Datei sichert (z.B. im json-Format) -> Jetzt unter "Datei -> Alle Workspaces exportieren"
* Wenn im Backend durch Lehrkräfte Klassen angelegt/Schüler hinzugefügt oder oder verändert werden, wirken sich diese Änderungen im Frontend sofort aus.
==== Meldung von Fehlern ====
Falls Sie Fehler finden würde ich mich freuen, wenn Sie sie mir melden könnten. Sie haben zwei Möglichkeiten:
* Falls Sie einen GitHub-Account haben, können Sie [[https://github.com/martin-pabst/Online-IDE-new-compiler/tree/main|im Repository ein issue erstellen.]] Bitte fügen sie ggf. den exportierten Online-IDE-Workspace hinzu.
* Innerhalb der Online-IDE gibt es den Menüpunkt Hilfe -> Fehler melden.
Über jede Art von Unterstützung würde ich mich freuen!
====== Neu in Version 2.0 ======
Um den Compiler der Online-IDE zukunftsfähig zu halten und fortgeschrittene Sprachelemente von Java zu unterstützen wurde er im Zeitraum August 2023 - Dezember 2024 nochmals von Grund auf neu programmiert. Da sich dabei grundlegende Datenstrukturen und Schnittstellen stark verändert haben, musste auch die Laufzeitbibliothek komplett überarbeitet werden. Die neue Version 2.0 der Online-IDE ist inzwischen schon sehr stabil. Seit Februar 2025 wird sie produktiv verwendet.
===== Unterschiede zum bisherigen Compiler/neue Features =====
* Deutlich **bessere Performance** der ausgeführten Programme (zwischen 3 und 50-mal, je nach Umfang der Verwendung der Grafikbibliothek)
* Nebenläufige Ausführung mehrerer Threads ([[api:documentation:threads:start|Dokumentation hier]], [[https://www.learnj.de/1213/doku.php?id=parallelism:start|Skript für Q12 hier]])
* die **Java-Klassen Thread, Runnable, Semaphor**
* **synchronized methods** und **synchronized blocks**
* **locking**, **wait**, **notify** usw.
* **Test-Runner** zur Ausführung von **JUnit-Tests** [[api:documentation:junit:start|(Dokumentation hier)]]
* Die Klasse **Assertions** (assert-Methoden auch im globalen Namensraum verfügbar)
* **generic methods**
* **anonymous inner classes**, **named inner classes**
* **lambda functions**
* Umfangreichere Abdeckung des **Java Collections-Frameworks**
* **Exceptions** (''try...catch...finally'')
* **Methodendeklarationen im Hauptprogramm** \\ (für die "spätbeginnende Informatik" in Bayern, [[unterschiede_zu_java:start#hauptprogramm|Dokumentation siehe hier]])
* Grundlegende **Überarbeitung des Debuggers**
* Klassenbibliothek fürs Zentralabitur in Nordrhein-Westfalen
* Klassen für **3D-Grafik** [[api:documentation:grafik3d:start|(Dokumentation siehe hier)]]
===== Technische Details =====
=== Liste von Javascript-Funktionen statt PCode ===
Der neue Compiler erzeugt nicht mehr PCode, sondern eine Liste von Javascript-Funktionen, die der Browser direkt ausführen kann. Dadurch ist kein Interpreter im eigentlichen Sinn mehr nötig, so dass die Ausführung der Java-Programme deutlich schneller ist als beim alten Compiler.
=== Speicherung von Objekten/primitiven Werten ===
Die Speicherung der Java-Objekte und der primitiven Datentypen wurde überarbeitet, so dass jetzt nur noch ein dünner Layer über den entsprechenden Javascript-Datenstrukturen nötig ist und weniger Speicher verbraucht wird.
=== Scheduler ===
Das Laufzeitsystem der Online-IDE verfügt jetzt über einen Scheduler, der mehrere Threads quasi gleichzeitig ausführen kann (preemtive multitasking).
=== Import der Javascript-Bibliotheken ===
Die Javascript-Bibliotheken werden ab jetzt alle als ECMAScript 6-Module nachgeladen. Dies erleichtert das Einbinden der Embedded-IDE in bestehende Seiten.
=== Kapselung der css-Klassen ===
Die Online-IDE hatte bisher viele css-Klassen als Bezeichner im globalen Namensraum, insbesondere auch in der Embedded-Variante. Diese wurden jetzt auf ein Minimum reduziert, daher gibt es ab jetzt weniger Nebeneffekte, wenn die Embedded-IDE in bestehende Seiten eingebunden wird.
=== Unit-Tests zur Qualitätssicherung des Compilers ===
Ein großer Teil der Funktionalität des neuen Compilers wird jetzt durch automatisierte Unit-Tests qualitätsgesichert, [[https://github.com/martin-pabst/Online-IDE-new-compiler/tree/main/src/test/java| siehe hier]].