Feature-Request: Deklaration von Objekten

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Feature-Request: Deklaration von Objekten

Beitrag von pluto »

Aber Delphi-Klassen können das eben NICHT!
Was können sie nicht ?
Was deklariert wird ist letztlich ein Pointer (auch wenn die Scheibweise dies verbirgt) und der Programmierer muss explizit Create und Free aufrufen.
Ja, so sind nun mal Klassen, dass ist in jeder OOP Sprache der Fall mehr oder Weniger. Eine Klasse muss erzeugt werden mit Create und wieder Frei gegeben werden mit Free, was ist daran jetzt so Falsch ?
Das ist ein teurer Preis: Genaue Resourcenkontrolle durch den Programmierer. Dabei könnte das der Compiler viel besser.
Gibt es schon Compiler die sowas können ? Wenn ja welche ? C++ Kann sowas nicht, bei Java bin ich mir nicht sicher...
Dabei wäre das gar nicht notwendig, wenn man sich nicht so sehr an C++ anlehnen würde.
Wo siehst du eine Anlehnung an C++ ? Alle Sprachen Ähnlich sich. Blöcke werden in Pascal mit Begin und end Gekennzeichnet in C++ mit {}. Parameter werden durch , getrennt, wenn eine Methode oder eine Funktion aufgerufen wird. Die Unterschiede zwischen C++ und Pascal sind aber Enorm. Schau dir ein C++ Sorucecode an und danach ein "Object Pascal" Code. In C++ können Variablen Überall Deklariert werden. In "Object Pascal" nicht. Auch die Speicher Verwaltung soll in C++ Problematischer sein als in "Object Pascal"... Beide Sprachen Entwickeln sich weiter. Das Pascal was in den 70ner ? oder 90ner erfunden wurde, gibt es heute nicht mehr.... Aber viele Sachen von früher gibt es immer noch... Neben Class gibt es noch Object, suchst du sowas ?

Vielleicht hast du deine Lieblings Sprache noch nicht gefunden. Ich bin mit "Object Pascal", in der From, wie es der FPC verarbeitet 98% zu Frieden. Vielleicht musst du einfach nur eine andere Sprache suchen... es gibt genügend. Wie währe es mit Python ? oder mit Ruby ? oder mit Java ? Oder mit C++ ? oder mit C-Shape ? oder mit #Net ? oder oder oder..... Sprachen gibt es wie Sand am Meer. Zu Not kannst du auch deine eigene erstellen. Wie das geht zeigt das Tutorial unter http://www.delphigl.com" onclick="window.open(this.href);return false;, sogar in Deutsch...

Es gibt immer Elemente in Sprachen die es woanders auch gibt, es gibt aber auch Elemente die es in anderen Sprachen nicht gibt z.b. Property. Die sind in "Object Pascal" Einzigartig in dieser Form.
MFG
Michael Springwald

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Feature-Request: Deklaration von Objekten

Beitrag von Hitman »

Inwiefern soll der Compiler besser meine Ressourcen verwalten können als ich selbst? Wieviele Compiler kennst du, die Hellsehen können? Abgesehen davon unterscheidet sich der Ablauf zur Laufzeit bei "echten" Anwendung von Fall zu Fall - schließlich codet man ja nicht alles hart.
Wie z.B. willst du einfache Konstrukte wie Linked Lists ohne Pointer realisieren? Oder Beziehungen zwischen Objekten? Was du erreichen willst, klingt für mich wie wenn ein Datenbankler eine unnormalisierte Datenbank fordert um nur eine Tabelle verwalten zu müssen ....

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Feature-Request: Deklaration von Objekten

Beitrag von pluto »

Inwiefern soll der Compiler besser meine Ressourcen verwalten können als ich selbst?
Das währe sogar Möglich. Sobald das Objekt nicht mehr genutzt wird, könnte es Automatisch Frei geben werden...
MFG
Michael Springwald

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Feature-Request: Deklaration von Objekten

Beitrag von Hitman »

pluto hat geschrieben:
Inwiefern soll der Compiler besser meine Ressourcen verwalten können als ich selbst?
Das währe sogar Möglich. Sobald das Objekt nicht mehr genutzt wird, könnte es Automatisch Frei geben werden...
Und das soll der Compiler woher genau wissen? Es hat einen Grund, dass .NET, Java und ähnliche Umgebungen Garbage Collectors brauchen. Sowas kann man eben nicht zur Compiletime wissen.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Feature-Request: Deklaration von Objekten

Beitrag von pluto »

Und das soll der Compiler woher genau wissen? Es hat einen Grund, dass .NET, Java und ähnliche Umgebungen Garbage Collectors brauchen.
Sowas meinte ich..... Genau "Garbage Collectors"... Der Compiler kann es wohl nicht wissen, aber das Programm...
MFG
Michael Springwald

hotzenplotz
Beiträge: 33
Registriert: So 13. Dez 2009, 16:17

Re: Feature-Request: Deklaration von Objekten

Beitrag von hotzenplotz »

Hitman hat geschrieben:
pluto hat geschrieben:
Inwiefern soll der Compiler besser meine Ressourcen verwalten können als ich selbst?
Das währe sogar Möglich. Sobald das Objekt nicht mehr genutzt wird, könnte es Automatisch Frei geben werden...
Und das soll der Compiler woher genau wissen? Es hat einen Grund, dass .NET, Java und ähnliche Umgebungen Garbage Collectors brauchen. Sowas kann man eben nicht zur Compiletime wissen.
Da muss ich mich auch mal einklinken! Nicht nur Java und .NET haben einen GC. Es gibt auch Compiler die einen GC nutzen! Und das ist verdammt cool.
Mir ist z.B. ein C++ GC bekannt und der von D. Siehe http://www.digitalmars.com/d/2.0/garbage.html" onclick="window.open(this.href);return false;

So ein Ansatz wäre tatsächlich für FreePascal ein genialer Genie Streich :)

Tatsache ist dass jeder GC meinen Speicher besser verwalten kann als ich!
Mischen Sie Sich ein! Machen Sie mit! ödp www.ödp.de - Die Öko-Demokraten

gerdi
Beiträge: 24
Registriert: Mo 9. Nov 2009, 19:41

Re: Feature-Request: Deklaration von Objekten

Beitrag von gerdi »

In C++ können Variablen Überall Deklariert werden. In "Object Pascal" nicht.
Hier triffst Du zufällig genau den Punkt:
In Pascal wird der Speicher für die Variablen am Anfang alloziert und am Ende freigegeben und zwar beides AUTOMATISCH.
In C++ werden Variablen irgendwo im Programm definiert und zwar vom Programmierer. Objekte werden ebenfalls vom Programmierer erzeugt und freigegeben und das ist eine Quelle zahlreicher Fehler, die die GC teilweise ausbügelt und dadurch das Programm verlangsamt.
Dieses C++-Konzept ist Pfusch. Das brauchen wir nicht nach Pascal zu übernehmen.

In Pascal sind Variablen in der Deklaration bestimmt. Die Procedure belegt am Anfang den Speicher und gibt ihn am Ende wieder frei und das sollten auch die Objekte mit ihren Unterobjekten tun.

Ich arbeite schon lange mit Delphi und liebe es. Aber mit einem kleinen Zusatz könnte man meine Ideen realisieren. Ich habe meine Vorstellungen schon vor Jahren als feature-request eingegeben und bin heute erstaunt eine gewisse Realisierung in Delphi 2006 zu finden.
Wie z.B. willst du einfache Konstrukte wie Linked Lists ohne Pointer realisieren? Oder Beziehungen zwischen Objekten?
Wie gesagt: Pointer sind in Pascal nicht verboten.
Wo es nur um die Referenz zu einem anderen Objekt geht sind sie harmlos, solange dazu kein Speicher freigegeben oder alloziert wird.
Die Refernzierungsmöglichkeit über Pointer ist übrigens nicht die einzige. Ich stehe viel eher für eine thematische Referenzierung von Objekten ein.
Objekte werden dabei in Listen aufgenommen (Das ist das einzige mal, wo der Pointer als Referenz auftaucht. Das kann man auch so Schachteln, dass der Programmierer sich nicht darum kümmern muss). Refernziert werden die Objekte dann über inhalts- und aussagereiche Relationen.

Das ist übrigens die Art und Weise, wie relationale Datenbanken funktionieren, da wir schon beim Thema sind. Der "join" findet immer über inhaltlich aussagereiche Werte statt und (bei guter Programmierung) nie über die Rekordnummer.

Ich selber programmiere gerade ein seh allgemeins Baumkonstrukt dieser Art. Dabei wird der Baum (ähnlich aufgebaut wie verkettete Listen) alleine durch thematische Expand und Collapse-Befehle erweitert und Pointer sind völlig transparent.

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Feature-Request: Deklaration von Objekten

Beitrag von Hitman »

hotzenplotz hat geschrieben:Da muss ich mich auch mal einklinken! Nicht nur Java und .NET haben einen GC. Es gibt auch Compiler die einen GC nutzen! Und das ist verdammt cool.
Mir ist z.B. ein C++ GC bekannt und der von D. Siehe http://www.digitalmars.com/d/2.0/garbage.html" onclick="window.open(this.href);return false;
Ich habs ja auch nicht auf Java und .NET begrenzt (ich sagte "und ähnliche Umgebungen").
hotzenplotz hat geschrieben:So ein Ansatz wäre tatsächlich für FreePascal ein genialer Genie Streich :)

Tatsache ist dass jeder GC meinen Speicher besser verwalten kann als ich!
Dann machst du was falsch ;-) Heaptrace hilft doch so schön beim Aufspüren von Memory Leaks.

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Feature-Request: Deklaration von Objekten

Beitrag von lrlr »

@gerdi:
> dass schon im klassischen Pascal nicht alle Werte "by value" übergeben werden. "Var" scheint Dir völlig ungebkannt zu sein.

bitte nicht sachen hineininterpretieren die ich nicht geschrieben habe..



zum thema: wenn man objekte doppelt oder garnicht freigeben kann ist das (wie du selber sagst) eine fehlerqeulle, wenn man das also macht ein fehler (vom programmierer!)..

nur weil du eine GC hast, verschwindet dieser fehler aber nicht automatisch...

(seit FastMM ist das aber eigentlich auch kein problem mehr, weil man solche fehler ja inzwischen recht einfach findet)


vergiss das mit den records wieder: die sind für "komplexere" sachen nicht geeignet, (allein schon einen "parent" oder "owner" kannst nicht machen, wie z.b. bei bäumen notwendig..) weil du dort immer referenzen brauchst...

aber wenn du einen GC willst, schreib halt in (delphi) .Net oder java ...
dann wirst feststellen, dass
auch sachen wo du "externe" referenzen (z.b. handles) auf dateien, gui, usw. hast, ist ein z.b. GC sehr hinderlich (weil man nicht drauf warten kann bis der GC irgenwann/zufällig) mal ein object freigibt..

usw.


vielleicht schilderst einfach mal dein konkretes "problem" dass du hast/lösen willst und warum dort (delphi) objekte nicht geeignet sind..

aber bitte nicht so wie das "thread" beispiel, das versteht kein mensch...


zu deinem 1. posting:

>Es sollte nicht nur möglich sein Objektpointer zu deklarieren, sondern auch Objekte selbst.
>Bei Prozedur-Beginn wird der Constructor aufgerufen und beim Ende der Destructor.

das ist ja recht einfach, am einfang der procedur ein create, am ende ein destroy, da kann man nix falsch machen (mit try finally natürlich)

dein "problem" ist ja, dass man die objekte NICHT immer automatisch freigeben will/kann/darf am ende der procedur..
hätte man also ein system dass die objekte (wie du "vorderste") IMMER am ende einer prozedure freigibst, könnte damit keiner etwas anfangen...


ps. mit "nicht wirklich programmieren" meinte ich, dass du mir eher ein "theoretiker" zu sein scheinst, (forschung/uni oder so) und nicht "echte" programme, die jemand kaufen soll, schreibst...

lrlr
Beiträge: 127
Registriert: Di 3. Nov 2009, 09:48

Re: Feature-Request: Deklaration von Objekten

Beitrag von lrlr »

@gerdi:

dein (komisches) thread beispiel erinnert irgendwie an "Pascal-FC" , kann das sein !?!?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Feature-Request: Deklaration von Objekten

Beitrag von mschnell »

pluto hat geschrieben:Das wäre sogar Möglich. Sobald das Objekt nicht mehr genutzt wird, könnte es Automatisch Frei geben werden...
Nö, ein Compiler kann so was nicht. Man braucht Reference-Counting (macht FPC bei strings) oder andere Realtime-Maßnahmen (Garbage Collection).
Dafür wurden entsprechende Frameworks erfunden. Die "Java Virtual Machine" und das ".Net Framework" (um nur die bekanntesten zu nennen, daneben gibt es auch Mono, Python, Basic, ... ) machen das ganz prima, es kostet aber Performance, weil jeder Zugriff auf ein Objekt über das System abgewickelt werden muss..

-Michael

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Feature-Request: Deklaration von Objekten

Beitrag von pluto »

Nö, ein Compiler kann so was nicht.
Ich meine ja auch nicht den Kompiliere sondern, dass Programm an sich. Z.B. die Objekte / Klassen könnten sowas. Das der Kompiliere das nicht kann ist klar. Der kann ja nicht in die Zukunft / Hellsehen schauen / Sehen.
MFG
Michael Springwald

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Feature-Request: Deklaration von Objekten

Beitrag von Targion »

pluto hat geschrieben:
Und das soll der Compiler woher genau wissen? Es hat einen Grund, dass .NET, Java und ähnliche Umgebungen Garbage Collectors brauchen.
Sowas meinte ich..... Genau "Garbage Collectors"... Der Compiler kann es wohl nicht wissen, aber das Programm...
Eine Art "Garbage Collector" mittels Referenzzählung in Pascal wäre wirklich schön... Könnte man ja mal anregen.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Feature-Request: Deklaration von Objekten

Beitrag von mschnell »

Genau.

Und FPC macht solche Sachen mit Absicht nicht, um hochperformante Applikationen zu ermöglichen.

-Michael

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Feature-Request: Deklaration von Objekten

Beitrag von pluto »

Es könnte ja einstellbar sein. Per Default ist es deaktiviert und wenn man sowas möchte könnte man es Aktivieren.
MFG
Michael Springwald

Antworten