Forum Delphi.cz

Delphi => Obecné => Téma založeno: pepak 13-06-2012, 17:32:27

Název: XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: pepak 13-06-2012, 17:32:27
Byl jsem včera na Snídaní s Embarcaderem o migraci na XE2. Moc se k tomu radši vyjadřovat nebudu, co taky chtít zadarmo, ale zarazila mě tam jedna potenciálně užitečná informace: že je prý třeba ke třídám přidat atribut, který řekne, že je třída kompatibilní s x86 resp. x64 (resp. s oběma). Speciálně jsem se na to ptal a dozvěděl se, že to je třeba udělat u úplně všech tříd. To se mi zdálo divné, tak jsem si to dneska vyzkoušel a řekl bych, že 1) to u mých vlastních tříd odvozených od TObject není třeba dělat (kompilátor aplikaci klidně zkompiluje a tuto aplikaci jde i spustit), a 2) Embarcadero samo to zjevně nedělá, soudě podle toho, že nikde ve zdrojáku VCL ta konstrukce pro deklaraci bitovosti použita není. Takže se chci zeptat - dozvěděl jsem se úplnou blbost (bitovost není třeba signalizovat vůbec) nebo částečnou blbost (signalizace potřeba je, ale jen v některých situacích), nebo jsem nesprávně vyhodnotil to, co vidím ve zdrojácích a co jsem si zkoušel?
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: < z > 13-06-2012, 17:52:44
predpokladam, ze pokud nic signalizovane neni, tak to jde spustit u obou,
specifikovat to je potreba u kodu, ktery opravdu jsou kompatibilni s jednim

me to nic nerika (mozna budu mlet blbosti), ale nejaky ty instrukce SSE4 jsou jen pro x64 a tak by to u nejakych takovych funkci melo byt znaceno
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: pepak 13-06-2012, 17:56:56
No, ta informace totiž byla opačná - pokud chci něco jiného než x86, musím to explicitně uvést, zatímco praktický test a ostatně i logika věci mluví spíš o opak (pokud neuvedu něco jiného, znamená to podporu všeho).
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: pepak 13-06-2012, 17:57:32
Zítra když tak kouknu do materiálů, které jsem si pochopitelně nechal v práci, jak přesně ta signalizace vypadala.
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: Radek Červinka 13-06-2012, 20:17:12
To je blbost. Jediné co je nutné, je v případě, že tvoje komponenta je jen pro jednu platformu toto specifikovat, aby designer (nebo IDE) ji nenabízelo. Aspon co vím. Jinak se předpokládají všechny platformy.

Kód: Delphi [Vybrat]
  1.   [ComponentPlatformsAttribute(pidWin32 or pidWin64)] // not supported on OSX
  2.   TMyComponent = class(TComponent)
  3.   private
  4.     ...
  5.   end;
  6.  
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: Radek Červinka 13-06-2012, 20:20:07
... nejaky ty instrukce SSE4 jsou jen pro x64 a tak by to u nejakych takovych funkci melo byt znaceno

SSE4 muzes klidne pouzivat i v Win32, ale nemusí to procesor podporovat (tj. musis si to otestovat). Ale kdyz je to spusteno na 64bit tak je to zaruceno, jelikoz vsechny 64bit procesory umožňují SSE (nevím sice jestli 4, ale tady jde o princip). Proto taky 64bit kompilátor používa SSE instrukce.
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: zdenek 16-06-2012, 21:48:08
Možná to stím souvisí. Teď jsem převáděl komponenty do XE2. Nemám je nijak označené a pokud mám nastaveno Platform 64bit, tak jsou v toolpaletě šedivé a nejdou dát na form.
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: Radek Červinka 17-06-2012, 22:26:05
A když tu komponentu označíš přes ComponentPlatformsAttribute ? Myslel jsem si že std. jsou všechny platformy (asi se to v průběhu vývoje změnilo). Ale možná je výchozí Win32. Každopádně to platí je pro komponenty na paletě.
Název: Re:XE2 a signalizace, že je třída připravena na 64 bitů
Přispěvatel: zdenek 18-06-2012, 13:52:28
Tak jsem zkusil jednu komponentu označit a už je aktivní i u 64bit a v hintu u komponenty se zobrazuje  Supported platforms 32bit a 64bit.

EDIT: Ale asi závisí na výchozím nastavení celého package. Ještě budu bádat.

Vypadá to že automaticky jsou komponenty povolené jen pro Win32, dokud se neoznačí