Portál AbcLinuxu, 2. listopadu 2025 23:42
Byl zveřejněn bezpečnostní audit TLS knihovny naprogramované v Rustu Rustls. Společnost Cure53 stojící za auditem byla "ohromena kvalitou zdrojového kódu" [reddit].
Tiskni
Sdílej:
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: 0
Vš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.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.