Programovací jazyk Python byl vydán v nové major verzi 3.14.0. Podrobný přehled novinek v aktualizované dokumentaci.
Bylo oznámeno, že Qualcomm kupuje Arduino. Současně byla představena nová deska Arduino UNO Q se dvěma čipy: MPU Qualcomm Dragonwing QRB2210, na kterém může běžet Linux, a MCU STM32U585 a vývojové prostředí Arduino App Lab.
Multiplatformní open source voxelový herní engine Luanti byl vydán ve verzi 5.14.0. Podrobný přehled novinek v changelogu. Původně se jedná o Minecraftem inspirovaný Minetest v říjnu loňského roku přejmenovaný na Luanti.
Byla vydána nová stabilní verze 6.10 (YouTube) multiplatformního frameworku a GUI toolkitu Qt. Podrobný přehled novinek v poznámkách k vydání.
Netwide Assembler (NASM) byl vydán v nové major verzi 3.00. Přehled novinek v poznámkách k vydání v aktualizované dokumentaci.
Linuxová distribuce Frugalware (Wikipedie) ke konci roku 2025 oficiálně končí.
Byla vydána nová verze 3.0.6 svobodné aplikace pro úpravu a vytváření rastrové grafiky GIMP (GNU Image Manipulation Program). Přehled novinek v oznámení o vydání a v souboru NEWS na GitLabu. Nový GIMP bude brzy k dispozici také na Flathubu.
Americký výrobce čipů AMD uzavřel s americkou společností OpenAI smlouvu na několikaleté dodávky vyspělých mikročipů pro umělou inteligenci (AI). Součástí dohody je i předkupní právo OpenAI na přibližně desetiprocentní podíl v AMD.
Byla vydána nová verze 10.1 sady aplikací pro SSH komunikaci OpenSSH. Uživatel je nově varován, když se nepoužívá postkvantovou výměnu klíčů.
while (int a = getData()) { // kód }
for (int a = getData(); a; a = getData()) { // kód }Nicméně tohle už v C++ validní není:
do (int a = getData()) { // kód } while ((a = getData()));Takže nás to nutí psát ošklivé konstrukce jako třeba:
{ int a = getData(); do { // kód } while ((a = getData())); }Smyslem je pracovat uvnitř cyklu s hodnotou proměnné
a
, ale podmínku testovat až na jeho konci.
Přitom ale chceme mít rozsah platnosti proměnné omezen na daný cyklus.
Že by po podobné konstrukci C++ byla poptávka, můžeme soudit podle dotazů zde a zde.
Řešením může být tato obskurní knihovna.
A následný kód je najednou validní.
do (int a = getData()) { // kód } while ((a = getData()));Důležité je, že tato knihovna neporuší původní syntaxi klíčového slova
do
v cyklu do-while.
Ještě dodám, že ty dvojité závorky jsou tam záměrně. Jinak by GCC vypsalo varování:
warning: suggest parentheses around assignment used as truth value [-Wparentheses]Pokud se vám takové konstrukce líbí, tak z tohohle a tohohle budete nadšeni.
Tiskni
Sdílej:
do { ... } while( getData() );případně, pokud bych chtěl ten výsledek, tak
int a; do { ... } while(( a=getData() ));
a
definovaná, ale během první iterace nebude mít definovanou hodnotu!
A k čemu je tato konstrukce dobrá? Proměnná "a" vznikne až v podmínce u while na konci bloku, takže se nemůže použít uvnitř, a zanikne při opuštění cyklu.Nicméně tohle už v C++ validní není: do { // kód } while (int a = getData());
while (int a = getData()) {
// kód
}
Je moc uzitecna konstrukce, obdobne jako:
if (int a = getData()) {
...
}
A za tohle bych programatora zabil:
switch (int a = getData()) do default: {
// kód
} while ((a = getData()));
Blog prispevek naprosto onicem. C++ ma milion dalsich vlastnosti, ktere by si zaslouzili hate, ale tohle zrovna ne.
Nicméně tohle už v C++ validní není: do (int a = getData()) { // kód } while ((a = getData()));Jen pro info. Toto se také nepřeloží :D.
#include <iostream> #include <functional> int glob = 10; template <typename TData> void do_loop(const std::function<TData ()> &getter, const std::function<void (TData&)> &worker) { TData data = getter(); do { worker(data); } while ((data = getter())); } int main() { int i = 65; do_loop<int>([&]() { return glob--;}, [&](int &d){ std::cout << i + d << "\n"; }); return 0; }Jinak ten zápis s dvojím voláním
getData()
mi přijde úplně normální...
Obskurní konstrukce? To by se to taky mohlo napsat takto:
Jinak ten zápis s dvojím voláním getData()
mi přijde úplně normální...
Myslím tu třetí možnost s do-while zabaleným scopu.