TArray

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Re: TArray

Beitragvon mse » 23. Mai 2018, 09:35 Re: TArray

m.fuchs hat geschrieben:Das geht erst seitdem Advanced Records eingeführt wurden. Wo bitte soll das denn davor schon gegangen sein?

Mit Objekten:
https://www.freepascal.org/docs-html/cu ... x59-770005
In MSElang spielen Objekte wieder eine wichtige Rolle.
mse
 
Beiträge: 1967
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 Socke » 23. Mai 2018, 09:43 Re: TArray

mse hat geschrieben:
m.fuchs hat geschrieben:Das geht erst seitdem Advanced Records eingeführt wurden. Wo bitte soll das denn davor schon gegangen sein?

Mit Objekten:
https://www.freepascal.org/docs-html/cu ... x59-770005
In MSElang spielen Objekte wieder eine wichtige Rolle.

Der Vorteil von Records mit Typehelper gegenüber Objekten ist die volle Kontrolle über die Speicherbelegung (Byte Alignment). Das ist insbesondere beim Austausch mit Fremdbibliotheken wichtig. Bei Objekten hast du immer die VMT, die dir dafür virtuelle Methoden erlaubt.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Socke
 
Beiträge: 2539
Registriert: 22. Jul 2008, 18:27
Wohnort: Köln
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 8.1/Debian GNU/Linux/Raspbian/openSUSE | 
CPU-Target: 32bit x86 armhf
Nach oben

Beitragvon m.fuchs » 23. Mai 2018, 09:49 Re: TArray

mse hat geschrieben:
m.fuchs hat geschrieben:Das geht erst seitdem Advanced Records eingeführt wurden. Wo bitte soll das denn davor schon gegangen sein?

Mit Objekten:

Bitte genauer lesen: es geht um Records.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1963
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 mse » 23. Mai 2018, 10:10 Re: TArray

Socke hat geschrieben:Der Vorteil von Records mit Typehelper gegenüber Objekten ist die volle Kontrolle über die Speicherbelegung (Byte Alignment). Das ist insbesondere beim Austausch mit Fremdbibliotheken wichtig. Bei Objekten hast du immer die VMT, die dir dafür virtuelle Methoden erlaubt.

AFAIK haben nur Objekte mit virtuellen Methoden eine VMT, auf jeden Fall wird es in MSElang so gemacht. Sonst sind sie normale records, welche auch auf dem stack oder im globalen Memory angelegt werden können. Dass Borland Objekte nach der Einführung von Klassen ("class", "TObject") stiefkindlich behandelte, hat weitgehend Marketing-Gründe. Später konnten die Borland Nachfolger dann nicht mehr zurück und haben stattdessen advanced records eingeführt. Vielleicht haben sie auch einfach vergessen, dass es bereits "object" gibt...
mse
 
Beiträge: 1967
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 mse » 23. Mai 2018, 10:12 Re: TArray

m.fuchs hat geschrieben:
mse hat geschrieben:
m.fuchs hat geschrieben:Das geht erst seitdem Advanced Records eingeführt wurden. Wo bitte soll das denn davor schon gegangen sein?

Mit Objekten:

Bitte genauer lesen: es geht um Records.

Vielleicht verwechselst du "class"/"TObject" mit "object"?
mse
 
Beiträge: 1967
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 theo » 23. Mai 2018, 10:13 Re: TArray

theo
 
Beiträge: 8054
Registriert: 11. Sep 2006, 18:01

Beitragvon m.fuchs » 23. Mai 2018, 10:33 Re: TArray

mse hat geschrieben:
m.fuchs hat geschrieben:
mse hat geschrieben:Mit Objekten:

Bitte genauer lesen: es geht um Records.

Vielleicht verwechselst du "class"/"TObject" mit "object"?

Nein, verwechsele ich nicht. Die Frage drehte sich aber tatsächlich um Records. Bitte also nicht die guten alten Objekte mit hineinwerfen. Danke.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
m.fuchs
 
Beiträge: 1963
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 mse » 23. Mai 2018, 12:14 Re: TArray

m.fuchs hat geschrieben:Nein, verwechsele ich nicht. Die Frage drehte sich aber tatsächlich um Records. Bitte also nicht die guten alten Objekte mit hineinwerfen. Danke.

Dann hat Pluto vielleicht "record" mit "object" verwechselt. Ich bitte viel mal um Entschuldigung, wenn ich dich beleidigt habe, das war nicht beabsichtigt.
Es ändert nichts daran, dass "object" und "advanced records" sich überlappen und viele Leute das nicht wissen.
mse
 
Beiträge: 1967
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 pluto » 23. Mai 2018, 12:16 Re: TArray

Dann hat Pluto vielleicht "record" mit "object" verwechselt. Ich bitte viel mal um Entschuldigung, wenn ich dich beleidigt habe, das war nicht beabsichtigt.

Nein, ich meinte auch record's mit objects habe ich noch nie gearbeitet....
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6652
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon Mathias » 23. Mai 2018, 17:47 Re: TArray

wp_xyz hat geschrieben:
m.fuchs hat geschrieben:Aber erstens ist das nun wirklich nicht unübersichtlicher als Klammerei.

Ich mag die Dinger ja auch nicht, aber ich muss zugeben, dass der verkettete Aufruf deutlich übersichtlicher sein kann als verschachtelte Prozedur/Funktionsaufrufe, nämlich wenn zusätzliche Parameter im Spiel sind.

Nehmen wir das Beispiel von oben mit der Matrix-Rotation. Da wird der Typehelper .Rotate wahrscheinlich mit drei Parametern für die Drehwinkel um die drei Raumachsen aufgerufen werden, also
Code: Alles auswählen
  Matrix.Rotate(alpha, beta, gamma)

Der klassische Funktionsaufruf wäre entsprechend
Code: Alles auswählen
  Matrix2 := Rotate(Matrix, alpha, beta, gamma);

Sowie noch unentschieden. Interessant wird's aber, wenn man nach der Rotation noch eine Translation durchführen möchte, die ihrerseits auch wieder drei Parameter dx, dy, dz hat:
Code: Alles auswählen
  Matrix.Translate(dx, dy, dz);
// bzw als klassische Funktion
  Matrix2 := Translate(Matrix, dx, dy, dz);

Wenn man die beiden Operationen nun hintereinanderausführt, zuerst die Rotation, dann die Translation, sieht der Typehelper-Aufruf so aus, schön von links nach rechts, und die Parameter direkt bei der Methode:
Code: Alles auswählen
  Matrix.Rotate(alpha, beta, gamma).Translate(dx, dy, dz)

Der klassiche Aufruf ist dagegen das reinste Chaos, weil man die Zeile sowohl von vorne als auch von hinten lesen muss und die Parameter des außeren Aufrufs durch den inneren Aufruf abgetrennt werden:
Code: Alles auswählen
  Matrix := Translate(Rotate(Matrix, alpha, beta, gamma), dx, dy, dz)

Nur wird es das bei mir nicht geben, da Rotate und Translation proceduren sind, welche Self verändern.

Beispiel:
Code: Alles auswählen
procedure Tmat3x3Helper.Translate(x, y: single);
begin
  Self[2, 0] := Self[2, 0] + x;
  Self[2, 1] := Self[2, 1] + y;
end;
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4258
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon marcov » 25. Mai 2018, 18:51 Re: TArray

wp_xyz hat geschrieben:Der klassiche Aufruf ist dagegen das reinste Chaos, weil man die Zeile sowohl von vorne als auch von hinten lesen muss und die Parameter des außeren Aufrufs durch den inneren Aufruf abgetrennt werden:
Code: Alles auswählen
  Matrix := Translate(Rotate(Matrix, alpha, beta, gamma), dx, dy, dz)


Ja. Mann soll Mathe unbedingt neu formulieren mit Objecte! :roll:
Zuletzt geändert von m.fuchs am 25. Mai 2018, 23:51, insgesamt 1-mal geändert.
Grund: Zitat korrigiert
marcov
 
Beiträge: 1031
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

Beitragvon Mathias » 22. Jun 2018, 17:45 Re: TArray

Ich habe gerade eine Merkwürdige Deklaration entdeckt:
Code: Alles auswählen
type
  Ta = array[(a, b, c, d)] of byte;
var
  m:Ta;
begin
  m[a]:=123;
  m[b]:=456;


Dies wird anstandslos kompiliert. :roll:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4258
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 22. Jun 2018, 17:52 Re: TArray

Dies wird anstandslos kompiliert.

Wusste gar nicht, dass sowas geht? Aber warum auch nicht?
Ich nehme an, Buchstaben werden intern auch als Zahlen gehandhabt?
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6652
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
Nach oben

Beitragvon Mathias » 22. Jun 2018, 18:47 Re: TArray

Wusste gar nicht, dass sowas geht? Aber warum auch nicht?

Auch als eingefleischter Pascal-Freaks entdeckt man immer wieder was neues. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4258
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon pluto » 22. Jun 2018, 18:47 Re: TArray

Auch als eingefleischter Pascal-Freaks entdeckt man immer wieder was neues.

Die Sorucen von Lazarus&FPC sind schon eine ware Goldgrube...
MFG
Michael Springwald
Aktuelles Projekt: PlutoArduino
pluto
 
Beiträge: 6652
Registriert: 19. Nov 2006, 12:06
Wohnort: Oldenburg/Oldenburg
OS, Lazarus, FPC: Linux Mint 18.3 | 
CPU-Target: AMD
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

cron
porpoises-institution
accuracy-worried