Stärken und Schwächen von Object Pascal

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ich kann mir vorstellen wie viel Aufwand ist es einen Kompiler zu bauen !
Nimms mir nicht überl, du weisst nicht was Prozentrechnung ist aber willst wissen was in Compilerbau an Arbeit steckt ? Nö !
Ich weiß ja das du mir nicht all zu viel zumutetes das ist mir inzwischen auch
Das ist doch aber kein Vorurteil von mir pluto, ich hab mich ne ganze weile zurückgehalten aber ich bin nunmal ziemlich direkt das ist einfach so.
voll kommen egal Denke was du möchtes. Aber komme bitte nicht mit sowas das kann ich nicht einschätzen und so !
doch, genau damit komm ich weil es so ist. am compilerbau zerbrechen sich hochschulprofessoren den kopf, ich kann das auch lange nicht einschätzen was da in welcher funktion für mühe steckt und ich programmiere viel microcontroller wo man wirklich extrem hardwarenah arbeitet. ich optimiere auch oft indem ich mir den assemblercode anschaue der für eine codezeile erstellt wurde und dann überlege wie man es anders lösen könnte trotzdem ist mir oft total suspekt was der c compiler da hinrotzt. Pascal ist noch ein paar stufen härter c ist ne ganze ecke näher an assembler dran als pascal. Ich würde nie auf den Gedanken kommen zu sagen das ich irgendwas im compilerbau einschätzen könnte das können warscheinlich noch nichtmal die compilerbauer.
Ich bin auch nicht hier Angemledet um zu zeigen das ich der Beste bin.
Bin ich auch nicht aber auf dumme Fragen gibts dumme Antworten ganz einfach. Ich stelle auch oft mal ne dumme Frage worauf man mir durchaus ne dumme Antwort geben kann. Hab ich kein Problem mit.

Und wenn jemand ne Frage stellt wie "Gibt es sowas ?" oder "Geht sowas" Was mach ich da bitte falsch wenn ich mit Ja oder Nein antworte ?!
Ich hoffe wir verstehen uns jetzt !
Hakts ? Die Hoffnung geb ich langsam auf.
zum Problem: Warum ist dass dann in C++ bzw c möglich ?
(das habe ich eine ganze Zeitlang unter dos gemacht)
Hui, wenn du schonmal was mit c oder C++ zu tun hattest solltest du die Frage beantworten können.

Aber ich probiers mal:

Unter C/C++ gibt es einen sogenannten Präprozessor, der sogenannte includes vereinigt. Dabei wird aus allen Quellcodedateien (jedenfalls dem quasi interfaceteil) eine große gemacht und die wird dann compiliert.
Dabei entsteht ein riesiger Nachteil nämlich das man nur einen namespace in einem programm hat alle Variablen müssen also unterschiedlich heissen. Und das sowohl in den Systembibliotheken als auch im Benutzercode.

In Pascal ist das ein komplett anderes prinzip dort hat jede Unit ihren eigenen Namespace Variablen können also in 2 Units gleich benannt werden. In Delphi haben sie sogar pro Klasse eigene Namespaces.
Ausserdem wird in den Units interface und implementationteil in einer Datei gehalten was in C auf 2 aufgeteilt ist. Dieses Unitkonzept führt dazu das man eben etliche vereinfachungen gegenüber C hat, aber auchd azu das der Compiler dei Units verwalten muss und die entsprechenden Namespaces dazu was wiederum dazu führt das es dieses Cirkulare Unit problem gibt. Das lässt sich nicht auflösen da man dann 2 namespaces vereinigen müsste und das nunmal nicht geht da der Compiler dann bei 2 Variablen die gleich heissen nicht mehr weiss welche er für was benutzen soll.
Ich hoffe ich hab das jetzt verständlich genug erklärt und du verstehst das es eben nicht anders lösbar ist. Jedenfalls nicht Pascal konform. Und warum genau das in C/C++ geht...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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)

Beitrag von pluto »

Wenn ich eine Frage erstelle erwate ich natürlich auch antworten, darum lese ich auch die Antworten ! sonst würde ich ja keine Fragen stellen. Oder ?

Das ist jetzt ja auch nur meine Meinung zu seiner Meinung wenn du so willst. Mehr nicht. Jeder kann ja mehrer eigene Meinungen haben.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Nun hört mal auf euch auch noch darum zu streiten Pluto kann mir ruhig seine Meinung sagen ich sag ihm ja auch meine, heisst ja noch lange nicht das ich daraus jetzt ne Lehre ziehen muss.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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)

Beitrag von pluto »

Nimms mir nicht überl, du weisst nicht was Prozentrechnung ist aber willst wissen was in Compilerbau an Arbeit steckt ? Nö !
ich weiß sehr wohl was das ist und wie man das verwendet ! hatte ich ja lange genug in meiner Bäcker Ausbildung
Das ist doch aber kein Vorurteil von mir pluto, ich hab mich ne ganze weile zurückgehalten aber ich bin nunmal ziemlich direkt das ist einfach so.
Ich finde das hat nix mit direkt zu tun wenn man über jemanden den man nicht kennt solche aussagen macht !
am compilerbau zerbrechen sich hochschulprofessoren den kopf, ich kann das auch lange nicht einschätzen was da in welcher funktion für mühe
Das habe ich auch nicht gemeint, sondern ich kann mir vorstellen wie viel Arbeit das ist,
das ich irgendwas im compilerbau einschätzen könnte das können warscheinlich noch nichtmal die compilerbauer.
Ich denke diese Aussage ist doch zimlich allgemein gehalten !

Währ einen Complier baut hat schon ein genaues Konzept wie was geht. Oder halt die nötige Erfahrung auf die Idee einen eigenen Complier zu bauen würde ich nicht kommen. Aber andere schon, ich habe mal gelesen das es zimlich einfach sein soll ein Interpeter zu bauen also sowas wie Java... allgemein gesagt ohne auf die deteils zu achten.

Hakts ? Die Hoffnung geb ich langsam auf.
Ja ich glaube auch, das es noch eine weile dauern wird
:(

Code: Alles auswählen

n Pascal ist das ein komplett anderes prinzip dort hat jede Unit ihren eigenen Namespace Variablen können also in 2 Units gleich benannt werden. In Delphi haben sie sogar pro Klasse eigene Namespaces.
So genau hatte ich es nicht mehr im Kopf, was die nachteile waren.
Ich hoffe ich hab das jetzt verständlich genug erklärt und du verstehst das es eben nicht anders lösbar ist.
Im Grunde habe ich dich verstanden, aber ich bin mir noch zimlich sicher das es geht, es sein denn jemand beweist mir das gegenteil. Was du ja versucht hast.

Wenn der Complier auf unit2 trieft die aber in Unit1 verwendet wird und in Unit2 trieft er nun auf unit1 kann es doch eine einfache Sicherheits abfrage geben die verhindert das es eine endlos schleife gibt - weil darum geht es doch letzendlich oder ?

PS: habe deine Antwort leider zu spät gelesen. ich glaube wir sollten unsere "steiigkeiten"
endlich mal abschließen. was meinst du ? sonst geht das ewig zu weiter.

Edit1: ich habe meine C Soruce die ich mit "Borland Turbo C" complier erstellt habe noch....
Bei bedarf kann ich sie ja mal hochladen, aber die sind nicht besonders schön geschrieben.
Damals hatte ich wenig Erfahrung und kannte keine Funktionen :lol:
MFG
Michael Springwald

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)

Beitrag von pluto »

nein Christian das stimmt. genauso wenige wie ich, aber ich finde es toll das wir über sowas reden könne, es gibt ja menschen bei den es nicht möglich ist.

Evlt. sollten wir aber diesen Thread abteilen und zu den Thread verschieben: "Warum Antworten und Warum nicht" ich glaube das währe das beste oder ?
Dort können wir dann dieses Thema weiter verfolgen *G* und zu einer "Lösung" kommen !
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Im Grunde habe ich dich verstanden, aber ich bin mir noch zimlich sicher das es geht, es sein denn jemand beweist mir das gegenteil. Was du ja versucht hast.
OK, du hast mich also gar nicht verstanden. Soll ichs versuchen nochmal bildlich zu erklären ?
Wenn der Complier auf unit2 trieft die aber in Unit1 verwendet wird und in Unit2 trieft er nun auf unit1 kann es doch eine einfache Sicherheits abfrage geben die verhindert das es eine endlos schleife gibt - weil darum geht es doch letzendlich oder ?
LoL, und du willst dann jedesmal wenn du den fpc übersetzt ne halbe Staunde Sicherheitsabfragen beantworten ?

Da ists mir doch lieber ich überleg mal kurz wie ich ne zirkuläre Referenz wegbekomm und das alle halbe Jahre mal.
PS: habe deine Antwort leider zu spät gelesen. ich glaube wir sollten unsere "steiigkeiten"
endlich mal abschließen. was meinst du ? sonst geht das ewig zu weiter.
Ich streite doch gar nicht ich sag dir nur meine Meinung. Wenn dir das zu viel ist kann ichs auch lassen und beantworte einfach nichts mehr was von dir kommt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

aber willst wissen was in Compilerbau an Arbeit steckt ?
Falls ihr jemanden sucht, der sich mit Compilerbau auskennt, dann sprecht doch mal Florian an.

knight

PS: FPC 1.0 wurde 2000 veröffentlicht (Beginn der Arbeiten: 1993)

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Na, der wird sich bedanken hat ja auch sonst nix zu tun.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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)

Beitrag von pluto »

Ich streite doch gar nicht ich sag dir nur meine Meinung.
Wenn du das so siehst ist das für mich Inordnung.
Wenn dir das zu viel ist kann ichs auch lassen und beantworte einfach nichts mehr was von dir kommt.

Das muss du schon wissen, Aber wenn du antworten gibt dann bitte hilfreiche
:evil:
OK, du hast mich also gar nicht verstanden. Soll ichs versuchen nochmal bildlich zu erklären ?
Ich verstehe jetzt nicht warum du denkst ich habe deine Erklärung nicht verstanden.
Aber wenn du Lust hast kannst du es mir ja mal Bildlich zu verklären versuchen !
LoL, und du willst dann jedesmal wenn du den fpc übersetzt ne halbe Staunde Sicherheitsabfragen beantworten
Was meinst du damit ?
meinst du damit etwa MessageDlG für den User ?
Nein, so meinte ich das nicht. Ich meinte einfach nur eine Lösung damit es zu keiner Endos schleife kommen kann. Dass kann doch nicht so schwer sein.
MFG
Michael Springwald

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)

Beitrag von pluto »

Na, der wird sich bedanken hat ja auch sonst nix zu tun.
Wenn er uns Überhaup beachtet wenn wir ihn eine E-Mail senden würden.
Aber ich glaube darum ging es auch eigentlich weniger. Währe mit Sicherheit Intersannt.
Wie er das sehen würde und wem er recht geben würde.
MFG
Michael Springwald

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

Zurück zum Thema ! .... Pointer

Beitrag von mschnell »

Zurück zum Thema....

Ich finde doch einen Aspekt von Object Pascal reichlich problematisch.

Es ist in mehreren Zusammenhängen nicht sichtbar was Pointer sind und wie sie gehandhabt werden

Eigentlich sind Zeiger Variablen, die Adressen von irgendetwas enthalten und eigentlich braucht man eine "dereferenz" Notation (in Pascal "^"), um das, worauf sie zeigen zu bearbeiten.

Aber:

Prozedur-Variablen:
Prozedur-Variablen sind (natürlich) Zeiger (auf Programm-Code). Um die referenzierte Prozedur aufzurufen wird aber kein ^ verwendet. OK, sei das so, aber wenn eine Funktion ohne Parameter aufgerufen wird, kann man in Object Pascal die Klammern weglassen (in C nicht !). Dadurch ist der Ausdruck "X:=A"; nicht eindeutig (z.B. wenn A ein Prozedur-Zeiger ist und der Prozedur-Typ keine Parameter hat und einen Zeiger auf eine Prozedur desselben Typs zurückgibt sind theoretisch zwei Übersetzungsmöglichkeiten sinnvoll). Auch schreibt man in Delphi einfach X:=B; (B ist eine Prozedur vom richtigen Typ). In FP schreibt man meist wohl exakter X:=@B; (ich habe bis heute nicht verstanden wie man die Möglichkeit das "@" wegzulassen ein und aus schaltet).

Strings:
(long) Strings sind eigentlich Zeiger, werden aber automatisch (und sehr geschickt) so behandelt als wären sie Daten. (Wenn man den Inhalt eines nicht mit "var" übergebenen Strings ändert , bleibt er im aufrufenden Programm gleich.)


Dynamische Arrays:
Dynamische Arrays sind eigentlich Zeiger, und werden im Gegensatz zu Strings auch so behandelt (Wenn man den Inhalt eines nicht mit "var" übergebenen Strings ändert, wird er auch im aufrufenden Programm verändert.) Es wird aber nicht die Ponter-Notation "^" verwendet.

Objekte:
Die Variablen, die Instanzen von Klassen referenzieren, sind (natürlich) Pointer (auf die am Heap angelegte Instanz-Struktur). Es wird aber im Allgemeinen nicht die Pointer-Notation "^" verwendet (sähe ja auch schrecklich aus). Das führt bei Anfängern sehr leicht zu Verwirrung: "Warum muss ich ein Objekt free-en, wenn "es" (die Variable, die es referenziert) doch beim Verlassen der Prozedur ohnehin stirbt ?" ...

-Michael

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

(ich habe bis heute nicht verstanden wie man die Möglichkeit das "@" wegzulassen ein und aus schaltet).
Schaue mal hier nach: http://wiki.lazarus.freepascal.org/Code ... ifferences" onclick="window.open(this.href);return false;

knight

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

Beitrag von mschnell »

knight hat geschrieben: Schaue mal hier nach: http://wiki.lazarus.freepascal.org/Code ... ifferences" onclick="window.open(this.href);return false;
Das ist mir schon klar. :)

Ich meine aber schon Lazarus/Free-pascal code gesehen zu haben, der die Notation ogne "@" verwendet hat. äusche ich mich da ?

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Das ist kein Freepascal Code sondern Delphi Code der in Freepadcal mit dem MODE DELPHI Compilerschalter "kompatibel" gemacht werden kann.

Steht aber alles in dem Link...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von mschnell »

Christian hat geschrieben:Das ist kein Freepascal Code sondern Delphi Code der in Freepadcal mit dem MODE DELPHI Compilerschalter "kompatibel" gemacht werden kann.

Steht aber alles in dem Link...
Ich meine mich zu erinnern, dass es trotz "MODE DELPHI" nicht ging.

Ich teste das morgen noch mal.

-Michael

Antworten