[NEWSboard IBMi Forum]
Seite 2 von 2 Erste 1 2

Hybrid View

  1. #1
    Registriert seit
    Jan 2009
    Beiträge
    67
    Zitat Zitat von camouflage Beitrag anzeigen
    Hallo Baldur,

    klar, blöd ist nur, dass der dcl-pi praktisch nochmals eine Deklaration bewirkt. Heisst, ich kann mich nicht direkt auf die dcl-ds referenzieren. Noch mehr Spass macht's, wenn die Struktur noch extern referenziert ist. :-)

    Aber passt schon...
    Ich weiss, ich bin schon etwas spät für eine Antwort, aber ich wollte dann doch noch meinen Senf dazugeben:

    Blöd ist das überhaupt nicht, dass die Parameter einer Prozedur eine neue Deklaration der Variable/DS ergeben. Das ist allerdings auch nur der Fall, wenn man die option VALUE an den Parameter anhängt. Denn Parameter werden in erster Linie (wenn man nix anderes macht) per Referenz übergeben und das heisst, dass Änderungen an der DS sich auf die übergebene DS des Aufrufers beziehen.

    Mein Senf,

    Mihael

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    VALUE geht nicht bei externen Aufrufen, da geht dann nur CONST, da die Aufrufart mit Value generell eine andere ist.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Zitat Zitat von Fuerchau Beitrag anzeigen
    VALUE geht nicht bei externen Aufrufen, da geht dann nur CONST, da die Aufrufart mit Value generell eine andere ist.
    VALUE geht sehr wohl bei externen Prozedur/Funktions-Aufrufen!
    Es geht allerdings NICHT bei Programm-Aufrufen!

    Was allerdings bei großen Parametern (Datenstruktur oder nicht) zu berücksichtigen ist, ist, dass bei VALUE immer eine Kopie des Original-Feldes/Datenstruktur übergeben wird, wärend bei CONST nur ein Pointer übergeben wird. Ein Duplikat des Original-Feldes wird nur erzeugt, wenn die Definition unterschiedliche ist. Bei großen Strukturen, kann dieser Unterschied sich bei der Performance bemerkbar machen.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Bei CONST wird ebenso eine Kopie erzeugt, da sonst das Aufgerufene externe Programm, dass ja von CONST nichts weiß (wie bei CLP), sonst Änderungen vornehmen könnte.
    Desweiteren wird durch die Kopie wieder sichergestellt, das die Länge der Übergabe wieder passt, wie schon gesagt. CONST heißt ja gerade, dass der Gerufene nichts ändern darf und das geht nur per Kopie.

    Der wesentliche Unterschied zwischen Value und Const/ByRef ist die Überabe-Art:
    Bei externen CALL's geht es immer per Reference, bei externen/internen CALPRC's geht Value tatsächlich in den Stack (automatic Storage), während ByRef im static Storage liegt.

    Was die Begriffe angeht so sind gebundenen externe Prozeduren dann wie interne Aufrufe zu sehen.

    Und was die Performance angeht, so sind 1000 Calls mit Const sicherlich schneller als eine I-O-Anweisung. Das gehört dann so in die Richtung Microoptimierung (von 1 Stunde Laufzeit 5 Sekunden gespart, die aber noch nicht mal gesichert sein können).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Bei CONST wird ebenso eine Kopie erzeugt, da sonst das Aufgerufene externe Programm, dass ja von CONST nichts weiß (wie bei CLP), sonst Änderungen vornehmen könnte.
    Desweiteren wird durch die Kopie wieder sichergestellt, das die Länge der Übergabe wieder passt, wie schon gesagt. CONST heißt ja gerade, dass der Gerufene nichts ändern darf und das geht nur per Kopie.

    Der wesentliche Unterschied zwischen Value und Const/ByRef ist die Überabe-Art:
    Bei externen CALL's geht es immer per Reference, bei externen/internen CALPRC's geht Value tatsächlich in den Stack (automatic Storage), während ByRef im static Storage liegt.

    Was die Begriffe angeht so sind gebundenen externe Prozeduren dann wie interne Aufrufe zu sehen.

    Und was die Performance angeht, so sind 1000 Calls mit Const sicherlich schneller als eine I-O-Anweisung. Das gehört dann so in die Richtung Microoptimierung (von 1 Stunde Laufzeit 5 Sekunden gespart, die aber noch nicht mal gesichert sein können).
    ... so schön ist die RPG Welt nun mal nicht wirklich. CONST übergibt auch nur per reference und ist damit nur "hopefully const" und kann durchaus unterlaufen werden.

    Was die immer wieder beschworenen Performance Argumente angeht, die für Huddelprogrammierung als Argument ins Feld geführt werden, da lache ich mich schon seit Jahren schlapp, wenn was zu langsam ist, dann liegt das an fehlenden Indexen, krudem Programm Design und verquerer Logik.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Schönes Outfit......
    By BeRe in forum Intern - Hilfe - Feedback - Tests-Forum
    Antworten: 39
    Letzter Beitrag: 27-11-13, 15:49
  2. %dec in free-rpg ??
    By Gimli in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 11-03-03, 10:16
  3. Free RPG??
    By DEVJO in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 05-03-03, 07:18
  4. Free - RPG
    By Gimli in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 04-03-03, 09:47
  5. Free-RPG
    By Gimli in forum IBM i Hauptforum
    Antworten: 6
    Letzter Beitrag: 03-03-03, 10:23

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •