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ů.
Byla vydána nová verze 3.38 frameworku Flutter (Wikipedie) pro vývoj mobilních, webových i desktopových aplikací a nová verze 3.10 souvisejícího programovacího jazyka Dart (Wikipedie).
Organizace Apache Software Foundation (ASF) vydala verzi 28 integrovaného vývojového prostředí a vývojové platformy napsané v Javě NetBeans (Wikipedie). Přehled novinek na GitHubu. Instalovat lze také ze Snapcraftu a Flathubu.
Byl vydán Debian 13.2, tj. druhá opravná verze Debianu 13 s kódovým názvem Trixie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.
Tak jsem uvnitř podmínky grepu potřeboval vyhodnotit nějakou složitější věc a měl jsem možnost napsat to jako annonymní sub a nebo do. Položil jsem si otázku co bude rychlejší?
Vnitřek podmínky grepu vypadal nějak podobně takhle:
my $attr = $_;
my $successors = $successors{$attr};
$successors
and do {
my $res;
$res = exists $successors->{$_} and last
foreach (predecessors($attr));
!$res
}
my $attr = $_;
my $successors = $successors{$attr};
$successors
and sub {
exists $successors->{$_} && return 0
foreach predecessors($attr);
1
}->()
Výsledný kód jsem trošku benchmarkoval a verze se sub je až o 50% pomalejší (samozřejmě v závislosti na okolní režiji). Ale proč? Odpověď je celkem jednoduchá, annonymní subrutina se pokaždé znovu skompiluje. (Trošku zjednodušuji, ona se ve skutečnosti jednou předkompiluje a pak se jí mění syntaktický kontext, ale ve výsledku je pro každé zavolání vnitřní smyčky vytvořená nová subrutina. Kdybych si ji někam ukládal tak bude pokaždé na jiné adrese, atd.) Dá se tomu nějak zabránit? Jistě, vytvořit immutable annonymní subrutinu a Perl je tak chytrý, že ji skompiluje jen jednou.
my $attr = $_;
my $successors = $successors{$attr};
$successors
and sub {
exists $_[0]->{$_} && return 0
foreach predecessors($_[1]);
1
}->($successors, $attr)
Takový kód je pak prakticky stejně rychlý jako do. Co je na tom zajímavého? Snad jen to, že do v perlu se tak hezky chová, skompiluje se jen jednou i když obsahuje proměnné v syntaktickém kontextu a je tedy rychlejší než použití annonymního sub.
Pokud si chcete taky pohrát, tak zde je text kompletního benchmarku:
#!/usr/bin/env perl
use strict;
use Benchmark qw(:all :hireswallclock);
my $count = 100;
my %successors = map +($_, {$_ => undef}), 1..$count;
sub predecessors {($_[0]-1) .. ($_[0]+1)}
sub none (&@) {
&{$_[0]} && return 0 foreach @_[1..$#_];
1
}
cmpthese(-2, {
'do' => sub {
do {my $attr = $_;
my $successors = $successors{$attr};
do {
my $res;
foreach (predecessors($attr)) {
$res = exists $successors->{$_} and last
}
!$res
}
} foreach 1 .. $count;
},
'sub' => sub {
do {my $attr = $_;
my $successors = $successors{$attr};
sub {
exists $successors->{$_} && return 0
foreach predecessors($attr);
1
}->()
} foreach 1 .. $count;
},
'subimmu' => sub {
do {my $attr = $_;
my $successors = $successors{$attr};
sub {
exists $_[0]->{$_} && return 0
foreach predecessors($_[1]);
1
}->($successors, $attr)
} foreach 1 .. $count;
},
'none' => sub {
do {
my $successors = $successors{$_};
none {$successors->{$_}} predecessors($_);
} foreach 1 .. $count;
},
'evalblock' => sub {
do {my $attr = $_;
my $successors = $successors{$attr};
eval {
my $res;
foreach (predecessors($attr)) {
$res = exists $successors->{$_} and last
}
!$res
}
} foreach 1 .. $count;
},
'evalstr' => sub {
do {my $attr = $_;
my $successors = $successors{$attr};
eval '
my $res;
foreach (predecessors($attr)) {
$res = exists $successors->{$_} and last
}
!$res
'
} foreach 1 .. $count;
},
});
Pro zajímavost jsou doplněny ještě další varianty. Není překvapením, že blokové použití evalu je stejně rychlé jako do nebo immutable sub. Trochu jsem byl zklamán rychlostí při použití krásné elegantní šablonované funkce none. Tam se vlastně stejně jako při normálním annonymním sub pokaždé znovu skompiluje první parametr a jestě ke všemu se tato subrutina volá uvnitř foreach, takže to ve výsledku dopadne hůř. No a nejhorší je eval stringu, nic divného, že 
P.S.: Nakonec jsem se do úplně vyhnul a použil jednu z vlastností if, že vrací hodnotu podmínky. No co, aspoň jsem nahlédl do chování perlu zase o kousek hloub. Ekvivalent shora uvedených kódů pak nakonec vypadá asi takhle:
if (my $successors = $successors{$_}){
my $res;
$res = exists $successors->{$_} and last
foreach (predecessors($_));
!$res
}Ano, to je celý vnitřek podmínky grepu, ušetřím ještě jednu alokaci proměnné, což je podle mých měření dokonce víc než zavolání sub
Tiskni
Sdílej:
do nerobí to isté, čo sub. Ako píšu v dokumentácií, Not really a function..
do jednoducho vyhodnotí blok.
sub vytvorí anonymnú funkciu, ktorej kopíruje kontext (pre ostatných, google: perl closures)