64 je dvakrát 32 - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

64 je dvakrát 32

20. května 2008, 09.00 | Jednou z nejvýznamnějších novinek Leoparda pro nás, programátory v prostředí Cocoa, je to, že nyní máme plně k dispozici všechny možnosti a výhody čtyřiašedesátibitového prostředí.

64 je dvakrát 32

Jednou z nejvýznamnějších novinek Leoparda pro nás, programátory v prostředí Cocoa, je to, že nyní máme plně k dispozici všechny možnosti a výhody čtyřiašedesátibitového prostředí.

My jsme se již mnohokrát s rozdíly mezi módem 32 bitů (zpětně plně kompatibilním s předcházejícími systémy, a proto omezeným) a módem 64 bitů setkali; vedle řady poměrných drobností – jako třeba že výjimky ve čtyřiašedesátibitovém režimu fungují poněkud jinak, nabízejíce maximální efektivitu pro @try/@catch na úkor zhoršené efektivity @throw, nebo že právě ve čtyřiašedesátibitovém módu se projeví výhody nově přidané direktivy @package pro řízení přístupu k instančním proměnným – je asi nejpodstatnějším rozdílem to, že ve čtyřiašedesátibitovém režimu pro Objective C neexistuje syndrom "fragile class" , a – což úzce souvisí – instanční proměnné není zapotřebí deklarovat, neboť překladač je dokáže vytvořit sám na základě deklarací @property.

Kromě těchto čtyřiašedesátibitových novinek, jež už známe, se ovšem v Leopardu objevilo několik dalších drobností; na ty se podíváme nyní.

Nové celočíselné typy

Leopard zavádí dvojici nových celočíselných typů: NSInteger a NSUInteger. V praxi nám mohou sloužit stejně, jako nám dosud sloužil int a unsigned; rozdíl spočívá v tom, že nové typy jsou vždy převeditelné na adresu (ukazatel): s intem to ve čtyřiašedesátibitovém režimu samozřejmě neplatí, neboť int (stejně jako unsigned) zůstávají dvaatřicetibitové.

(Možná někoho napadne: "Proč vůbec zavádět nové typy, proč nepoužívat ve čtyřiašedesátibitovém módu prostě long a unsigned long?" Inu, kvůli zpětné kompatibilitě s režimem dvaatřicetibitovým: nové typy NSInteger a NSUInteger jsou definovány tak, že longu/unsigned longu odpovídají pouze v režimu čtyřiašedesátibitovém, ale v režimu dvaatřicetibitovém odpovídají intu/unsigned intu. Pokud to ovšem pro nás není podstatné, můžeme definovat makro NS_BUILD_32_LIKE_64; pak budou prostě a jednoduše typy NSInteger a NSUInteger ekvivalentní typům long a unsigned long v libovolném režimu.)

Novým typům odpovídá také rozšíření služeb knihoven: vedle existujících služeb intXXX, jež pracují s typem int, jsou nyní k dispozici také služby integerXXX, pracující s typem NSInteger: kupříkladu třída NSNumber nyní přijímá zprávy numberWithInteger a numberWithUnsignedInteger, a její instance zprávy integerValue, unsignedIntegerValue; instance třídy NSString rozumějí zprávě integerValue a tak dále.

Máme také k dispozici odpovídající konstanty NSIntegerMax, NSIntegerMin a NSUIntegerMax pro minimální a maximální možné hodnoty.

Při používání nových typů s formáty (stringWithFormat:, NSLog, ...) je třeba dávat pozor právě vzhledem k tomu, jak jsou definovány: "%d" (a podobné varianty "%u", "%x", ...) samozřejmě nebude obecně fungovat. Nejjednodušším řešením je důsledně používat "%ld" (a podobné varianty "%lu", "%lx", ...), a hodnoty explicitně přetypovat na long:

NSInteger n;
...
NSLog(@"n=%ld",(long)n);

Je třeba si také dát pozor na hodnotu NSNotFound: ta samozřejmě má také odlišnou hodnotu ve dvaatřicetibitovém a v čtyřiašedesátibitovém režimu. Přímo v kódu s ní ovšem žádný problém nastat nemůže ("if (range.location==NSNotFound) ...") je tedy zcela v pořádku; pokud ji však dvaatřicetibitový program uloží např. do souboru a čtyřiašedesátibitový načte, nebude to pro něj již NSNotFound, ale "obyčejná" hodnota.

Nový typ pro desetinné hodnoty

Ačkoli to není vynuceno samotnou čtyřiašedesátibitovou architekturou, firma Apple využila toho, že stejně dochází ke změnám v API, a zároveň přidala nový symbolicky definovaný typ namísto původního typu floatCGFloat (předpona CG znamená, že typ je deklarován v knihovně Core Graphics; ostatní knihovny Apple jej ovšem bohatě podporují).

Podobně jako tomu je u typů NSInteger a NSUInteger, i CGFloat je definován různě pro různé architektury: zatímco ve dvaatřicetibitovém režimu samozřejmě odpovídá kvůli zpětné kompatibilitě typu float, v módu čtyřiašedesátibitovém přináší dvojitou přesnost, jsa definován jako double.

S typem CGFloat nyní pracují všechny zprávy vyjma těch, jež jsou explicitně určeny pro typ float (např. floatValue); také zůstal typ float zachován v některých konkrétních API (typesetting, animace). Vše ostatní bylo předeklarováno pro práci s typem CGFloat; speciálně také všechny geometrické struktury (NSPoint, NSSize, NSRect).

Explicitní typy pro výčtové hodnoty

Výčtové hodnoty (enum) jsou v jazyce C definovány poněkud nešťastně, neboť není jednoznačně určeno, jakému celočíselnému typu vlastně typ enum odpovídá (přesněji řečeno, překladač to určí na základě použitých výčtových hodnot). Aby zde nedocházelo k nekonsistencím, byly výčtové typy v Cocoa předefinovány na typy explicitní; namísto dosavadního

typedef enum { // až do Tygra včetně
    NSNullCellType = 0,
    NSTextCellType = 1,
    NSImageCellType = 2
} NSCellType;

se nyní používá

enum { // od Leoparda dále
    NSNullCellType = 0,
    NSTextCellType = 1,
    NSImageCellType = 2
};
typedef NSUInteger NSCellType;

Výhodou je to, že nyní lze explicitní jméno typu používat v deklaracích metod bez nebezpečí nekonsistence a binární nekompatibility mezi různými verzemi systému.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Tipy a Triky  

 » Rubriky  » Začínáme s  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

konecne

Autor: petricek Muž

Založeno: 20.05.2008, 09:45
Odpovědí: 0

konecne slusny clanek. jinak to tady stoji uplne za hovno. Dekuji
Asi by to chtelo vymenit sefredaktora. POkdu tady vubec nejaky jeste je

Odpovědět na příspěvek

RE: konecne

Autor: juramac Muž

Založeno: 20.05.2008, 11:38

A ty by jsi to vzit nechtel ?.....Opravdu si myslis, ze tenhle web je jen pro odborniky a programatory ? Vetsina uzivatelu macu jsou UZIVATELE, kterym podobne clanky, nic nerikaji. A to se treba me libi, ze na tomto webu jsou odborne i laicke clanky, v priblizne stejnem pomeru, jakymi jsou odbornici a lajkove mezi uzivateli..... Stoji to zu za hovno ? No, soude podle tebe samotneho, podle toho, ze to ctes a dokonce se i vyjadrujes, to zase az tak spatne nebude..........

Odpovědět na příspěvek

RE: RE: konecne

Autor: petricek Muž

Založeno: 20.05.2008, 12:29

no bohuzel stoji.
nic jineho tady nevidim jen financni vysledky a kde a za kolik stoji iphone. proste ubohost.

Odpovědět na příspěvek

RE: RE: RE: konecne

Autor: juramac Muž

Založeno: 20.05.2008, 12:31

Pak tedy vidis jen to, co videt chces....... ja jsem spokojeny, i kdyz tech clanku o iPhonech je opravdu vice, nez je zdravo...ale nikdo nikoho nenuti je cist a uz vubec ne se k nim vyjadrovat. Je to proste soucasny fenomen a s tim je potreba se smirit.......

Odpovědět na příspěvek

RE: RE: konecne

Autor: Radek Muž

Založeno: 20.05.2008, 14:50

Moc se omlouvám.. ale články o tom kolik kde prodal Apple telefonů nebo počítačů, analýzy a spekulace kterých je zde cca 80 procent jsou uživatelům k prdu. To co zajímá uživatele jsou praktické články, tipy apod.. Naštěstí se spousta zahraničních stránek s touto tématikou... Ovšem někdy jim dost dobře nerozumím. Což je samozřejmě můj problém ale českou variantu neznám. Tento článek je samozřejmě spíše pro programátory ale to mi vůbec nevadí.

Odpovědět na příspěvek

RE: RE: RE: konecne

Autor: petricek Muž

Založeno: 20.05.2008, 21:14

Dekuji Radku

Odpovědět na příspěvek

RE: RE: RE: konecne

Autor: kolja Muž

Založeno: 27.05.2008, 17:55

podívej se nahoru, tam je Diskuzní fórum, mohlo by tě uspokojit

Odpovědět na příspěvek

hurá

Autor: Hanička Muž

Založeno: 20.05.2008, 17:37
Odpovědí: 0

a více takových!

Odpovědět na příspěvek

Co to je 64 bitů

Autor: LP - Lubor Přikryl Muž

Založeno: 20.05.2008, 20:28
Odpovědí: 0

V počítači mohou mít v principu 64 bitů: Délka instrukce, velikost čísel (operandů), se kterými se počítá, a velikost pointeru. Hardwarově pak ještě šířka obou sběrnic a velikost registrů. Ostatní je z toho odvozené. Jako anketní otázku bych dal (i autorovi): Co z toho musí mít hodnotu 64 u 64bitového počítače? :)))
To, co se tady v tom článku probírá, s ničím z výše uvedeného nemá moc společného.
Prvně je třeba si ujasnit, že Mac OSX 10.5 je systém s 32bitovým kernelem, který podporuje aplikace se 64bitovou adresou podle standardu LP64. Toto označení říká, jak jsou které proměnné (long, int) reprezentovány. Protože při tvorbě API se udělalo v systémech plno propojení mezi číselnými typy a pointery, je potřeba to ošetřit, celý ten článek je vlastně o tom, jak se tyto problémy obcházejí. Pro uživatele Maců je dobrá zpráva to, že Apple přizpůsobením na LP64 na to jde poctivě, zatímco přátelé od M$ si vybrali jiný standard (LLP64), díky kterému vůbec nejsou schopní dát 32bitové a 64bitové systémy do jednoho. Carbon není kompatibilní, protože míchá int a pointer u mnoha objektů GUI.

Odpovědět na příspěvek

RE: Co to je 64 bitů

Autor: OC Muž

Založeno: 20.05.2008, 20:48

Ony jsou ty pojmy poněkud ošidné. Kolikabitový mikroprocesor byla Motorola 68008? :)

Odpovědět na příspěvek

RE: RE: Co to je 64 bitů

Autor: LP - Lubor Přikryl Muž

Založeno: 21.05.2008, 11:33

To byla myslím nějaká ořezaná verze MC68000? No, tak to byl 23bitový :))) ? Nebo to mělo i omezenou adresovou na 16 bit? To je právě celá ta legrace, MC68k měl 32 bit registry a 16bit dat. sběrnici, ale adresový prostor fyzicky 23bitový po dvou bytech, logicky 32 bitový, pokud si to správně pamatuju, operandy max. 32 bit. No, to jsme si zavzpomínali.
Abych tedy odpověděl na otázku, zde je rozhodující logická velikost adresového prostoru, 32 bitů (velikost adresových registrů a adresové aritmetiky). Na 68k / 68008 tedy mohl běžet 32bitový systém, pokud MMU uměla namapovat ty vyšší adresy někam na těch 23/16 drátů.
Zrovna převádíme všechny aplikace do Cocoa, takže jen pokračujte - kde všude jsou v Cocoa pokřížené int, long a pointery a jak to Apple obsloužil, to je určitě velmi dobré vědět. Nechtěl jsem do toho zase až tak vrtat, ale lidi nám pořád na support píšou nesmyslné dotazy o 64 bitech, no prostě vím moc dobře, že 80% lidí neví, co to je 64 bitový systém a prvně by se to mělo vysvětlit :))

Odpovědět na příspěvek

RE: RE: RE: Co to je 64 bitů

Autor: j.t.d. Muž

Založeno: 22.05.2008, 02:49

68008 byl interně 32bitový (měl šířku ALU 32 bitů), ale sběrnici jen 8bitovou...
Proto ta složitost pojmů.

Odpovědět na příspěvek

RE: RE: RE: RE: Co to je 64 bitů

Autor: Michal Jurica Muž

Založeno: 27.05.2008, 17:02

Ale kdeže, 68008 bol (tak ako 68000) 16-bitový procesor.

Odpovědět na příspěvek

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: