Me nejvice vadi ze PHP integer je ruznej podle platformy - nekde je 32bit, nekde je 64bit. A pak to, ze 32bit verze PHP nevidi a ani neotevre soubor ktery ma >2GB, i kdyz 32bit C binarka to samozrejme zvladne.
Nejvice by se me libilo mit tohle:
./configure --with-int-always-64bit
Takze pak nemusim resit v skriptech gmp_ zhovadilost. Bohuzel stejne pri pozadavku plnych 32/64bit jako unsigned hodnot, to musim enkodovat jako hex string nebo pouzit ono gmp_ :/
Ma nekdo nejakou lepsi radu?
(skriptuji ruzne analyzatory kodu, kde holt jsou nejbeznejsi ty U32/U64 hodnoty.. a zatim preferuji hex string, nez gmp objekty)
Python ma podporu poli nativnich integeru, to je asi nejcastejsi pripad, kdy chcete pevnou velikost.
https://docs.python.org/3/library/array.html
2. 12. 2020, 10:05 editováno autorem komentáře
Tyhle debaty me vzdy pobavi.
Ono totiz zalezi co delate.
Ja programuju uz dlouho a byly i situace, kdy bylo treba resit velikost integeru nebo floating point errors a tak. Jsou to extremni vyjimky i ve velice komplikovanych programech.
Jsou samozrejme situace, kdy takove veci musite hlidat od rana do vecera - nevim placnu treba neco v letectvi - jenze pak jiste nepouzivate PHP.
A tak mi nezbyva nez se zepatat - co je obsahem vasi prace, ze by vam bezne vadila velikost integeru a ostatni veci ktere jste zminil?
Vyhoda skriptovanych jazyku je, ze je pustite odevsad, bez nutnosti kompilace!
Typicky mam sdilene NFS skrze ruzna zarizeni, skript je tedy jedinej/spolecnej (zadny deploy se nekona, vse je hot & live), ale prostredi kde bezi je ruzne (32/64bit, x86/arm/power/sparc).
Ocekaval bych tedy moznost nakonfigurovat interpret tak, aby se choval pro skripty stejne, i kdyby to obnaselo degradaci vykonu. Protoze degradace vykonu resena runtime, v ramci skriptovaci strany je jeste horsi.
Pouzivam stejne interprety - php-cli, od stejneho "vyrobce". V cem se to podle vas lisi?
Napr. BASH se v aspektu, ktery kritizuji u PHP chova predikovatelne, matematicke vyrazy se pocitaji vzdy v 64-bit signed, nezavisle na tom, zda jde o 32bit nebo 64bit interpret:
$ file /bin/bash /bin/bash: ELF 32-bit LSB pie executable, ... $ let "a = 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 7 " ; echo $a 8070450532247928832 $ let "a = 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 8 " ; echo $a -9223372036854775808 $ let "a = 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 16 " ; echo $a 0