statische Variable

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10: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

Re: statische Variable

Beitrag von mse »

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...

haderlump
Beiträge: 185
Registriert: Fr 18. Jan 2013, 09:29
OS, Lazarus, FPC: Windows 10, Windows XP, Lazarus 1.6
CPU-Target: Celeron

Re: statische Variable

Beitrag von haderlump »

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

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10: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

Re: statische Variable

Beitrag von mse »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: statische Variable

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10: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

Re: statische Variable

Beitrag von mse »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: statische Variable

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: statische Variable

Beitrag von wp_xyz »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: statische Variable

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: statische Variable

Beitrag von m.fuchs »

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

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: statische Variable

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: statische Variable

Beitrag von wp_xyz »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: statische Variable

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10: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

Re: statische Variable

Beitrag von mse »

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.

Mathias
Beiträge: 6160
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: statische Variable

Beitrag von Mathias »

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 grün
Mit Java und C/C++ sehe ich rot

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10: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

Re: statische Variable

Beitrag von mse »

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.

Antworten