Portál AbcLinuxu, 6. května 2025 08:37
Docela mne překvapuje, že někdo opravdu napíše
!x & y
s tímhle mezerováním, pokud tím chce říct, že se negace vztahuje na výsledek &
.
V tomto případě bych byl navíc s automatickým opravováním hodně opatrný, protože jakkoli je "!x & y
" logický nesmysl, nedivil bych se, kdyby některé výskyty byly ve skutečnosti překlepem v
!x && y
&&
" moc časté nebude, nanejvýš nějaké CONFIG_*
IS_ENABLED()
. Na druhou stranu tak ale nechytne případy, kdy druhý operand konstatní není.
Ideálne by bolo impementovať "no idiot syntax", pretože v Cečku ide napísať nezmyselných konštrukcií kopec a upozorňovať na ich výskyt.Jen jestli by ti pak z C něco zbylo :>
jakkoli je "!x & y
" logický nesmysl
A to jako proc? Co treba todle:
for (i = 30; i > 0; i--) { x = function_returning_error_code(); printf("%s; ", !x << i & report_pass_mask ? "pass" : "----"); } x = function_returning_error_code(); printf("%s\n", !x & report_pass_mask ? "pass" : "----");
1. Bez toho, abyste té funkci aspoň předal číslo testu, to moc smyslu nedává.
2. Abyste tam dostal tu konstrukci, musíte úplně zbytečně vytáhnout jednu iteraci mimo smyčku. Zhoršení čitelnosti, riziko zavlečení chyby, …
3. Stejně křečovité a samoúčelné je použití "!x << i & mask
" místo přirozenějšího a čitelnějšího "!x && (mask & BIT(i))
"
4. A to nás přivádí k otázce, zda ty testy, na jejichž výsledku nezáleží, vlastně vůbec chceme spouštět. )
1. Bez toho, abyste té funkci aspoň předal číslo testu, to moc smyslu nedává.Treba ta funcke pouziva globalni promenou, jedna se o priklad, nechapu, proc to resite.
2. Abyste tam dostal tu konstrukci, musíte úplně zbytečně vytáhnout jednu iteraci mimo smyčku. Zhoršení čitelnosti, riziko zavlečení chyby, …Prvni a nebo posledni iterace se vytahuje celkem bezne, protoze byva jina. V existujicim kodu jich najdete spousty, ilustroval jsem to na prikladu odlisneho formatovani posledni hodnoty.
3. Stejně křečovité a samoúčelné je použití "Syntakticky i semanticky je to spravne, tudiz to nemuze byt logicky nesmysl a to tu jde. Krecovitost je subjektivni.!x << i & mask
" místo přirozenějšího a čitelnějšího "!x && (mask & BIT(i))
"
4. A to nás přivádí k otázce, zda ty testy, na jejichž výsledku nezáleží, vlastně vůbec chceme spouštět. )Jedna se o priklad, chtel jsem ho ponechat co nejjednodussi, abych vam usnadnil jeho pochopeni. Bohuzel se mi to nepovedlo.
ano .. rika se mu programator, developer nebo vyvojar
a ano, tady se nepise o takove samzrejmosti jako je refactoring ..
u kernelu se velice rychle mění jeho vlastní API a to bohužel i v setinkových verzích
To je hlavně hluboké nepochopení toho, co ty verze (ne)znamenají. Přechod mezi 3.19 a 4.0 nebyl (až na rozbití pár neprozíravých skriptů) o nic významnější než třeba právě mezi 3.18 a 3.19.
Ano, souhlasím s tím, že toto by si měli hlídat hlavně vývojáři Nvidie
Každý svého štěstí strůjcem. Když se někdo rozhodne poskytovat closed source out of tree driver a někdo jiný na něj spoléhat, je to jejich volba, ale musejí počítat s následky.
ale prostě minimálně u longterm kernelů by API mělo být zachováno po celou dobu životnosti
Jak to souvisí s tím, jestli se změnilo mezi 3.18 a 3.19?
Souvisí to s tím, že by se u lt kernelu nemělo rozbít API například mezi verzí 4.4.18 a 4.4.19Proč by ne? LT jádro znamená, že aktualizace přinášejí téměř výhradně opravy chyb a že by se jeho nasazením nemělo nic rozbít. "Nic rozbít" se ale - jako vždy - vztahuje pouze na in-tree kód. Pokud někdo používá out-of-tree ovladače, to už je napsáno o dva příspěvky výš...
ale prostě minimálně u longterm kernelů by API mělo být zachováno po celou dobu životnosti (možná dokonce je, věci okolo jádra moc nesleduji)No to je. Longterm je třeba 3.14.x. 3.x je normální další verze a 4.0 se od 3.19 neliší nijak víc než 3.19 od 3.18. Už 10 let se na major a minor verze nehraje.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.