-
Arbeitet man heute noch mit Pointern?
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
-
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.
-
was ist ein HLL ?
schon zum zweiten mal stolpere ich heute über den bergiff. kann mir jemand erklären was das sein soll?
-
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 !
-
Zitat von ratinger
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.
-
Lesen muss man können
HLL = High Level Language
Dient zur Abhebung/Abgrenzung der Sprachen zu Maschinen-Sprachen (auch Assembler).
AS/400: MI (MachineInterface)
-
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
Zitat von cicero22
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
-
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.
-
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
Zitat von Fuerchau
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.
-
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).
-
...dazu fällt mir eine andere Frage ein: Ich habe neulich mal versucht, für UIM ein User-Exit-Program mittels Procedurepointer zu registrieren. Um die Adresse meiner Prozedur zu ermitteln, habe ich in RPG die Funktion %PADDR verwendet. Leider wurde dieses Vorhaben jedoch zur Laufzeit vom System abgewiesen, weil es sich dabei nicht um ein Zeiger im TERA-Space handeln soll. Beim RPG-Compiler habe ich im Gegensatz zu C aber nicht die Möglichkeit Storage Model Teraspace auszuzwählen. Heißt dies, dass ich das so in RPG nicht machen kann oder gibts ne andere Lösung?
Gruß, Titus
-
Hallo,
kannst du das Problem mal genauer beschreiben? ich verwende Procedure Pointer zum dynamischen binden seit längerem und habe damit keine Probleme, ich ermittle mir diese zwar per API, aber das sollte mit %PADDR eigentlich auch keine Schwierigkeiten machen.
mfg
Dieter Bender
Zitat von Marsman
...dazu fällt mir eine andere Frage ein: Ich habe neulich mal versucht, für UIM ein User-Exit-Program mittels Procedurepointer zu registrieren. Um die Adresse meiner Prozedur zu ermitteln, habe ich in RPG die Funktion %PADDR verwendet. Leider wurde dieses Vorhaben jedoch zur Laufzeit vom System abgewiesen, weil es sich dabei nicht um ein Zeiger im TERA-Space handeln soll. Beim RPG-Compiler habe ich im Gegensatz zu C aber nicht die Möglichkeit Storage Model Teraspace auszuzwählen. Heißt dies, dass ich das so in RPG nicht machen kann oder gibts ne andere Lösung?
Gruß, Titus
Similar Threads
-
By Unregistriert in forum NEWSboard Server Job
Antworten: 4
Letzter Beitrag: 08-02-05, 03:04
-
By otto-mueller in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 16-02-04, 08:36
-
By AS-Trade in forum NEWSboard Server & Hardware Markt
Antworten: 0
Letzter Beitrag: 08-11-02, 08:37
-
By W.Steiner in forum Archiv NEWSblibs
Antworten: 0
Letzter Beitrag: 24-08-01, 16:58
-
By Burgy Zapp in forum Archiv NEWSblibs
Antworten: 0
Letzter Beitrag: 15-03-01, 01:21
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks