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.
Pro napojeni na C/C++ knihovny bezpecnym zpusobem vam doporucuji se podivat na balicky CXX.jl (https://github.com/Keno/Cxx.jl) a Clang.jl (https://github.com/ihnorton/Clang.jl).
U obou se binding vygeneruje automaticky z ceckovych/C++ headeru. V soucasne stable verzi (4.x) je jejich podpora experimentalni, coz znamena hodne buildovaci magie s ruznymi patchi a nastavenimi knihoven Clang/LLMV.
Nicmene na dohled je release Julie verze 0.5 kde autori slibuji podporu techto balicku primo z binarni instalace. Tohle plus podpora debuggingu jsou pro me nejvice ocekavanymi zlepsenimi nove 0.5 verze.
Neznal jsem, diky za tip! Zatim jsem jel kombinaci intuice a navodu a prototypy jsem si tak nejak dedukoval sam a zrovna to vyslo, ale nastesti volam mizivej pocet funkci (volam z Julie libmosquitto na nahodou zrovna v jinem clanku popisovany MQTT; vim, ze bych mohl implementovat MQTT primo v Julii nad socketama, ale na to nemam).