PDA

View Full Version : Arbeitet man heute noch mit Pointern?



Seiten : [1] 2

cicero22
20-10-06, 12:22
Hallo *All!

Bin hier über ein paar Sourcen gestossen, in denen es so üblich ist mit Hilfe von Pointern zu lesen, chainen, löschen und alles was man so braucht. D.h. die Pointer stecken in *MODULE und werden vom Hauptprogramm dann aufgerufen..... (DS usw...)

Macht man heute sowas noch? Wo liegen die Vorteile?
Ändert sich eine physische, muss ich doch ohnehin alle Programme neu umwandeln, oder?

Danke
Dirk

Fuerchau
20-10-06, 12:42
Da stelle doch mal ein Beispiel hier rein.

Die HLL-Compiler (RPG/LE, COBOL usw.) arbeiten immer mit Pointern, da eine Variablenübergabe nicht anders funktioniert (Ausnahme sog. Basistypen wie int, double, char).
Der Programmierer muss normalerweise darüber nichts wissen, da er ja Variablen definiert.

CALL 'XXX'
PARM YYYY

ist ja nichts anderes als die Adressübergabe von YYYY an Programm XXX.

*ENTRY PLIST
PARM ZZZZ

ist nichts anderes, als das Variable ZZZZ auf der Adresse des rufenden Programmes basiert.

ratinger
20-10-06, 13:04
schon zum zweiten mal stolpere ich heute über den bergiff. kann mir jemand erklären was das sein soll?

Fuerchau
20-10-06, 13:29
Pointer (engl.) => Zeiger (Deutsch)

Ein Pointer ist eine Adresse, die auf eine Variable verweist.
ILERPG:

D MyPointer *
D MyDs DS based(MyPointer)
D MyDs2 DS

C MyPointer = %addr(MyDs2)

und schwupps, verweist MyDs auf MyDs2 !

kuempi von stein
20-10-06, 15:38
schon zum zweiten mal stolpere ich heute über den bergiff. kann mir jemand erklären was das sein soll?

dazu reicht es theoretisch die Wikipedia zu bemühen:
http://de.wikipedia.org/wiki/Hll

eben jede "bessere" Programmiersprache wie Fuerchau schon sagte.

Gruss

k.

Fuerchau
21-10-06, 07:21
Lesen muss man können ;)

HLL = High Level Language

Dient zur Abhebung/Abgrenzung der Sprachen zu Maschinen-Sprachen (auch Assembler).
AS/400: MI (MachineInterface)

BenderD
24-10-06, 09:33
Hallo,

die meisten Sachen mit explizit deklarierten Pointern gehen auch ohne und sind dann besser lesbar und sicherer, in diesen Fällen sollte man besser drauf verzichten.
Es gibt bei einigen rudimentären Programmiersprachen (wie zum Beispiel RPG), oder rudimentären Ablaufumgebungen (wie zum Beispiel ILE) hin und wieder Dinge, die ohne Pointer nicht gehen, wenn man das dann braucht, dann nimmt man eben Pointer.
Grundsätzlich vorsichtig sollte man mit dem rechnen mit Pointern sein, wenn man sich da im Programm verfliegt, geht es so richtig in den Wald - bei der AS400 kommt noch dazu, dass ein Pointer nicht wirklich weiß, worauf er da zeigt, selbige also untypisiert sind.

mfg

Dieter Bender


Hallo *All!

Bin hier über ein paar Sourcen gestossen, in denen es so üblich ist mit Hilfe von Pointern zu lesen, chainen, löschen und alles was man so braucht. D.h. die Pointer stecken in *MODULE und werden vom Hauptprogramm dann aufgerufen..... (DS usw...)

Macht man heute sowas noch? Wo liegen die Vorteile?
Ändert sich eine physische, muss ich doch ohnehin alle Programme neu umwandeln, oder?

Danke
Dirk

Fuerchau
24-10-06, 10:14
Das gilt (ausser bei Java) allerdings für alle anderen Programmiersprachen auch, Pointer sind einfach nur Adressen.

Allerdings gibt's auf der AS/400 doch ein paar kleine Pointer-Unterschiede:
System-Pointer => verweisen immer nur Auf Objekte
Space-Pointer => verweisen auf Datenbereiche
Data-Pointer => sind eigentlich keine Pointer sondern verweisen auf einen Descriptor, der wiederum die Ausprägung der Variablen (Typ und Länge) enthält.
Der Data-Pointer entspricht eigentlich dem, von Dieter gefordeten, typisierten Pointer, kann leider ausschließlich in MI verwendet werden.

BenderD
24-10-06, 10:38
Hallo,

Java hat das nur konsequent abgeklemmt (und bietet dafür reflection an, womit man (fast) denselben Unfug anrichten kann...).

leichten Widerspruch bei den System Pointern, eigentlich variiert nur die Länge und selbiger könnte auch ein Procedure Pointer sein...

mfg

Dieter Bender


Das gilt (ausser bei Java) allerdings für alle anderen Programmiersprachen auch, Pointer sind einfach nur Adressen.

Allerdings gibt's auf der AS/400 doch ein paar kleine Pointer-Unterschiede:
System-Pointer => verweisen immer nur Auf Objekte
Space-Pointer => verweisen auf Datenbereiche
Data-Pointer => sind eigentlich keine Pointer sondern verweisen auf einen Descriptor, der wiederum die Ausprägung der Variablen (Typ und Länge) enthält.
Der Data-Pointer entspricht eigentlich dem, von Dieter gefordeten, typisierten Pointer, kann leider ausschließlich in MI verwendet werden.

Fuerchau
24-10-06, 11:20
Eigentlich sind (bis auf TeraSpace 8Byte/64-Bit) doch alle Pointer 128-Bit (also 16-Byte) groß.

Intern wird der Typ und die Berechtigung noch woanders gespeichert, da kommt man tatsächlich nicht mehr dran.
Wenn man einen Pointer nicht mit den Pointer-Befehlen modifiziert, zerstört man die Eigenschaft als Pointer.
Daher kann man niemals aus einem SpacePointer einen Prozedur-/Systempointer oder umgekehrt machen.

Die Funktion GetSpacePointerFromSystemPointer liefert nur die Adresse eines UsrSpc, der am Objekt hängt und nicht das Objekt selber. Hat das Objekt keinen UsrSpc gibts auch keine Adresse.
(nur so am Rande bemerkt).