Portál AbcLinuxu, 8. května 2025 04:33
Třeba někdo pochopí, že UTF-8 je vstupně/výstupní formát textových řetězců, ale nikoli operační.Datová struktura která při operacích zachovává svoje invarianty mi připadá jako dobrý nápad. Ale pokud potřebuješ dělat nějaké operace které dočasně poruší pravidla UTF-8, vždycky můžeš prostě zavolat .as_bytes() a pracovat na read-only view toho stringu, nebo použít unsafe (od toho tam je).
Stejně tak float čísla a jejich chování jsou perfektně standardizována.Jo, a Rust se toho standardu drží. Proto čísla v plovoucí řádové čárce nejsou totálně seřazená. Standard je totiž blbý:
zdenekbelehradek@local ~/tests/c =># cat float.c #include <stdio.h> #include <unistd.h> int main (int argc, char **argv) { float zeroplus, zerominus, infplus, infminus, nan; zeroplus = 0.0; // positive zero zerominus = -0.0; // negative zero infplus = 1.0 / zeroplus; // positive infinity infminus = 1.0 / zerominus; // negative infinity nan = zeroplus / zeroplus; // NaN printf("zeroes are equal: %d\n", zeroplus == zerominus); printf("infinities are equal: %d\n", infplus == infminus); printf("NaNs is equal to itself: %d\n", nan == nan); printf("NaN <= +inf: %d\n", nan <= infplus); printf("NaN >= +inf: %d\n", nan >= infplus); printf("NaN >= -inf:: %d\n", nan >= infminus); printf("NaN <= -inf: %d\n", nan <= infminus); return 0; } # cc float.c -o float ; ./float zeroes are equal: 1 infinities are equal: 0 NaNs is equal to itself: 0 NaN <= +inf: 0 NaN >= +inf: 0 NaN >= -inf:: 0 NaN <= -inf: 0Všimni si, že NaNy nejsou ani větší ani menší než jiná čísla, a že operace na rovnajících se číslech dává nerovné výsledky (tak generuju kladné a záporné nekonečno). Samozřejmě to šlo standardizovat i nějak rozumně, např. že NaN se rovná sám sobě a ničemu jinému (a že to platí pro všechny reprezentace NaNů) a že je větší než kladné nekonečno. (Dělení nulou bych nechal jak je nebo zavedl jen jedno (projektivní) nekonečno.) Pak by třeba platilo, že binární kopie floatu se rovná své předloze, a kompilátory by mohly líp optimalizovat.
Samozřejmě to šlo standardizovat i nějak rozumně, např. že NaN se rovná sám sobě a ničemu jinémuTo právě moc rozumné není. Pokud chceš vědět proč, podívej se na trojhodnotové logiky a rozíl mezi tím, jak to definovali Kleene a Łukasiewicz. Stejný případ je i NULL v SQL.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.