Apple dnes představil 14palcový MacBook Pro, iPad Pro a Apple Vision Pro s novým čipem M5.
Debian pro mobilní zařízení Mobian (Wikipedie) byl vydán ve verzi 13 Trixie. Nová stabilní verze je k dispozici pro PINE64 PinePhone, PinePhone Pro a PineTab, Purism Librem 5, Google Pixel 3a a 3a XL, OnePlus 6 a 6T a Xiaomi Pocophone F1.
Operátor O2 představil tarif Datamanie 1200 GB . Nový tarif přináší 1200 GB dat s neomezenou 5G rychlostí, a také možnost neomezeného volání do všech sítí za 15 Kč na den. Při roční variantě předplatného zákazníci získají po provedení jednorázové platby celou porci dat najednou a mohou je bezstarostně čerpat kdykoli během roku. Do 13. listopadu jej O2 nabízí za zvýhodněných 2 988 Kč. Při průměrné spotřebě tak 100 GB dat vychází na 249 Kč měsíčně.
Byly publikovány informace o útoku na zařízení s Androidem pojmenovaném Pixnapping Attack (CVE-2025-48561). Aplikace může číst citlivá data zobrazovaná jinou aplikací. V demonstračním videu aplikace čte 2FA kódy z Google Authenticatoru.
Free Software Foundation (FSF) spustila projekt Librephone, jehož cílem je vytvoření svobodného operačního systému pro mobilní telefony. Bez binárních blobů.
Byla vydána verze 7 s kódovým název Gigi linuxové distribuce LMDE (Linux Mint Debian Edition). Podrobnosti v poznámkách k vydání. Linux Mint vychází z Ubuntu. LMDE je postaveno na Debianu.
Byl vydán Mozilla Firefox 144.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Vypíchnout lze lepší správu profilů. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 144 bude brzy k dispozici také na Flathubu a Snapcraftu.
Discord potvrdil únik osobních údajů přibližně 70 000 uživatelů. Incident se týká uživatelů po celém světě, především těch, kteří v rámci ověřování svého věku nahráli do aplikace doklad totožnosti. Únik informací se netýkal systémů samotné platformy, ale došlo k němu přes kompromitovaný účet pracovníka zákaznické podpory u externího poskytovatele služeb.
Americká společnost OpenAI, která provozuje chatbota ChatGPT, kvůli výrobě vlastních procesorů pro umělou inteligenci (AI) spojí síly s firmou Broadcom. Firmy o tom informovaly (en) ve svém včerejším sdělení. OpenAI se snaží zajistit si výpočetní výkon potřebný k uspokojení rostoucí poptávky po svých službách. Akcie Broadcomu po zprávě výrazně zpevnily.
O víkendu 18. a 19. října lze na brněnském výstavišti navštívit s jednou vstupenkou dvě akce: Maker Faire Brno, "festival tvořivosti, vynálezů a bastlířské radosti", a GameDev Connect, "akci určenou pro všechny současné a hlavně budoucí herní vývojáře, kteří touží proniknout do jednoho z nejúžasnějších průmyslů na světě".
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: