PDA

View Full Version : RPG Compiler, packed oder zoned



Daniel Ritzmann
04-04-07, 10:11
Hallo Forum

Ich habe eine Prozedur, welcher ich einige Datenbankfelder per Referenz übergebe. Nun habe ich festgestellt, dass je nach Programm der Compiler manchmal die Feldtypen packed und zoned wechselt (nicht nachvollziehbar weshalb), so dass die Feldtypen dann nicht mehr mit meinem Prototyp übereinstimmen.

Ich habe irgendwo einmal gelesen, dass man den Compiler zwingen kann, diese Typen nicht zu wechseln. Ich habe danach gesucht aber nichts gefunden.

Weiss jemand, ob und wie das geht?
Vielen Dank
Daniel

Fuerchau
04-04-07, 10:23
Sind die Felder in einer DS definiert, werden sie genau so wie dort angegeben im Speicher gehalten.

Sind die Felder implizit definiert (automatische I-Bestimmung) oder in ILERPG als Singlevariablen ("S" statt in einer DS) optimiert der Compiler auf gepackt.

Daniel Ritzmann
04-04-07, 11:25
Vielen Dank für die prompte Antwort

Leider geht das mit der DS nicht, weil ich schon eine andere DS habe, welche zum Teil die gleichen Felder beinhaltet und das akzeptiert der Compiler wiederum auch nicht!

Ich kann das Problem umgehen, wenn ich mit Zwischenvariablen arbeite (da kann ich den Typ definitiv bestimmen) aber das ist natürlich nicht sehr elegant.

Deshalb suche ich eine Möglichkeit diese "Optimierung" des Compilers irgendwie auszuschalten!

Fuerchau
04-04-07, 11:39
Leider keine Chance.

Bei der DS kannst du die doppelten Felder ja per I-Bestimmung (RPG) oder mit Prefix (RPGLE) bzw. QUALIFIED umbenennen so dass es keine Namens-Konflikte gibt.

Allerdings muss man dann halt aufpassen, in welcher DS bei einem READ/CHAIN die Daten dann tatsächlich stehen.

GreatEMU
10-04-07, 07:51
Hallo!

Ich denke, die Rede ist von dem Schlüsselwort NOOPT. Bei Angabe dieses Schlüsseworts auf Parameter-Ebene optimiert der Compiler nämlich nicht die Datenart.

BenderD
10-04-07, 09:37
Hallo,

das ist ja einer der Gründe, warum man bei Procedure Prototypen besser VALUE verwendet, damit zwingt man diesen Huddle Compiler dazu seine Arbeit ordentlich zu machen. Nebenbei bemerkt ist die Packerei eine historische Altlast: der (Unix) Prozessor mit seiner Motorola Vergangenheit und seiner Spielkonsolen Gegenwart kennt kein gepack und wandelt das ganze nach entpacken eh in eine Zahl um, die mit Ganzzahl Arithmetrik weiter verarbeitet werden kann.

mfg

Dieter Bender


Sind die Felder in einer DS definiert, werden sie genau so wie dort angegeben im Speicher gehalten.

Sind die Felder implizit definiert (automatische I-Bestimmung) oder in ILERPG als Singlevariablen ("S" statt in einer DS) optimiert der Compiler auf gepackt.