statische Variable

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Re: statische Variable

Beitragvon mse » 3. Jun 2018, 07:54 Re: statische Variable

Mit allen diesen nicht wirklich notwendigen Zusätzen wird Free Pascal in ein aufgeblähtes Monster verwandelt welches kaum jemand noch wirklich 100%-ig beherrscht wie bei C++. Ich würde sie nicht verwenden...
mse
 
Beiträge: 1986
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon haderlump » 3. Jun 2018, 08:01 Re: statische Variable

Danke für die umfangreichen Antworten.
Stil hin oder her. Ich bin kein Freund von sturen Dogmen. Wenn es mir Vorteile bringt, benutze ich das.
Ich verwende auch manchmal (schlagt mich nicht !) den goto Befehl.
Ich programmiere auch viel in Assember, un da braucht man entsprechendes oft, und das ist mir auch vertraut.
Die Eigenschaft globale Variable mit nur lokalem Zugiff kann schon Vorteile bringen.

Also Danke nochmal, ich kann das schon brauchen,
Gruß Fritz
haderlump
 
Beiträge: 101
Registriert: 18. Jan 2013, 09:29
OS, Lazarus, FPC: Widows XP, Lazarus 1.6 | 
CPU-Target: Celeron
Nach oben

Beitragvon mse » 3. Jun 2018, 08:09 Re: statische Variable

haderlump hat geschrieben:Danke für die umfangreichen Antworten.
Stil hin oder her. Ich bin kein Freund von sturen Dogmen. Wenn es mir Vorteile bringt, benutze ich das.
Ich verwende auch manchmal (schlagt mich nicht !) den goto Befehl.

Ich auch. "goto" hat viele sinnvolle Anwendungen. Ich verwende auch häufig "with", hier würde ich mir aber eine "sichere" erweiterte Version wünschen.
Für die Speicherung eines Zustandes der in einer oder verschiedenen Prozeduren oder oder Klassen benötigt wird bietet sich auch die Verwendung einer globalen Record-Variablen an.
mse
 
Beiträge: 1986
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 3. Jun 2018, 15:59 Re: statische Variable

mse hat geschrieben:Mit allen diesen nicht wirklich notwendigen Zusätzen wird Free Pascal in ein aufgeblähtes Monster verwandelt welches kaum jemand noch wirklich 100%-ig beherrscht wie bei C++. Ich würde sie nicht verwenden...

Dann würdest du hier lieber die Deklaration von "b" verwenden ?
Code: Alles auswählen
type
  MyClass=class
    var
      a:TBitmap; static;
    const
      b: TBitmap = nil;
  end;

Aber es gibt vieles, das man nicht identifizieren kann, zB, folgender Code:

Code: Alles auswählen
// FileUtil
function FileIsReadable(const AFilename: string): boolean; inline; deprecated 'Use the function in LazFileUtils unit';
 
// controlconst.inc
const
  ...
 CM_GOTFOCUS             = CM_BASE + 2 unimplemented;   
 
// Forms
    property DesignTimeDPI: Integer read FDesignTimePPI write SetDesignTimePPI stored False; deprecated {$IFNDEF FPDOC}'Use DesignTimePPI instead. DesignTimeDPI will be removed in 1.8'{$ENDIF};
 
mathh.inc
    function Sin(d : ValReal) : ValReal;[internproc:fpc_in_sin_real];
 
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 3. Jun 2018, 16:21 Re: statische Variable

Mathias hat geschrieben:Dann würdest du hier lieber die Deklaration von "b" verwenden ?

Ich würde in einer "class" Typendefinition weder "type" noch "var" noch "const" verwenden. "class" soll schlank bleiben.
Nur lokal benötigte Definitionen kann man auch im "implementation" Teil definieren, nur für einzelne Prozeduren und Methoden benötigte globale Variablen direkt vor der Prozedur-Implementation oder in schon erwähnten Status-Records.
Auch komplizierte {$include} Konstrukte sollte man meiden. Ich verstehe, dass in der Free Pascal RTL manchmal nichts anderes übrig bleibt, als {$include} zu verwenden.
mse
 
Beiträge: 1986
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 3. Jun 2018, 16:29 Re: statische Variable

Nur lokal benötigte Definitionen kann man auch im "implementation" Teil definieren,
Stimmt, dies kann man alternativ machen, aber ich habe es lieber in der Classe zu dem es gehört.

Das ist eines der Vorteile von Java, da ist man gezwungen, dies sauber zu machen.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 3. Jun 2018, 17:21 Re: statische Variable

mse hat geschrieben:Mit allen diesen nicht wirklich notwendigen Zusätzen wird Free Pascal in ein aufgeblähtes Monster verwandelt welches kaum jemand noch wirklich 100%-ig beherrscht wie bei C++.


+1. Leider sind wir schon auf dem besten Weg da hin.
wp_xyz
 
Beiträge: 2647
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 3. Jun 2018, 17:28 Re: statische Variable

Dies ist wohl Geschmackssache, es gibt viele Neuerungen, welche einem das Coden einfacher machen.

ZB. das hie mit den Array Operatoren viewtopic.php?f=10&t=11609&p=103736&hilit=array#p103736

Ein Features, welches ich vermisse, wäre ein Includes-String.
So etwas auf dieser Art:
Code: Alles auswählen
const
  ShaderCode : String = {$Include fragment.glsl}

Für die OpenGL-Programmierung wäre dies eine grosse Erleichterung.

Jetzt muss man dies mühsam und schlecht leserlich so machen:
Code: Alles auswählen
const
  Vert_Shader =
    '#version 330' + LineEnding +
 
    'layout (location = 0) in vec3 inPos;' + LineEnding +
    'layout (location = 1) in vec3 inNormal;' + LineEnding +
    ....


Gut, man könnte Resourcen nehmen, aber dies ist auch so ein geflicke.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon m.fuchs » 3. Jun 2018, 18:05 Re: statische Variable

Mathias hat geschrieben:Ein Features, welches ich vermisse, wäre ein Includes-String.
So etwas auf dieser Art:
Code: Alles auswählen
const
  ShaderCode : String = {$Include fragment.glsl}


Pack einfach die ganze Stringdefinition in ein Include.

Mathias hat geschrieben:Gut, man könnte Resourcen nehmen, aber dies ist auch so ein geflicke.

Genau dafür sind die Ressourcen ja da.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1970
Registriert: 22. Sep 2006, 18:32
Wohnort: Berlin
OS, Lazarus, FPC: Winux (L 1.8.4, FPC 3.0.4) | 
CPU-Target: x86, x64, arm
Nach oben

Beitragvon Mathias » 3. Jun 2018, 18:57 Re: statische Variable

Pack einfach die ganze Stringdefinition in ein Include.

Aber dort hat man immer noch die ' +, und das LineEnding.

Der Shadercode sollte übersichtlich editierbar sein.

Genau dafür sind die Ressourcen ja da.

Was macht man, wen die ganzen OpenGL Units in einer Package sind, oder gehen die Resourcen unterdessen auch in Packages ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon wp_xyz » 3. Jun 2018, 19:00 Re: statische Variable

Mathias hat geschrieben:So etwas auf dieser Art:
Code: Alles auswählen
const
  ShaderCode : String = {$Include fragment.glsl}


Ahnliches gibt es schon:
Code: Alles auswählen
uses
  FileUtil;
var
  ShaderCode: String;
begin
  ShaderCode := ReadFileToString('fragment.glsl');

Aber das ist wohl nix, weil das ein Dutzend Tastaturanschläge mehr benötigt.
wp_xyz
 
Beiträge: 2647
Registriert: 8. Apr 2011, 08:01

Beitragvon Mathias » 3. Jun 2018, 19:16 Re: statische Variable

Aber das ist wohl nix, weil das ein Dutzend Tastaturanschläge mehr benötigt.

Das ist nicht das Problem, ich will die GLSL-Source direkt in der EXE haben. Und 2. wäre dann fragment.glsl im Ordner der Package.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 3. Jun 2018, 19:19 Re: statische Variable

Mathias hat geschrieben:Jetzt muss man dies mühsam und schlecht leserlich so machen:
Code: Alles auswählen
const
  Vert_Shader =
    '#version 330' + LineEnding +
 
    'layout (location = 0) in vec3 inPos;' + LineEnding +
    'layout (location = 1) in vec3 inNormal;' + LineEnding +
    ....


MSEide hat dafür RechtsKlick-'Modify Selection'-'Convert to Pascal string'. Das konvertiert den markierten normalen Text in die Pascal String-Konstanten Form.
mse
 
Beiträge: 1986
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon Mathias » 3. Jun 2018, 19:24 Re: statische Variable

Und dies muss man dann bei jede Änderung des GLSL code machen?

Die sauberste Lösung wäre ein Includestring, den es leider nicht gibt.
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4327
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon mse » 3. Jun 2018, 19:37 Re: statische Variable

Kleine Änderungen macht man direkt im Pascal Format.
Persönlich würde ich den Shader Code in separaten Dateien halten die dann auch mit dem richtigen Highlighter angezeigt werden und mit einem make Script, das in 'Project'-'Options'-'Make'-'Command before' aufgerufen wird, in include- oder resource-Dateien wandeln.
mse
 
Beiträge: 1986
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste

porpoises-institution
accuracy-worried