Zdarec...
Taková migrace kódu/metadat do binarek překladače... Ono to hodně souvisí s tím co Pavel píše. Pokud si jeden nedá pozor (a v rámci času a vývoje to je někdy dost těžké) na migraci kódu a metadat ze zdrojáku do binárky, tak se dostává do podobné situace. A při zjištění dané věci nezbývá, než opravit prapůvodní verzi (obvykle) a postupne překopilovat všechny verze zpětně. Někdy stačí přepsat pár drobností je to OK... Typickej příklad pro C, parsování zpětnýho lomítka:
switch (character)
case 'n':return(0x0d);
case 'r':return(0x0a);
....
Není moc co řešit. Jinak to ani nešlo, prvni verze neuměla "\n" :) Nicméně, postupem času se změní kód na:
switch (character)
case 'n':return('\n');
case 'r':return('\r');
....
Je to přece přehlednější. Pak se naskýtá otázka, kde vlastně je uloženo 0x0d a 0x0a ? Ve zdrojkáku už ne... Pokud pak někdo prohodí D/A protože to je blbě a má být A/D, tak rozdílné binárky ze stejného zdrojaku zprodukují rozdílnej výsledek. V tomto prípadě relativně bagatelní.
Kdysi v minulosti přemigrovaly ty konstanty do binárky a už se jen přelejvá pri kompilaci z jedné verze do druhé a její hodnota už není pod kontrolou zdrojového kódu. Je krásně zbinarizovaná. A neviditelná.
Tohle je samozrejmně jednoduchý příklad, nicméně, podobné věci se dějí nejen na takto krásné a kontrolovatelné úrovni. V dnešní době, plné "metadat" je to raz dva.... A když se jeden snaží, není takovéj problem zbinarizovat bůch ví co. Speciálně kód, co děla optimalizace má spousty možností (třeba příprava lookup tabulek, což je čiště vygenerovanej kód a pod)... A krásné na tom je nejvíce to, jak to není na první pohled vidět. Koho by napadlo, že ta věc nahože, druhá v pořadí, je vlastně "průser" ? Nejspíš jen toho, kdo se s tím někdy potkal. Jojo, slepice a vajíčko :)
R.