Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.
Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.
Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.
Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.
Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.
Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.
Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).
OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.
Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.
R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.
my $radek = <>; my %thinks; @thinks{qw(jmeno prijmeni telefon)} = split ' ', $radek; while (my ($name, $value) = each %thinks) { print "$name = $value\n"; }Ale to jsem ti asi moc nepomohl, protože to není setřízené. A nebo takhle?
my $radek = <>; my @names = qw(jmeno prijmeni telefon); my %thinks; @thinks{@names} = split ' ', $radek; foreach my $name (@names) { print "$name = $thinks{$name}\n"; }Nebo takhle:
my $radek = <>; my @names = qw(jmeno prijmeni telefon); my $i = 0; no strict 'refs'; ${$names[$i++]} = $_ foreach (split ' ', $radek)[0..$#names]; foreach (@names) { print "$_ = ${$_}\n"; }To už bylo trochu silnější kafe, že To už by bylo lepší
my $radek = <>; my @names = qw(jmeno prijmeni telefon); my @array = split ' ', $radek; for(my $i=0; $i<@names; $i++){ print "$names[$i] = $array[$i]\n"; }Já osobně bych použil tohle nebo tu druhou možnost.
sub { map { print shift, ': ', $_, "\n"; } split ':', scalar <> || exit }->(qw(meno prijmeni telefon)) while 1;
sub { map print(shift, ": $_\n"), (split / /, scalar <>)[0..$#_] or exit }->(qw(meno prijmeni telefon)) while 1;nebo
sub { map print(shift, ": $_\n"), split / /, scalar <>, @_ or exit }->(qw(meno prijmeni telefon)) while 1;Podle toho jak se to má chovat.
Já jsem teda, (nejen) co se týče PERLu, lama , ale můžu se zeptat jakou má výhodu použít místo hashe dvě pole? Berte to jako čistě technický dotaz bez jakýchkoliv narážek - jen mě zajímá, jestli je to paměťově méně náročné nebo výkonnější řešení než použít jeden hash... Děkuji.
my @names = qw(jmeno prijmeni telefon) my @arrays = ([qw(Franta Novák 564321564)]) x 1000000;versus
my @seznam = ({jmeno => 'Franta', prijmeni => 'Novák', telefon => 564321564}) x 1000000;To druhé zabere poněkud víc paměti a přístup k jednotlivým položkám je o chloupek pomalejší i když se s tím zase líp pracuje. Jedním ze spůsobů jak to udělat elegantně s polem je třeba
my $counter; BEGIN { my $index = $counter++; sub jmeno() {$index} } BEGIN { my $index = $counter++; sub prijmeni() {$index} } BEGIN { my $index = $counter++; sub telefon() {$index} } my @seznam; while (<>) { chomp; push @seznam, [(split ' ')[0 .. $counter-1]]; } foreach (@seznam) { my @record = @$_; print <<EOF; jmeno: $record[jmeno] prijmeni: $record[prijmeni] telefon: $record[telefon] EOF }Jen podotýkám, že funkce s prototypem
jmeno
, prijmeni
a telefon
jsou de facto konstanty a vloží se inline. Dělám to samé co modul const
.
dalsie elegantne riesenie (skoro zhodne s tymi konstantami):
package aaa; use fields qw(jmeno prijmeni telefon) package main; my aaa $array = [ 0, split / /, $radek ]; print "jmeno: $array->{jmeno}\n";
pokial ma pamat neklame (moja, nie RAM), tak perl indexuje vsetky hodnotu raz pouzite ako kluc v hash-i, takze napr retazec "prijmeni" je pre vsetky hashe ulozeny iba raz a ako kluc sa pouziva jeho index.
$ perl -e '@seznam = ({jmeno => 'Franta', prijmeni => 'Novak', telefon => 564321564}) x 10000000; sleep 10'& $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27137 236440 267004 perl -e @seznam = ({jmeno => Franta, prijmeni => Novak, telefon => 564321564}) x 10000000; sleep 10 $ perl -e 'my @names = qw(jmeno prijmeni telefon);my @arrays = ([qw(Franta Novák 564321564)]) x 10000000; sleep 10'& $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27143 236456 267004 perl -e my @names = qw(jmeno prijmeni telefon);my @arrays = ([qw(Franta Novák 564321564)]) x 10000000; sleep 10Zdá se, že máte pravdu, takže zůstavá už jen ten ždibíček rychlosti.
$ perl -e '@names = qw(jmeno prijmeni telefon);for($i=0;$i<1000000;$i++){push @arrays, [qw(Franta Novák 564321564)]};print "done\n"; sleep 10'& done $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27376 209568 213616 perl -e @names = qw(jmeno prijmeni telefon);for($i=0;$i<1000000;$i++){push @arrays, [qw(Franta Novák 564321564)]};print $ perl -e 'for($i=0;$i<1000000;$i++){push @arrays, {jmeno => Franta, prijmeni => Novak, telefon => 564321564}};print "done\n"; sleep 10'& done $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27512 248860 252932 perl -e for($i=0;$i<1000000;$i++){push @arrays, {jmeno => Franta, prijmeni => Novak, telefon => 564321564}};print "done $ perl -e 'sleep 10'& $ ps -o pid,rss,vsz,cmd -Cperl PID RSS VSZ CMD 27554 1240 5320 perl -e sleep 10Ten rozdíl je po odečtení režije perlu skoro celá pětina. A to jsou ty klíče relativně krátké.
PID RSS VSZ CMD 5873 315240 317176 perl -e '@list = map { {$_ => $_ } } 0 .. 1000000; print "done\n"; sleep 10' 5880 393688 395572 perl -e '@list = map { {$_ => $_, $_+1 => $_, $_+2 => $_} } 0 .. 1000000; print "done\n" 5888 268208 270132 perl -e '@list = map { {1 => $_, 2 => $_, 3 => $_} } 0 .. 1000000; print "done\n"; sleep 10' 5894 268208 270132 perl -e '@list = map { {10001 => $_, 10002 => $_, 10003 => $_} } 0 .. 1000000; print "done\n"; sleep 10' 5898 205440 207300 perl -e '@list = map { [$_, $_, $_] } 0 .. 1000000; print "done\n"; sleep 10;
PID RSS VSZ CMD 5921 439388 478164 perl -e '@list = map { {$_ => $_, $_+1000000 => $_, $_+2000000 => $_} } 0 .. 1000000; print "done\n"; sleep 10;'
PID RSS VSZ CMD 29161 260520 264708 perl -e @list = map +{1 => undef, 2 => undef, 3 => undef}, 0 .. 1000000; print "done\n"; sleep 10 29120 260532 264708 perl -e @list = map +{"a"x100 => undef, "b"x100 => undef, "c"x100 => undef}, 0 .. 1000000; print "done\n"; sleep 10Což značí, že máte patrně pravdu. Tím se to dost podobá implementaci dict v pythonu.
PID RSS VSZ CMD 29709 487364 491560 perl -e @keys = map chr(ord("a")+$_)x100, 0..25; @list = map +{map +($keys[$_], undef), 0..25}, 0 .. 100000; print "don 29742 254184 258316 perl -e @keys = 0..25; @list = map +{map +($keys[$_], undef), 0..25}, 0 .. 100000; print "done\n"; sleep 10Zdá se, že perl má svá tajemství. Uložení klíčů není tak neoptimální jak jsem si myslel, ale není to ani tak ideální jak jste tvrdil.
map
, občas dělá něco jiného než by od něj člověk čekal
PID RSS VSZ CMD 30214 83904 87972 perl -e @keys = map chr(ord("a")+$_)x100, 0..25; for($i=0; $i<100000;$i++){push @list,{map +($keys[$_], undef), 0..25}}; 30218 83884 87964 perl -e @keys = 0..25; for($i=0; $i<100000;$i++){push @list,{map +($keys[$_], undef), 0..25}}; print "done\n"; sleep 10Pravdu asi máte vy.
PID RSS VSZ CMD 6271 109856 111536 perl -e @keys = 0..25; sub aaa { {map +($keys[$_], undef), 0..25}}; for($i=0; $i<100000;$i++){push @list,aaa }; print "done\n"; sleep 10takze pravda bude niekde uprostred, asi zalezi na konexte, kde sa pole vytvori. No nic, idem hladat, kde som sa to vlastne docital.
Děkuji za vyčerpávající odpověď. Člověk se stále učí
Možná jsem to blbě pochopil, ale není to tím, že používáš @seznam (tedy pole) místo %seznam (tedy hash)?
$a = 1; $b = 2; @seznam = ($a, $b);a chcete aby vystup bol
a = 1 b = 2?
$hash{a} = 1; $hash{b} = 2; # nezalezi na poradi while (my ($a, $b) = each %hash) { print $a, $b, "\n"; } # zalezi na poradi for (sort keys %hash) { print $_, $hash{$_}, "\n"; }
use Data::Dumper; my $radek = <>; my @array = my ($jmeno, $prijmeni, $telefon) = split ' ', $radek; print Data::Dumper->Dump(\@array, [qw(jmeno prijmeni telefon)])
Tiskni Sdílej: