UBports, nadace a komunita kolem Ubuntu pro telefony a tablety Ubuntu Touch, vydala Ubuntu Touch 24.04-1.2 a 20.04 OTA-12.
Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.0 otevřeného operačního systému pro chytré hodinky AsteroidOS (Wikipedie). Přehled novinek v oznámení o vydání a na YouTube.
WoWee je open-source klient pro MMORPG hru World of Warcraft, kompatibilní se základní verzí a rozšířeními The Burning Crusade a Wrath of the Lich King. Klient je napsaný v C++ a využívá vlastní OpenGL renderer, pro provoz vyžaduje modely, grafiku, hudbu, zvuky a další assety z originální kopie hry od Blizzardu. Zdrojový kód je na GitHubu, dostupný pod licencí MIT.
Byl představen ICT Supply Chain Security Toolbox, společný nezávazný rámec EU pro posuzování a snižování kybernetických bezpečnostních rizik v ICT dodavatelských řetězcích. Toolbox identifikuje možné rizikové scénáře ovlivňující ICT dodavatelské řetězce a na jejich podkladě nabízí koordinovaná doporučení k hodnocení a mitigaci rizik. Doporučení se dotýkají mj. podpory multi-vendor strategií a snižování závislostí na vysoce
… více »Nizozemský ministr obrany Gijs Tuinman prohlásil, že je možné stíhací letouny F-35 'jailbreaknout stejně jako iPhony', tedy upravit jejich software bez souhlasu USA nebo spolupráce s výrobcem Lockheed Martin. Tento výrok zazněl v rozhovoru na BNR Nieuwsradio, kde Tuinman naznačil, že evropské země by mohly potřebovat větší nezávislost na americké technologii. Jak by bylo jailbreak možné technicky provést pan ministr nijak nespecifikoval, nicméně je známé, že izraelské letectvo ve svých modifikovaných stíhačkách F-35 používá vlastní software.
Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 162 (pdf).
Sdružení CZ.NIC, správce české národní domény, zveřejnilo Domain Report za rok 2025 s klíčovými daty o vývoji domény .CZ. Na konci roku 2025 bylo v registru české národní domény celkem 1 515 860 s koncovkou .CZ. Průměrně bylo měsíčně zaregistrováno 16 222 domén, přičemž nejvíce registrací proběhlo v lednu (18 722) a nejméně pak v červnu (14 559). Podíl domén zabezpečených pomocí technologie DNSSEC se po několika letech stagnace výrazně
… více »Google představil telefon Pixel 10a. S funkci Satelitní SOS, která vás spojí se záchrannými složkami i v místech bez signálu Wi-Fi nebo mobilní sítě. Cena telefonu je od 13 290 Kč.
Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Fedora 43 Asahi Remix s KDE Plasma už funguje na M3. Zatím ale bez GPU akcelerace. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.
Red Hat představil nový nástroj Digital Sovereignty Readiness Assessment (GitHub), který organizacím umožní vyhodnotit jejich aktuální schopnosti v oblasti digitální suverenity a nastavit strategii pro nezávislé a bezpečné řízení IT prostředí.
int seq[10] = { 11, -8, 92, 22, 7, -25, -95, 63, 3, 43 };
K seřazení můžeme použít například knihovní funkci qsort.
qsort(seq, 10, sizeof(int), compar);Řadicí algoritmy vyžadují ke své činnosti funkci, která porovná dva prvky z řady. Pro vzestupné řazení funkcí
qsort musí tato funkce vracet celé číslo (a) menší než, (b) rovno nebo (c) větší než nula, když je první prvek z této dvojice (a) menší než, (b) roven nebo (c) větší než prvek druhý. Pro náš případ to bude rozdíl těchto dvou prvků.
int compar(const void *p1, const void *p2)
{
return *(const int *)p2 - *(const int *)p1;
}
A jako výsledek dostaneme správně seřazenou řadu.
92 63 43 22 11 7 3 -8 -25 -95A teď kdo uhádne, co je na příkladu výše špatně? Nebudu vás napínat. Implementace selže na číslech, jejichž rozdíl se nevleze do datového typu
int. Uvažme například následující řadu.
int seq[10] = { -1951288147, 51, -2022032484, 79, -1227112550, 1760804629, 75, -2038298820, 1264956463, 22 };
Po volání qsort bude řada vypadat takto:
79 51 -1227112550 -1951288147 -2022032484 -2038298820 1760804629 1264956463 75 22Podobný problém nastane také u porovnání datových typů širších než typ
int. Řešení může být v našem případě porovnání:
int compar(const void *p1, const void *p2)
{
return (*(const int *)p2 > *(const int *)p1) - (*(const int *)p2 < *(const int *)p1);
}
A výsledek (tentokrát správně):
1760804629 1264956463 79 75 51 22 -1227112550 -1951288147 -2022032484 -2038298820Ještě dodám, že problém se týká i příbuzných funkcí jako například
bsearch.
Tiskni
Sdílej:
int i;
for (i = 1; i > 0; i++);
muze prekladac optimalizovat na nekonecny cyklus. Na nekterych platformach pri preteceni dostanete SIGFPE.
Měl byste se naučit rozlišovat mezi empiricky odpozorovaným chováním jednoho konkrétního překladače na jedné konkrétní platformě a tím, co garantuje norma jazyka.
Např. gcc 4.8.1 na x86_64 přeloží s -O3 funkci
int main() {
int i;
for (i = 1; i > 0; i++)
;
printf("%d\n", i);
return 0;
}
na
0000000000400410 <main>: 400410: eb fe jmp 400410 <main> 400412: 66 90 xchg %ax,%ax
Tj. nejen že z toho udělá nekonečný cyklus, ale rovnou vyhodí i volání printf() a návrat z funkce za ním.
Těžko říct. Ale třeba v jádře je běžné, že v závislosti na konfiguračních volbách (což jsou vlastně makra) může někde z preprocesoru vypadnout kus kódu, který je zbytečný, a počítá se s tím, že si s tím optimalizátor poradí.
Na druhou stranu se ale taky občas stane, že nějaká vynalézavá optimalizace novějšího gcc (třeba "není potřeba testovat pointer na null, když už jsme ho dereferencovali") naopak věci rozbila.
Jinak, jestli te to zajima, tak se podivej do "Dragon book", kapitola o "Symbolic analysis"
Je to optimalizace ktera umozni urcit jak se promenne v cyklu chovaji v zavislosti na poctu iteraci. Tim je mozne odstranit treba nasobeni, indexaci, podminky, ...
Napr. to umozni prepsat tenhle cyklus:
for (m = 10; m < 20; m++) {
x = m*3;
A[x] = 0;
}
na:
for (ptr = A+30; ptr <= A+57; ptr += 3) {
*ptr = 0;
}
$ gcc --version gcc (Debian 6.2.0-10) 6.2.0 20161027 [...] $ gcc -o test test.c test.c: In function ‘main’: test.c:7:9: warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration] printf("%d\n", i); ^~~~~~ test.c:7:9: warning: incompatible implicit declaration of built-in function ‘printf’ test.c:7:9: note: include ‘stdio.h’ or provide a declaration of ‘printf’ $ ./test -2147483648
Tady si sam protirecite, nebot pouzivate chovani jednoho konkretniho prekladace na jedne konkretni platforme jako dukaz.
Vůbec ne. Vy jste tvrdil, že to překladač udělat nemůže. To je obecné tvrzení, takže příklad nestačí. Já jsem vám ukázal, že vaše tvrzení obecně neplatí a na to samozřejmě jeden protipříklad stačí.
Já jsem nijak nerozporoval, že existuje nějaký překladač, který s konrétními volbami u optimalizaci neprovede. Ale rozhodně to neplatí pro všechny - a i kdyby náhodoou ano, stejně byste na to nemohl spoléhat, protože norma to chování nezaručuje, takže by se vám to mohlo rozbít hned s následující verzí.
Ještě pro pořádek:
C99 specifikuje int jako znamenkovy typ, takze pokud pretece, podminka se pretoci do < 0
A kde konkrétně se to o "přetočení do < 0" v té normě píše?
Napr. GCC 6.x to kompiluje korektne, takze to co pozorujete je spis bug v gcc optimizeru.
gcc6 se chová úplně stejně jako gcc 4.8.1, zkuste si to přeložit s -O3. S -O0 tu optimalizaci neprovede ani gcc 4.8.1, což je celkem logické, když mu řeknete, že optimalizovat nemá.
sort. :) Já měl zafixováno, že by to mělo nabývat jen hodnot -1, 0, 1.
Krásné je v Perlu 6 chování sort, které řadí podle cmp.
Chování cmp:
perl6 -e 'say 2 cmp 12, 12 cmp "12a", "12a" cmp 2' LessLessLessPole, kde následující prvek vznikne seřazením předchozího
perl6 -e 'say ((12, 2, "12a"), *.sort ... * ).head(5)' ((12 2 12a) (12a 2 12) (12 12a 2) (2 12 12a) (12a 2 12))