Disclaimer: mám oficiální povolení psát o Delphi XE4 před release. Musím to zde napsat.
Jelikož mám zkušenost že lež oběhne svět ještě než si pravda obuje boty tak zkusím nastínit jak je to s kompilátory v Delphi XE4.
Delphi XE4 (asi podle edice) obsahuje 5 (slovy pět) kompilátorů.
Takže:
- Win32 compiler (DCC32)
- Win64 compiler (DCC64)
- Mac compiler (DCCOSX)
- iOS Simulator compiler (DCCIOS32)
- iOS ARM compiler (DCCIOSARM)
c:\Program Files (x86)\Embarcadero\RAD Studio\11.0\bin>dcciosarm
Embarcadero Delphi Next Generation for iPhone compiler version 25.0
Copyright (c) 1983,2013 Embarcadero Technologies, Inc.
Delphi po x letech mění architekturu a kompilátory pro nové platformy jsou postaveny na LLVM. To mimochodem platí i pro C++Builder. Z uvedených kompilátorů je jen poslední postaven na LLVM a je označován jako NEXTGEN.
Nový kompilátor (NEXTGEN) zavadí novinky do jazyka jako je ARC (Automatic Reference Counting) pro objekty (momentálně Delphi má něco jako ARC jen pro stringy, interface, záznamy a variant - což je mimochodem také záznam), nově tedy NEXTGEN kompilátor podporuje ARC i pro objekty.
Tj. ještě jednou: Win32 a Win64 (kromě oprav a zrychlení hlavně u Win64) zůstává stejný. To samé je Mac kompilátor. Pořád si myslím, že je to aktualizovaný kompilátor z Kylixu mixnutý s Win32 kompilátorem.
Zvláštní situace je ohledně iOS simulátoru. Jak jsem již několikrát psal, tak iOS simulátor je v podstatě OSX aplikace, která spouští a teď pozor - x86 kód. Tento kód vznikne překladem zdrojového kódu pro simulátor (a výsledek je x86 binárka) na rozdíl od překladu pro iOS (ARM binárka). Tj. na výsledném zařízení běží úplně jiný binární kód, pro jinou platformu (ARM) než pro simulátor (x86). Doufám, že je to jasné. Je to vyčuranost Apple, tím si usnadnili práci s emulátorem - na druhou stranu to, že něco běží v emulátoru neznamená, že to poběží i na iOS zařízení - ale s velkou pravděpodobností bude. Takže kompilátor pro iOS simulátor je verze OSX kompilátoru s ARC a dalšími věcmi z nextgen.
Zpět k NEXTGEN: toto umožňuje relativně lehce přidávat další platformy, protože v NEXTGEN je zdrojový kód překládán do "meta vrstvy" - LLVM bytecode (do které mimochodem překládán i C++ Builder). Z této "meta" je pak backend LLVM (upravený) schopen generovat cílovou binárku pro zvolenou platformu (bez rozlišení zda byl zdrojem Delphi nebo C++Builder). Když se podíváte na stránky LLVM, uvidíte několik existujících frontendů pro různé platformy a OS (ARM - iOS x Android, WinRT, javascript, .NET, Win32, Linux …). Vidíte ty možnosti?
Na druhou stranu pro EMBT bylo nejhorší vytvořit frontend Delphi > LLVM bytecode. Do stejného bytecode překládá i C++ Builder. Další platformy jsou mnohem jednodušší.
Zamyšlení: Tohle je čistě moje spekulace a není ničím oficiálním nebo neoficiálním potvrzena - všimněte si, jak se EMBT snaží vytvořit v RTL rozhraní ekvivalentní .NET (úplně přesně). Pokud si k tomu připočtete LLVM a jeho backend pro .NET… Hmm. Nebo taky naopak. EMBT má z minulosti kompilátor C# a nyní má RTL, které je hodně podobné .NET. Co kdyby udělali nativní kompilátor C# s FireMonkey? Nebo taky nic :-).