![]() |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Nein, in Assembler dereferenziert man immer Zeiger, dort gibt es nichts anderes. Somit gibt es auch keinerlei Unterscheidungsmerkmale die uns stören könnten. In PASCAL gibt es im Grunde auch nur Zeiger, logisch die CPU arbeitet halt nur mal so und nicht anders. Wichtig ist doch nur der Unterschied für uns Menschen in informeller Natur. Dieser Unterschied definiert die Leistungsfähigkeit der Programmiersprache. Je abstrakter, sprich unspezifischer, unsere Programmiersprachen werden desto mehr muß der Compiler stupide Arbeit übernehmen, und desto mehr können wir uns bei der Arbeit auf die wirklich relevanten Sachen konzetrieren die keine Maschine wie ein Compiler heutzutage UNS abnehmen kann. Und das ist die Zielsetzung des Lösens von komplexen Problemen. Jede Vereinheitlichung in der Syntax die zu einer höheren Abstraktion führen wird ist also exakt der richtige Weg. Und der Verzicht auf die explizite Dereferenzierung im Source ist genau so ein Schritt zu höherer Abstraktion. Wir bestimmen damit über unsere Programmiersprache das von jetzt an der Compiler UNS die Arbeit mit der expliziten Dereferenzierung abzunehmen hat und somit wird diese Derefernzierung in unseren Augen impliziert !! Und wieder ist ein unnötiger informeller Schritt in unseren Source ausgemerzt worden. Schau mal: argumentierst du FÜR die explizite Dereferenzierung so ignorierst du alle neueren Entwicklungen in den Programmiersprachen. Theoretisch müsstest du ausschließlich nur in Assembler, ja sogar nur mit Lochstreifen programmieren wollen. Irgedwann einmal werden wir so programmieren: "baue eine TCP/IP Verbindung auf und downloade alle notwenigen Dateien". Der Compiler wird dies übersetzen können und dann Additionen, Speicherkopierungen, API Aufrufe, Objekte erzeugen und freigeben, sogar explizit intern Dereferenzierungen durchführen. Also all das was wir heute noch von Hand erledigen müssen. So ein Program bestünde heutzutage noch aus Millionen von Quelltextzeilen, aber in Zukunft wird dem Compiler dafür nur der obige Satz ausreichend sein. Für uns Menschen bedeutet es aber das wir innerhalb eines gesprochenen, ja eventuell nur gedachten, Satzes exakt die Zielsetzung für die Maschine definieriert haben, mehr wollen wir doch garnicht. Kannst du nun diese Entwicklung in unserer Arbeit leugnen ?? Ich meine also das die Abschaffung der expliziten Dereferenzierung nur ein klitzekleiner Schritt in die richtige Richtung bei der Evolution unserer Programmeirsprachen ist. Aus dieser logischen Konzequenz heraus programmiere ich eben, da wor es geht, in Delphi immer mit der impliziten Dereferenzierung. Aber, grundsätzlich kann das jeder so halten wie er möchte, man muß sich eben immer im klaren sein das man die Zeichen der Zeit so eventuell mißachtet. Gruß Hagen |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
anderes Beipsiel:
Delphi-Quellcode:
Hier setzten wir in dem Namen eines Types gleichzeitig auch den Typus dessen mit rein.type ptrData = ^Data; Was haben wir gelernt über C/C++ in diesem Falle ? Warum programmieren wir lieber in PASCAL ohne eine solche Vorgehensweise ? Ja, ich weiß, es gibt heute noch ähnliche Muster auch in Delphi. Aber es ist wohl unbestitten das diese Unsitte in Delphi bei weitem nicht solche Ausmaße annehmen kann wie in C/C++. Wir sehen das im Zusammenhang mit der Typsicherheit in Delphi, aber das halte ich für viel zu engstirnig betrachtet. Schaut euch die neueren Sprachen an, dort ist man in diese Richtung noch viel stärker vorangeschritten. Fazit: Abstraktion ist ein ganz erhebliches Element in der Zukunft der Sprachen. Abstraktion bedeutet aber das immer mehr an Deklarationen, Quelltexten Implikationen enthalten wird. Der Compiler wird also diese Implikationen übersetzen müssenund daraus die informell aufwenigeren expliziten Umsetzungen für UNS selber vornehmen. Gruß Hagen |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
@Olli:
Zitat:
Also: wir reden ja von Dereferenzierungen aus syntaktischer Sicht, und also solches bezog ich mich mit meiner Aussage natürlich nur auf die Syntax in Assebler bei der man diese auch anwendet. Mir geht es doch nur darum ob die Syntax einheitlich Typeübergreifend ist. Und die explizite Dereferenzierung in PASCAL steht im Gegensatz zur impliziten Dereferenzierung aller anderen Typen. Die einzigste Ausnahme stellt der Typ Pointer dar. Betrachtet man dies aus Sicht der Abstraktion so ist es für uns unerheblich welcher Datentyp bei der impliziten Derefernzierung angesprochen wird. Das wäre eben so also ob wir im Namen dieser Variablen immer wieder den Datentyp mit integrieren. Auch dies ist überflüssige Information, zuviel Redundanz. Gruß Hagen |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Code:
typedef Data *ptrData;
Zitat:
|
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Code:
auch einen typisierten Pointer erhalten? Aber ich bevorzuge eigentlich
typedef SomeType *PSomeType
Code:
und habe dann mit blubb einen Pointer, der zumindest in C++ ebenso "sicher" ist, wie in DelphiLanguage, eine Dereferenzierung mit *blubb bringt mich zurück zum Typ SomeType mit allen seinen Members, unabhängig davon was ich vorher in blubb für einen Käse reingeschrieben habe. Exakt genauso verhält sich ein ^Data-Pointer in Delphi. Übrigens kann ich sowohl in C, als auch in Delphi einen derartigen Pointer in einen anderen Pointer-Typ casten und dereferenzieren. Dann lande ich nochmal woanders. Das ist das schöne an Pointer :mrgreen:
SomeType *blubb
Zitat:
Zitat:
Edit: Mist, zu langsam... |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Zitat:
Das IST Abstraktion. Einmalig definierst du diesen Typ damit der Compiler WEIS was er damit machen soll. Und im restlichen Source arbeitest DU auf diesen abstrakteren Typ, weil es für UNS den Source lesbarer macht. Zitat:
Mein Meinung das ist ! Gruß Hagen |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Zitat:
|
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Und schon heute erachte ich die Fehlermeldungen und Warnungen des Compilers für eine solche "Diskussion", nur eben ohne "intelligente" Vorschläge des Compilers. Vertrackte Argumentation mit dem Mathematiker die du da führst. Denn Mathematiker denken infinitiv und exakt diese Denkweise ist widersprüchlich zu einem Informatiker. Viele Aussagen der Mathematiker sind also eineindeutig und infinitiv richtig, aber finitiv und praktisch betrachtet nicht realisierbar. Ein Ingeneur, wie wir es welche sind, kann öfters mit solchen Aussagen leider nichts anfangen. Aus meiner Sicht hast du mit dieser Argumentation exakt in meine Richtung gearbeitet ;) Gruß Hagen |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Zitat:
Delphi-Quellcode:
Habe ich jetzt einen LongInt oder einen ShortInt geschrieben? Du siehst, auch unter Delphi ist es mir wurscht, was für ein Typ dahintersteckt. Es gibt da keinen Unterschied zwischen C und Pascal, ich weiß also nicht, welche "Unsitte" du meinst, die in Delphi nicht solche Ausmaße hätte.
type
PBlah = ^TBlah; TBlah = record Member1: LongInt; end; type PBlubb = ^TBlubb; TBlubb = record Member2: ShortInt; end; var SomeBlubb: PBlubb; SomeOtherBlubb: TBlubb; begin SomeOtherBlubb.Member2 := 5; SomeBlubb := @SomeOtherBlubb; PBlah(SomeBlubb)^.Member1 := 5; end; Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz