Byla vydána (Mastodon, 𝕏) první RC verze GIMPu 3.2. Přehled novinek v oznámení o vydání. Podrobně v souboru NEWS na GitLabu.
Eugen Rochko, zakladatel Mastodonu, tj. sociální sítě, která není na prodej, oznámil, že po téměř 10 letech odstupuje z pozice CEO a převádí vlastnictví ochranné známky a dalších aktiv na neziskovou organizaci Mastodon.
Byla vydána nová major verze 5.0 svobodného 3D softwaru Blender. Přehled novinek i s náhledy a videi v obsáhlých poznámkách k vydání. Videopředstavení na YouTube.
Cloudflare, tj. společnost poskytující "cloudové služby, které zajišťují bezpečnost, výkon a spolehlivost internetových aplikací", má výpadek.
Letos se uskuteční již 11. ročník soutěže v programování Kasiopea. Tato soutěž, (primárně) pro středoškoláky, nabízí skvělou příležitost procvičit logické myšlení a dozvědět se něco nového ze světa algoritmů – a to nejen pro zkušené programátory, ale i pro úplné začátečníky. Domácí kolo proběhne online od 22. 11. do 7. 12. 2025 a skládá se z 9 zajímavých úloh různé obtížnosti. Na výběru programovacího jazyka přitom nezáleží – úlohy jsou
… více »Byla vydána nová verze 2.52.0 distribuovaného systému správy verzí Git. Přispělo 94 vývojářů, z toho 33 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání.
VKD3D-Proton byl vydán ve verzi 3.0. Jedná se fork knihovny vkd3d z projektu Wine pro Proton. Knihovna slouží pro překlad volání Direct3D 12 na Vulkan. V přehledu novinek je vypíchnuta podpora AMD FSR 4 (AMD FidelityFX Super Resolution 4).
Poštovní klient Thunderbird byl vydán v nové verzi 145.0. Podporuje DNS přes HTTPS nebo Microsoft Exchange skrze Exchange Web Services. Ukončena byla podpora 32bitového Thunderbirdu pro Linux.
U příležitosti státního svátku 17. listopadu probíhá na Steamu i GOG.com již šestý ročník Czech & Slovak Games Week aneb týdenní oslava a také slevová akce českých a slovenských počítačových her.
Byla vydána nová verze 9.19 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček BirdNET-Go, tj. AI řešení pro nepřetržité monitorování a identifikaci ptáků.
Momentalne tunim jednu aplikaci na vykon a presto, ze jsem pri posledni aplikaci, co jsem psal v Basicu nadaval jak spacek. Postesklo se mne po jedne uzasne basicove konstrukci -- ON <cislo> GOTO <adresa1>, <adresa2>...
Jelikoz instrukce goto se v nekterych kruzich nesmi ani vyslovit, bude asi velke rouhani uvazovat o jeji parametrizaci.
Predstavte si, ze mate smycku typu (viz nize) a tato smycka, probiha v aplikaci miliardkrat.
while (podminka) {
int operace = getOperace();
switch (operace) {
case 0: delej_neco(); break;
case 1: delej_neco_jineho(); break;
...
}
}
Vypada to docela efektivne. Problem je, ze pri kazdem pruchodu se testujji vsechny moznosti, dokud se ta spravna nenajde -- slozitost O(n) k poctu moznosti. Pri poctu milard pruchodu, uz to prestane byt zanedbatelne. Jedno reseni je usporadat hodnoty podle pravdepodobnosti. Ale to nebyva zrovna elegantni. Dalsi reseni je prasit...
Pri hledani informaci o inlinovani funkci, jsem objevil zajimave rozsireni GCC. Diky operatoru && muzete pristupovat k jednotlivym labelum jako k hodnotam.
Pozor -- toto funguje jenom v gcc, jestli je to dobre nebo spatne nevim, kazdopadne melo by se to pouzivat pouze pokud tusite co delate.
void *ptr; if (a == 1) ptr = &&nejaky_label1; else ptr = &&nejaky_label2; ... goto *ptr; ... nejaky_label1: nejaky_label2:
Neni to sice nejlepsi priklad, ale kdyz si vezmeme ten priklad se switch, uz to muze byt uzitecnejsi
void * op_table[] = { &&case_0, &&case_1, &&case_2, ...}
while (podminka) {
goto *op_table[getoperace];
case_0: delej_neco(); goto complete;
case_1: delej_neco_jineho(); goto complete;
...
complete:
}
Je to sice malinko hardcore, ale obcas to dava i lepsi vysledky, jelikoz to ma konstantni slozitost vzhledem k poctu moznosti.
Tiskni
Sdílej:
Mimochodem, IBM kvůli přítomnosti v GCC přidalo tohle rozšíření do vlastního kompilátoru pro AIX.
Respektive dopad callů na výkon je o tolik menší, že se nevyplatí, takže se ani nedělá. Větvení podle vypočítané hodnoty, respective computed call, je prakticky bez režie.
Taky mi je trošku líto, že to s těmi funkcemi neběhá tak rychle, jak by třeba mohlo. Na druhou stranu, pokud je computed goto zapotřebí k dosažení potřebného výkonu, není to ještě konec světa.
Mně to nepřijde jako špatné použití skoku. Jeho smysl se je přeci poměrně jasně daný, tak proč se mu bránit?
static SenseOfIrony i = new SenseOfIrony();
error: conversion from ‘SenseOfIrony*’ to non-scalar type ‘SenseOfIrony’ requested
#include <stdio.h>
#include <stdlib.h>
void akce0() {
printf("Akce 0\n");
}
void akce1() {
printf("Akce 1\n");
}
void akce2() {
printf("Akce 2\n");
}
void test(int akce) {
void (*op_table[])() = { akce0, akce1, akce2 };
if (akce >= 0 && akce <= 2)
op_table[akce]();
else
printf("Akce mimo rozsah.\n");
}
int main(int argc, char *argv[])
{
char *p;
int akce;
if (argc < 2) {
printf("syntax: test číslo akce\n");
return 1;
}
akce = strtol(argv[1], &p, 0);
if (p == NULL || *p != '\0') {
printf("Chybné zadání.\n");
return 0;
}
printf("Volám akci...\n");
test(akce);
return 0;
}
goto complete; mi přijde jako zbytečnost - break udělá to samé.
(Hm, takže je to vlastně jedno
)
goto naprogramoval jednou průvodce v Turbo Pascalu.
Ostatne, tohle mluvi samo za sebe:
anicka@bia:/usr/src/linux> grep -r goto . | wc -l
37852
grep -cr na rozvětvený adresářový strom?
Na tom příkladu je podstatné, že ten grep bere vstup z pajpy...
Takhle dostaneš výstup pro každý soubor zvlášť. Ještě pořád by se to asi dalo vykousat třeba tailem a posčítat jako oneliner, ale to by už bylo skoro na kopanec od mistra Foo a zlaté wc a vůbec
14:47:10 ganymede:/usr/src/linux$ time find . -type f| xargs cat | grep -c goto 37926 real 2m1.915s user 0m1.612s sys 0m5.500s 14:51:11 ganymede:/usr/src/linux$ time grep -r goto . | wc -l grep: varování: ./debian/linux-image-2.6.17.4/lib/modules/2.6.17.4/source: smyčka pro rekurzivní průchod grep: varování: ./debian/linux-image-2.6.17.4/lib/modules/2.6.17.4/build: smyčka pro rekurzivní průchod 37918 real 1m43.943s user 0m1.828s sys 0m3.848sjen by me zajimalo proc se vysledky lisi :/
Dovolím si citovat Lukův příspěvek z jedné diskuze:
Že je goto hřích se říkalo v dobách, kdy se přecházelo z Basicu a kdekdo cpal goto úplně všude. goto má svůj význam, a např. v linuxovém jádru se vyskytuje celkem hustě.Nicméně já mam velmi rád objektové programování, takže mě se goto a podobné konstrukce taky rozhodně nelíbí
Ale já vubec nemusím C/C++, mám rád vyšší jazyky
Paušální odsouzení obvykle nejsou k ničemu. Vzpomínám si na člověka, který nás učil programování na gymplu. Ten mi byl schopen tvrdit, že když používám v Turbo Pascalu Exit (předčasný návrat z procedury nebo funkce, tj. obdoba céčkového return), stává se tím můj program nepřehledným a že přehlednější by bylo vnořit do sebe deset ifů…
Takže je potřeba si uvědomit, proč tam to goto je a zda přispívá k přehlednosti a srozumitelnosti kódu nebo ho naopak zatemňuje. Koneckonců vyšší jazyky běžně mají konstrukce, které jsou jen jinak pojmenované goto - v C je to třeba return, break nebo continue. A nebo třeba celý mechanismus výjimek, to je také jen maskované goto.
goto i v implementacích Pascalu, které neměly s Borlandem nic společného.
To se pohodlností a praktičností nedá srovnávat... možná tak kdybyste přirovna výjimky k nějakému hypergoto^2
return (předčasný), break nebo continue a společně ukazují, že při řešení chybových stavů může narušení toho ideálu vést naopak ke značnému zpřehlednění programu.
goto hluboký smysl kvůli přehlednosti kódu. V některých funkcích jsou někdy i desítky míst, kde něco může selhat. Protože se většinou musí provést nějaký úklid (něco odregistrovat, snížit počet referencí, uvolnit paměť apod.), nelze jen tak z funkce vyskočit. Proto by to jinak vedlo buď na mnoho vnořených podmínek nebo (při rozkladu na více funkcí) na celou kaskádu volání, ve kterých by se nikdo nevyznal. Proto se používá goto - při vhodně pojmenovaných návěštích je takový kód přehledný a srozumitelný.
“
No jo, až na to, že volání metody je computed call/computed goto a ještě zkřížený se sebemodifikujícím programem...to by měli zakázat, že jo!
až na to, že volání metody je computed call/computed goto
…volání virtuální metody…
Nezajímá mě jakým způsobem je volání metody realizované
Zajímá mě jen jak je to přehledné a praktické a zapadá to do daného paradigmatu
Nezajímají mě stacky, registry, instrukce procesoru... o to ať se starají jiní
To že se nechci zabývat nízkoúrovňovými věcmi neznamená že nemůžu programovat
Samozřejmě že třeba nějaký výkonný grafický engine (nebo podobně náročné věci) bych bohužel asi ve vysokoúrovňovém jazyku nenapsal, ale to já ani nepotřebuju...
on ... goto' není zdaleka nejúžasnější basicová vymoženost. Třeba na Spectru tahle konstrukce nebyla, ale zato argumentem goto mohl být výraz… :-)
GOTO SIN(I) ...
EINE: EINE Is Not EMACS. :)
ZWEI: ZWEI Was EINE Initially. :D
Co to je proboha za patičku?

Implementace EMACSu na raných lispovských počítačích v druhé polovině 70. let.
http://en.wikipedia.org/wiki/EINE
http://en.wikipedia.org/wiki/Zwei