Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Generics und Rekursion- Was hat sich geändert? (https://www.delphipraxis.net/188414-generics-und-rekursion-hat-sich-geaendert.html)

Der schöne Günther 1. Mär 2016 10:30

Delphi-Version: 10 Seattle

Generics und Rekursion- Was hat sich geändert?
 
Folgendes funktionierte in XE7 noch, in 10 Seattle muss ich den Typ explizit angeben sonst sagt er mir
Code:
[dcc32 Fehler] Project1.dpr(20): E2531 Methode 'someGenericStuff' erfordert explizite Typargumente
Ich finde in den Changelogs nichts. XE8 habe ich nicht ausprobiert. Gibt es irgendetwas diese Änderungen beschreibt?

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

type
   TSomeClass = class
      class procedure someGenericStuff<T: class>(const arg: T);
      class procedure someOtherGenericStuff<T: class>(const arg: T);
    end;

{ TSomeClass }

class procedure TSomeClass.someGenericStuff<T>(const arg: T);
begin
   someOtherGenericStuff(arg); // Geht immer
   someGenericStuff
      {$IF CompilerVersion > 28}<T>{$ENDIF} //Sonst E2531
   (arg);
end;

class procedure TSomeClass.someOtherGenericStuff<T>(const arg: T);
begin
   //
end;

begin
   TSomeClass.someGenericStuff(nil);
end.

(Ja, der Code macht keinen Sinn, es geht nur ums Kompilieren)

Stevie 1. Mär 2016 11:58

AW: Generics und Rekursion- Was hat sich geändert?
 
Abgesehen, dass hier scheinbar seit jeher ein Bug vorliegt (ein auf class constrainter Generic erlaubt den Typ Pointer) siehe RSP-13841
scheint es sich um eine Regression zu handeln, was die Type Inference angeht - bitte reporten.

himitsu 1. Mär 2016 12:03

AW: Generics und Rekursion- Was hat sich geändert?
 
Seit wann können die "doofen" Generics Typen anhand der Parameter automatisch bestimmen?

Delphi-Quellcode:
class procedure TSomeClass.someGenericStuff<T>(const arg: T);
begin
  someOtherGenericStuff<T>(arg);
  someGenericStuff<T>(arg);
end;

TSomeClass.someGenericStuff<TObject>(nil); // oder sonstwas

Stevie 1. Mär 2016 12:05

AW: Generics und Rekursion- Was hat sich geändert?
 
Zitat:

Zitat von himitsu (Beitrag 1331778)
Seit wann können die "doofen" Generics Typen anhand der Parameter automatisch bestimmen?

Schon immer - gibt aber viele Fälle von unerwartetem Verhalten (z.B. funktioniert es nicht mit var/out Parametern) und bei untypisierten Konstanten und Literalen kann schonmal ein Typ aufgrund des Wertebereichs schon einmal entgegen der Vermutung ausfallen.

Der schöne Günther 1. Mär 2016 12:21

AW: Generics und Rekursion- Was hat sich geändert?
 
Zitat:

Zitat von Stevie (Beitrag 1331777)
scheint es sich um eine Regression zu handeln, was die Type Inference angeht - bitte reporten.

Bittesehr: https://quality.embarcadero.com/browse/RSP-13843

Uwe Raabe 1. Mär 2016 12:33

AW: Generics und Rekursion- Was hat sich geändert?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1331782)

Vielleicht mal ein genereller Hinweis: Bei Angabe der Language-Version sollte nur dann etwas anderes als English angegeben werden, wenn das Problem eben nur in der spezifischen Sprache oder in allen nicht-Englischen Versionen auftaucht. So besteht die Gefahr, daß der Fall zunächst in der Übersetzungsabteilung landet. (Habe mir erlaubt, das in dem Fall schon zu ändern)

Im Zweifelsfall die IDE mit BDSSetLang auf Englisch umstellen und nochmal probieren. Das hat nebenbei noch den Vorteil, daß man die originalen Menü- und Dialog-Texte bekommt und die Fehlermeldungen nicht noch rückübersetzen muss.

Der schöne Günther 1. Mär 2016 12:40

AW: Generics und Rekursion- Was hat sich geändert?
 
Ich hatte "All L10N" angegeben. Ich musste es erst nachschlagen*, aber "L10N" ist wohl das Profi-Kürzel für "Localisation". Das ist doch nicht falsch, oder?
Oder sind die Chancen höher, dass der Fall schneller bearbeitet wird wenn es englisch ist?

Zitat:

Das englische Wort für Lokalisierung ist localization (amerikanisches/britisches Englisch) bzw. localisation (britisches Englisch) und wird in der Softwareentwicklung oft mit dem Numeronym l10n oder L10n abgekürzt. Die 10 ist die Anzahl der ausgelassenen Buchstaben. (Vergleiche i18n für internationalization bzw. internationalisation.)
Quelle: https://de.wikipedia.org/wiki/Lokali...areentwicklung)

Uwe Raabe 1. Mär 2016 12:47

AW: Generics und Rekursion- Was hat sich geändert?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1331789)
Ich hatte "All L10N" angegeben. Ich musste es erst nachschlagen*, aber "L10N" ist wohl das Profi-Kürzel für "Localisation". Das ist doch nicht falsch, oder?
Oder sind die Chancen höher, dass der Fall schneller bearbeitet wird wenn es englisch ist?

Ob es wirklich relevant und/oder messbar ist sei dahingestellt. Es ist aber wohl so, daß die Localization-Abteilung sich gezielt diese Fälle raussucht. Wenn das dann aber nicht in ihren Bereich passt, geht der Fall erstmal wieder zurück. Solange er aber in dieser Abteilung liegt, wird sich niemand sonst dieses Falls annehmen. Folglich geht potentiell Zeit verloren. Das kann dann schon mal bedeuten, daß es erst ein Release später berücksichtigt wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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