Baldur,

Lies doch mal die Dokumentation!

Es gibt sehr wohl einen Unterschied zwischen CONST und VALUE!

Parameter, die mit CONST übergeben wurden dürfen deshalb nicht geändert werden, weil nie sicher ist, ob der übergebene Pointer auf das Original-Feld oder das Duplikat zeigt.
Sofern keine abweichende Parameter-Defintion festgestellt wird, wird der Pointer auf das Original-Feld übergeben.

Bei VALUE wird IMMER eine Kopie des Original-Feldes erzeugt und dieses an die aufgerufene Prozedur übergeben.

Es wird immer die maximale Länge reserviert, das heißt jedoch nicht, dass diese komplett übergeben oder mit Blanks aufgefüllt wird.
Wie gesagt, die Übergabe erfolgt nur bei VALUE und dann die komplette Länge, was sich bei großen Feldern negativ auf die Performance auswirken kann.
Das bedeutet jedoch nicht, dass der reservierte Speicher mit *Blanks aufgefüllt wird.
Bei Feldern mit variabler Länge, wird die Länge aus den führenden Bytes ermittelt, ob und was im Anschluss daran steht ist irrelevant und wird auch in keiner Form initialisiert.

Ob man Options(*TRIM) verwendet oder nicht kommt auf die Anwendung an. In diesem Fall würde ich die Option setzen, aber nicht kategorisch ablehenen.

Birgitta