AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"strong alias" / "weak alias"?

Ein Thema von freimatz · begonnen am 24. Feb 2024 · letzter Beitrag vom 24. Feb 2024
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#1

"strong alias" / "weak alias"?

  Alt 24. Feb 2024, 09:42
Delphi-Version: 5
Hallo zusammen,

ich suche gerade nach ein paar mysteriösen, unterschiedlichen Verhalten von Apps unter D12, was vorher einwandfrei lief.
Mir ist die Umstellung siehe oben bekannt, hier unter anderem auch aus den Blogs von Marco Cantu und GDK

Ich hätte da noch ein paar zusammenfassende Fragen, ...
Ich habe da nur eine Frage: um was geht es überhaupt? Ich habe die zwei Blogs gelesen und gegoogelt aber nicht herausfinden können was "strong alias" und "weak alias" überhaupt sind.
Was ich bisher kenne ist
Delphi-Quellcode:
type
  TAliasA = TBla;
  TAliasB = type TBla;
Ist sowas gemeint? Und falls ja was ist das Neue daran bei D12?
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#2

AW: "strong alias" / "weak alias"?

  Alt 24. Feb 2024, 09:56
Ich denke, es geht nur um die internen Delphi-Typen, wie NativeInt, welche sich beim overload jetzt anders verhalten.
Der NativeIn verändert seinen Typ, je nach Plattform mal Int32 oder Int64, dies hat einige Probleme erzeugt.

Früher war der overload so möglich, jetzt nicht mehr.

Zitat:
You can use it instead of the two counterparts, not in parallel. You can no longer overload like this in Delphi:
Delphi-Quellcode:
procedure doIt( I : Integer ); overload;
procedure doIt( I : Int64 ); overload;
procedure doIt( I : NativeInt ); overload; // Error 120 nativeint      it’s a redeclaration.
Zitat:
Now must either do this if you want distinct behaviors on how to handle 32-bit vs. 64-bit integers:
Delphi-Quellcode:
procedure doIt( I : Integer ); overload;
procedure doIt( I : Int64 ); overload;
Zitat:
Or just write a single version that adapts to the specific platform bittness:
procedure doIt( I : NativeInt ); overload;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#3

AW: "strong alias" / "weak alias"?

  Alt 24. Feb 2024, 10:30
Gute Frage, laut Hilfe (DocWiki) gibt es in C++ ein Attribut, für Weak-Typen.
https://docwiki.embarcadero.com/RADS.../GNU-Attribute
Im Delphi probiert, funktioniert es nicht.
Delphi-Quellcode:
type
  [Weak] NewInt = type Integer; // wirkungslos (keine CompilerWarnung, aber Weak hat eh nur eine Wirkung auf Variablen mit Managed-Types ala Interface)
  NewInt = [Weak] type Integer; // compiliert nicht
  NewInt = type [Weak] Integer; // compiliert nicht
Prinzipiell gibt es das schon ewig, aber das Verhalten des Compilers hat sich geändert
und dementsprechend haben sie einige "ihrer" Typen ab jetzt anders deklariert,
Scheinbar war NativeInt früher sowas wie ein type Integer und ist nun nur noch Integer .

Aber der Compiler und CodeInsight behandeln nun "Alias" anders.
Früher wurde beim CodeInsight (CodeCompletion) und HelpInsight (Hint mit Deklaration) immer der "ursprüngliche" Typ angezeigt, aber jetzt der "Deklarierte".
Und das hat endlich einen enormen Vorteil, denn wenn du dir im Editor die Deklaration von SendMessage ansiehst, dann steht dort endlich LPARAM/WPARAM/LRESULT und nicht nur NativeInt, bzw. ganz früher Integer.
siehe Anhang -> HWND ist ein eigener Typ (stong-type) und der Rest nur ein Alias (weak-type)

Delphi-Quellcode:
type
  AliasInt = Integer;
  NewInt = type Integer;

  TTest = record
    procedure doIt(I: Integer); overload;
    procedure doIt(I: Int64); overload;
  //procedure doIt(I: NativeInt); overload; // unter D11 konnte man das noch deklarieren, da NativeInt ein "eigener" Typ war
  //procedure doIt(I: AliasInt); overload; // geht nicht, weil ist Typ "identisch" mit Integer
    procedure doIt(I: NewInt); overload;
  end;

procedure TForm2.FormCreate(Sender: TObject);
var
  i4: Integer; // Int32 = Integer
  i8: Int64;
  ix: NativeInt;
  ai: AliasInt;
  ni: NewInt;
  lp: LPARAM; // LPARAM = INT_PTR = IntPtr = NativeInt
  Test: TTest;
begin
  Test.doIt(i4);
  Test.doIt(i8);
  Test.doIt(ix); // im D11 weiß NativeInt nicht wo hint, alo ob Integer oder NewInt
  Test.doIt(ai); // Links die Maus über "ai" halten - früher wurde es überall als "Integer" angezeigt, jetzt als "AliasInt"
  Test.doIt(ni);
  Test.doIt(lp); // seid D12 wird es als "LPARAM" angezeigt, aber früher als "NativeInt"
end;

procedure TTest.doIt(I: Integer);
begin
end;

procedure TTest.doIt(I: Int64);
begin
end;

{procedure TTest.doIt(I: NativeInt);
begin
end;}


procedure TTest.doIt(I: NewInt);
begin
end;

PS: Ich hab soeben beim "Verantwortlichen" nochmal nachgefragt ... mal sehn ob/was er antwortet.
https://blog.marcocantu.com/blog/202...eak-alias.html
Miniaturansicht angehängter Grafiken
lparam.png  
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Feb 2024 um 10:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#4

AW: "strong alias" / "weak alias"?

  Alt 24. Feb 2024, 11:29
Das type Keyword solltest du aber weglassen, denn damit deklarierst du einen definitiv anderen Typ.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: "strong alias" / "weak alias"?

  Alt 24. Feb 2024, 18:22
Danke Euch allen. Dann lege ich die Sache für mich und behalte das mal im Hinterkopf. Falls wir in unserem Projekt diesen NativInt verwendet haben kümmert sich ein Kollege daram

Das type Keyword solltest du aber weglassen, denn damit deklarierst du einen definitiv anderen Typ.
Meinst Du mich?
Ich persönlich verwende selten Aliase und wenn dann kommt es darauf an. Klar, mit type ist es ein nuer Typ. Dafür bekommt man die Typsicherheit. Ich könnte mir sowas vorstellen:
Delphi-Quellcode:
type
  TDistance = type Double;
  TAngle = type Double;
Mit dem type könnte man verhindern, dass man als Entwickler versehentlich mal was falsch zuweist. (Dafür handelt man sich woanders recht viel Arbeit ein.)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.014 Beiträge
 
Delphi 12 Athens
 
#6

AW: "strong alias" / "weak alias"?

  Alt 24. Feb 2024, 21:41
Meinst Du mich?
Nein. Damit war Frank gemeint.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.149 Beiträge
 
Delphi 12 Athens
 
#7

AW: "strong alias" / "weak alias"?

  Alt 24. Feb 2024, 22:41
Das war ja nur für den Vergleich von MIT und OHNE
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz