Cau! Zase jednou bozi clanek !
Otazka k
julia> ccall( ("rand", "libc"), Int32, ())
1804289383
julia> ccall( ("rand", "libc"), Int64, ())
1804289383
Proc to neni automagicke? Tohle celkem zabiji prenositelnos. Jak se to resi na jinych nez intelech? Hadam ze vetsinou postaci int32/int64 ale co takove 31b s390?:)
Co vím, tak to byla snaha o zpětnou kompatibilitu, něco podobného A20 line na PC (to je podobně koncipoovaná šílenost). Předchozí architektury IBM totiž byly 32 bitové, ovšem adresy měly buď 24 nebo 26 bitů podle typu. Takže hlavně u 24bitového adresování si programátoři těch horních 8 bitů využívali na cokoli dalšího, typicky na tagy (LISP například). Takže v IBM rozhodli, že pro zjednodušení přenostitelnosti se bude nejvyšší bit adresy využívat takto: 1 znamená, že dalších 31 bitů je virtuální adresa, 0 znamená, že se bude používat jen 24 bitů (a těch zbývajících sedm si může programátor využívat stejně, jako předtím). Jestli to v reálu pomohlo ... těžko říct. Navíc tam několik instrukcí používalo jen 31 bitů na adresy, takže se nemusely nijak rozšiřovat.