Proběhlo hlasování o používání LLM při vývoji Debianu. Vývojáři Debianu si odhlasovali zodpovědné využívání generativní umělé inteligence.
Sovereign Tech Agency (Wikipedie) prostřednictvím svého fondu Sovereign Tech Fund podpoří vývoj Flatpaku částkou 508 640 eur.
Byla vydána první veřejná verze v7.0-mk2 projektu Multikernel (mklinux), který umožňuje spouštět více nezávislých linuxových jader současně na jednom stroji bez hypervizoru.
Heureka Group uspěla v soudním sporu se společností Google. Městský soud v Praze vydal rozhodnutí v oblasti soukromoprávního vymáhání soutěžního práva. Společnosti Heureka Group přiznal náhradu ušlého zisku ve výši 250 milionů korun, což spolu s úroky z prodlení a náhradou nákladů řízení činí více jak 410 milionů korun. Základem celého sporu bylo protisoutěžní jednání technologického giganta Google v letech 2013 až 2017. Google na
… více »Dnešním dnem končí LTS podpora Debianu 11 s kódovým názvem Bullseye. K dispozici je Extended LTS podpora.
Firma X zaslala předžalobní výzvu vývojáři projektu Nitter (Wikipedia), open-source alternativního frontendu k sociální síti X (ex-Twitter), a provozovatelům instancí jako XCancel, které umožňovaly číst příspěvky bez přihlášení, reklam a javascriptu. Údajně se dopouštějí „sběru dat“. Zdrojový kód Nitteru vývojář archivoval. Vývoj již dříve přerušil v roce 2024 po tehdejším omezení API X. X je dceřiná společnost SpaceXAI Elona Muska, provozující mj. kontroverzního chatbota Grok.
Bylo vydáno Ubuntu 26.04.1 LTS, tj. první opravné vydání Ubuntu 26.04 LTS s kódovým názvem Resolute Raccoon. Přehled novinek a oprav na Discourse.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal Zprávu o stavu kybernetické bezpečnosti ČR za rok 2025 (pdf). Incidentů ubylo, sofistikovanost útočníků roste.
Open source softwarový stack AMD ROCm (Wikipedie) pro vývoj AI a HPC na GPU od AMD byl vydán v nové major verzi 10.0. S ROCm.AI. Přehled novinek v aktualizované dokumentaci.
Finanční skupina Partners se stala minulou neděli obětí kybernetického útoku, při kterém se útočníci dostali k některým osobním údajům klientů. Společnost o tom informovala ve čtvrtek. Ujišťuje, že peníze klientů nejsou v ohrožení. „Kybernetický útok zasáhl část IT infrastruktury naší společnosti. Ihned po zjištění útoku jsme s pomocí externích bezpečnostních odborníků začali intenzivně pracovat na minimalizaci škod. Útočníci se
… více »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)