Byl vydán Linux Mint 22.2 s kódovým jménem Zara. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze novou XApp aplikaci Fingwit pro autentizaci pomocí otisků prstů nebo vlastní fork knihovny libAdwaita s názvem libAdapta podporující grafická témata. Linux Mint 22.2 bude podporován do roku 2029.
Čínská společnost Tencent uvolnila svůj AI model HunyuanWorld-Voyager pro generování videí 3D světů z jednoho obrázku a určené trajektorie kamery. Licence ale nedovoluje jeho používání na území Evropské unie, Spojeného království a Jižní Koreje.
Blender Studio se spojilo s kapelou OK Go a výsledkem je videoklip k písni Impulse Purchase. Stejně jako samotný 3D software Blender je i ve videoklipu použitý animovaný chlápek open source. Kdokoli si jej může stáhnout a upravovat.
Zig Software Foundation stojící za programovacím jazykem Zig publikovala finanční zprávu za rok 2024. Současně s prosbou o finanční příspěvek.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za srpen (YouTube). Vypíchnuta je podpora Tabulek Google, implementace Gamepad API a Cookie Store API nebo také podpora WebGL na Linuxu.
openSUSE Leap 16, včetně Leap Micra 6.2+, nově nabízí 24 měsíců podpory pro každé vydání. To je dva roky aktualizací a stability, což z něj činí nejdéle podporovanou komunitní distribuci vůbec. Leap se tak stává ideální platformou pro všechny, kdo hledají moderní, stabilní a dlouhodobě podporovanou komunitní Linux distribuci.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) vydal dne 3. 9. 2025 VAROVÁNÍ před hrozbou v oblasti kybernetické bezpečnosti spočívající v předávání systémových a uživatelských dat do Čínské lidové republiky a ve vzdálené správě technických aktiv vykonávané z území Čínské lidové republiky. Varováním se musí zabývat povinné osoby podle zákona o kybernetické bezpečnosti.
Americká internetová společnost Google nemusí prodat svůj prohlížeč Chrome ani operační systém Android. Rozhodl o tom soud ve Washingtonu, který tak zamítl požadavek amerického ministerstva spravedlnosti. Soud ale firmě nařídil sdílet data s jinými podniky v zájmu posílení konkurence v oblasti internetového vyhledávání. Zároveň Googlu zakázal uzavírat dohody s výrobci mobilních a dalších zařízení, které by znemožňovaly
… více »Prvního září ozbrojení policisté zatkli na na londýnském letišti Heathrow scénáristu a režiséra Grahama Linehana, známého především komediálními seriály Ajťáci, Otec Ted nebo Black Books. Během výslechu měl 57letý Graham nebezpečně zvýšený krevní tlak až na samou hranici mrtvice a proto byl z policejní stanice převezen do nemocnice. Důvodem zatčení bylo údajné podněcování násilí v jeho 'vtipných' příspěvcích na sociální síti
… více »Studentská dílna Macgyver zve na další Virtuální Bastlírnu - pravidelné online setkání všech, kdo mají blízko k bastlení, elektronice, IT, vědě a technice. Letní prázdniny jsou za námi a je čas probrat novinky, které se přes srpen nahromadily. Tentokrát jich je více než 50! Těšit se můžete mimo jiné na:
Hardware – Bus Pirate na ESP32, reverse engineering Raspberry Pi, pseudo-ZX-80 na RISC-V, PicoCalc, organizéry na nářadí z pěny nebo … více »Vytvoříme test jazyka:
abc> cat in.abc (1 + 3) * 2
Překontrolujeme syntaktický strom:
abc>../../parrot abc.pbc --target=parse in.abc
"parse" => PMC 'ABC::Grammar' => "(1 + 3) * 2" @ 0 {
<statement_list> => PMC 'ABC::Grammar' => "(1 + 3) * 2" @ 0 {
<statement> => ResizablePMCArray (size:1) [
PMC 'ABC::Grammar' => "(1 + 3) * 2" @ 0 {
<expression> => PMC 'ABC::Grammar' => "(1 + 3) * 2" @ 0 {
<expr> => PMC 'PGE::Match' => "*" @ 8 {
<type> => "infix:*"
<top> => Hash {
"arity" => 2,
"assoc" => "left",
"expect" => 258,
"looser" => "infix:^",
"match" => "PGE::Match",
"name" => "infix:*",
"pirop" => "n_mul",
"precclose" => "<<<<=",
"precedence" => \parse[0]["precclose"],
"syncat" => 96
}
[0] => PMC 'PGE::Match' => "(" @ 0 {
<type> => "circumfix:( )"
<top> => Hash {
"arity" => 1,
"assoc" => "left",
"equiv" => "term:",
"expect" => 257,
"keyclose" => ")",
"match" => "PGE::Match",
"name" => "circumfix:( )",
"pirop" => "set",
"precclose" => "=",
"precedence" => \parse[0]["precclose"],
"syncat" => 144
}
[0] => PMC 'PGE::Match' => "+" @ 3 {
<type> => "infix:+"
<top> => Hash {
"arity" => 2,
"assoc" => "left",
"expect" => 258,
"looser" => "infix:*",
"match" => "PGE::Match",
"name" => "infix:+",
"pirop" => "n_add",
"precclose" => "<<<<<=",
"precedence" => \parse[0]["precclose"],
"syncat" => 96
}
[0] => PMC 'ABC::Grammar' => "1" @ 1 {
<integer> => PMC 'ABC::Grammar' => "1" @ 1
<type> => "term:"
<top> => Hash {
"assoc" => "left",
"expect" => 513,
"match" => "PGE::Match",
"name" => "term:",
"parsed" => PMC 'Sub' { ... },
"precclose" => "=",
"precedence" => \parse[0]["precclose"],
"syncat" => 16
}
}
[1] => PMC 'ABC::Grammar' => "3" @ 5 {
<integer> => PMC 'ABC::Grammar' => "3" @ 5
<type> => "term:"
<top> => \parse[0]
}
}
}
[1] => PMC 'ABC::Grammar' => "2" @ 10 {
<integer> => PMC 'ABC::Grammar' => "2" @ 10
<type> => "term:"
<top> => \parse[0]
}
}
}
}
]
}
}
Překontrolujeme AST:
abc>../../parrot abc.pbc --target=past in.abc
"past" => PMC 'PAST::Stmts' {
<source> => "(1 + 3) * 2"
<pos> => 0
[0] => PMC 'PAST::Op' {
<name> => "saynum"
<pasttype> => "call"
[0] => PMC 'PAST::Op' {
<pasttype> => "bind"
[0] => PMC 'PAST::Var' {
<name> => "last"
<scope> => "package"
<lvalue> => 1
}
[1] => PMC 'PAST::Op' {
<name> => "infix:*"
<pasttype> => undef
<pirop> => "n_mul"
<lvalue> => undef
<source> => "*"
<pos> => 8
[0] => PMC 'PAST::Op' {
<name> => "circumfix:( )"
<pasttype> => undef
<pirop> => "set"
<lvalue> => undef
<source> => "("
<pos> => 0
[0] => PMC 'PAST::Op' {
<name> => "infix:+"
<pasttype> => undef
<pirop> => "n_add"
<lvalue> => undef
<source> => "+"
<pos> => 3
[0] => PMC 'PAST::Val' {
<value> => "1"
<returns> => "Integer"
<source> => "1"
<pos> => 1
}
[1] => PMC 'PAST::Val' {
<value> => "3"
<returns> => "Integer"
<source> => "3"
<pos> => 5
}
}
}
[1] => PMC 'PAST::Val' {
<value> => "2"
<returns> => "Integer"
<source> => "2"
<pos> => 10
}
}
}
}
}
Případně překontrolujeme i POST:
abc>../../parrot abc.pbc --target=post in.abc
"post" => PMC 'POST::Ops' {
<source> => "(1 + 3) * 2"
<pos> => 0
<result> => PMC 'POST::Ops' {
<source> => null
<pos> => \post
<result> => "$P14"
[0] => PMC 'POST::Ops' {
<source> => \post
<pos> => \post
<result> => PMC 'POST::Op' {
<pirop> => "set_global"
<result> => PMC 'POST::Ops' {
<source> => "*"
<pos> => 8
<result> => "$P13"
[0] => PMC 'POST::Ops' {
<source> => "("
<pos> => 0
<result> => "$P12"
[0] => PMC 'POST::Ops' {
<source> => "+"
<pos> => 3
<result> => "$P11"
[0] => PMC 'POST::Ops' {
<source> => "1"
<pos> => 1
<result> => "$P10"
[0] => PMC 'POST::Op' {
<pirop> => "new"
[0] => "$P10"
[1] => "\"Integer\""
}
[1] => PMC 'POST::Op' {
<pirop> => "assign"
[0] => "$P10"
[1] => "1"
}
}
[1] => PMC 'POST::Ops' {
<source> => "3"
<pos> => 5
<result> => "3"
}
[2] => PMC 'POST::Op' {
<pirop> => "n_add"
[0] => "$P11"
[1] => \post
[2] => \post
}
}
[1] => PMC 'POST::Op' {
<pirop> => "set"
[0] => "$P12"
[1] => \post
}
}
[1] => PMC 'POST::Ops' {
<source> => "2"
<pos> => 10
<result> => "2"
}
[2] => PMC 'POST::Op' {
<pirop> => "n_mul"
[0] => "$P13"
[1] => \post
[2] => \post
}
}
[0] => "\"last\""
[1] => \post
}
[0] => \post
[1] => \post
}
[1] => PMC 'POST::Op' {
<result> => "$P14"
<pirop> => "call"
[0] => "\"saynum\""
[1] => "$P13"
}
}
[0] => \post
}
Koukneme na "výsledný" PIR pro Parrot VM:
abc>../../parrot abc.pbc --target=pir in.abc
.sub "anon"
new $P10, "Integer"
assign $P10, 1
n_add $P11, $P10, 3
set $P12, $P11
n_mul $P13, $P12, 2
set_global "last", $P13
$P14 = "saynum"($P13)
.end
A spustíme test:
abc>../../parrot abc.pbc in.abc 8
A to je vše, přátelé. Funguje to. Tádí dádí da.
Nyní se můžeme vrhnout na kompilátor dalšího jazyka, dodělat něco z TODO pro abc nebo jen sledovat další pokrok Patricka R. Michauda a dalších na cestě k Perlu 6.
Tiskni
Sdílej: