Nový open source router Turris Omnia NG je v prodeji. Aktuálně na Allegro, Alternetivo, Discomp, i4wifi a WiFiShop.
Na YouTube a nově také na VHSky byly zveřejněny sestříhané videozáznamy přednášek z letošního OpenAltu.
Jednou za rok otevírá společnost SUSE dveře svých kanceláří široké veřejnosti. Letos je pro vás otevře 26. listopadu v 16 hodin v pražském Karlíně. Vítáni jsou všichni, kdo se chtějí dozvědět více o práci vývojářů, prostředí ve kterém pracují a o místní firemní kultuře. Můžete se těšit na krátké prezentace, které vám přiblíží, na čem inženýři v Praze pracují, jak spolupracují se zákazníky, partnery i studenty, proč mají rádi open source a co
… více »Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za říjen (YouTube).
Jeff Quast otestoval současné emulátory terminálu. Zaměřil se na podporu Unicode a výkon. Vítězným emulátorem terminálu je Ghostty.
Amazon bude poskytovat cloudové služby OpenAI. Cloudová divize Amazon Web Services (AWS) uzavřela s OpenAI víceletou smlouvu za 38 miliard USD (803,1 miliardy Kč), která poskytne majiteli chatovacího robota s umělou inteligencí (AI) ChatGPT přístup ke stovkám tisíc grafických procesů Nvidia. Ty bude moci využívat k trénování a provozování svých modelů AI. Firmy to oznámily v dnešní tiskové zprávě. Společnost OpenAI také nedávno
… více »Konference Prague PostgreSQL Developer Day 2026 (P2D2) se koná 27. a 28. ledna 2026. Konference je zaměřena na témata zajímavá pro uživatele a vývojáře. Příjem přednášek a workshopů je otevřen do 14. listopadu. Vítáme témata související s PostgreSQL či s databázemi obecně, a mohou být v češtině či angličtině.
Byl vydán Devuan 6 Excalibur. Přehled novinek v poznámkách k vydání. Kódové jméno Excalibur bylo vybráno podle planetky 9499 Excalibur. Devuan (Wikipedie) je fork Debianu bez systemd. Devuan 6 Excalibur vychází z Debianu 13 Trixie. Devuan 7 ponese kódové jméno Freia.
Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu poprvé překročil 3 %, aktuálně 3,05 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 27,18 %. Procesor AMD používá 67,10 % hráčů na Linuxu.
Joel Severin v diskusním listu LKML představil svůj projekt linuxového jádra ve WebAssembly (Wasm). Linux tak "nativně" běží ve webovém prohlížeči. Potřebné skripty pro převod jsou k dispozici na GitHubu.
Tiskni
Sdílej:
).
...a celkově je to jeden z nejlepších jazyků pro své určení (hlavně s LuaJIT, rychlejší beztypový JIT neznám), jen škoda, že se nedá použít na webu místo JS ..Ctes primo z me hlavy
.
co se týče "patchování" Lua, to se samozřejmě dá a není to ani takový problém, protože většinou aplikace mají svoji vlastní kopii, nicméně občas je to problém (hlavně když je potřeba podpora LuaJIT, ke kterému těch patchů moc není, portovat se samozřejmě dají, ale kód LuaJIT není zrovna triviální a dá to trochu práce se v tom vyznat).Jo, presne tak s JIT. Proto jsem psal bohuzel
.
port v tomhle kontextu = použití podobné architektury a optimalizacíV8 je tzv. method-based JIT, který je na rozdíl od tracing JITů mnohem složitější, takže se tolik nepoužívá (což je IMO je dobře).
.
Ve skutecnosti je Python totiz tak "dobre" navrzeny, ze jde velice spatne optimalizovat, takze je imho i formalne dokazatelne (vychazejici primo ze specifikace Pythonu - staci si ji poradne procist), ze musi byt zakonite pomalejsi nez ostatni.
Napriklad ta omezena parodie na lambdu, jedinej duvod proc do ni nejde zapsat blok kodu je ten, ze v to v ty syntaxy rozumne nejde.Tak pokud bys chtěl měnit syntaxi kvůli takovýmto mylným dojmům, tak to mi nepřijde zrovna chytré. Já bych šel přesně opačnou cestou a významové odsazování bych v Pythonu ještě rozšířil.
).
. Vsechno je proste simulovane pres ty univerzalni Lua tables, coz jsou (ac vysoce kvalitni) pouze hash tabulky. Je tam jedna nejasnost, kterou si neumim vysvetlit ani ja (viz. prvni bod v sekci Ugly), takze nevyhody se urcite najdou
.
Jinak mas pravdu - zrovna ze sitovani neni v zakladu nic pribaleneho, protoze by to o hodne zvetsilo balicek s Lua (v ramci zachovani multiplatformnosti). Ale externi Lua knihovny jsou samozrejme dostupne, napr. multiplatformni LuaSocket pro TCP/UDP s par nejbeznejsimi aplikacnimi protokoly atd.).
Lua tablesVždyť jsem říkal, že je to PHPkovina :).
Ale externi Lua knihovny jsou samozrejme dostupnSlovo „samozřejmě“ u Lua knihoven zřejmě znamená něco jiného, než si představuju já. Zrovna TCP a UDP jsem ještě nedávno nemohl používat z důvodu omezení na IPv4.
Zrovna TCP a UDP jsem ještě nedávno nemohl používat z důvodu omezení na IPv4.Hm, to je zajimave - podival jsem se zrovna na LuaSocket a s IPv6 nema problem (google mi vyplivnul github repo, ale take mi vyplivnul, ze v Debianu to nebylo jeste nedavno z neznameho duvodu zarazeno, takze nevim, zdali jsi nenarazil na omezeni distra).
Hm, to je zajimave - podival jsem se zrovna na LuaSocket a s IPv6 nema problem (google mi vyplivnul github repo, ale take mi vyplivnul, ze v Debianu to nebylo jeste nedavno z neznameho duvodu zarazeno, takze nevim, zdali jsi nenarazil na omezeni distra).Vzhledem k tomu, že o tom byla řeč mezi vývojáři Prosody, tak mám za to, že v té době, kdy jsem se o ten jazyk zajímal, tak to bylo absolutní no-go.
a mohou se libovolně kombinovat.V čemž nespatřuju žádnou výhodu, jen obrovskou dávku prasáctví.
gui.Button {
signals = {
clicked = function(btn) print("click") end
},
gui.Label {
text = "Hello world"
}
}
Při vytváření jednotlivých instancí jsou v hash části "vlastnosti", v array části "děti" toho widgetu, které musí být seřazeny. Toto umožňuje pro tento účel celkem hezkou syntaxi deklarativním způsobem, bez imperativního nastavování vlastností.
V Lua jsou objekt, pole a asociativní pole jedna věc.Dobře.
Resp. žádné klasické "objekty" s inheritancí apod nejsou, ani prototypy, nicméně pomocí metatabulek se dají vytvořit objektové systémy různých typů (prototypy, třídy, hybridy, ...), záleží vždy na požadavcích.Zajímavé, už chápu, proč je na to Franta Fuka tak vysazený.
Celkově pomocí metatabulek se dá udělat spousta věcí.A co to přesně je, to modifikuješ chování těch asociativních polí?
A co to přesně je, to modifikuješ chování těch asociativních polí?Chovani asociativnich poli nemenis. Menis pouze obsah a pokud danou hodnotu "zavolas", tak Lua predpoklada, ze se jedna o funkci a pokud ji predavas/kopirujes, tak Lua vidi pouze ciselnou hodnotu (referenci). Je to proste skoro stejne jako JS, ale jeste obecnejsi (zjednodusene receno vsechno muze byt ulozene kdekoliv a spustene odkudkoliv a kymkoliv
).
foo = {} -- tabulka
setmetatable(foo, { __add = function(a, b) print("adding a + b", a, b); return "hello world" end }
print(foo + 150) -- zavolá se __add, a bude foo, b bude 150, vrací "hello world"
print(150 + foo) -- pořadí a, b bude přehozeno
getmetatable(foo).__index = function(self, name) return name end
print(foo.bar) -- vypíše "bar"
print(foo.blablah) -- vypíše "blablah"
getmetatable(foo).__index = { xyz = "hello" }
print(foo.xyz) -- vypíše "hello"
getmetatable(foo).__newindex = function(self, name, value) _G[name] = value end -- _G je tabulka globálních proměnných
foo.abc = 150
print(abc) -- vypíše 150, nová globální proměnná
Co se týče _G, to je tabulka, která obsahuje všechny globální hodnoty, a vzhledem k tomu, že je to normální tabulka, může mít také svoji metatabulku a tím se dá ovlivnit, co se vrací a co se přiřazuje při manipulaci s globálními proměnnými. Tím se dá např. implementovat ekvivalent Perlího "strict" módu na pár řádcích (takový modul je i ve výchozí distribuci Lua)
Měl bych říct, že všechny tagy v Lua mohou mít metatabulku - tabulky, čísla, userdata (uživatelské pointery definované z C), stringy, thready (fibers/korutiny) nicméně jen v případě tabulek má každá svoji vlastní metatabulku (resp. může mít), v případě ostatních tagů je jedna globální. To se hodí na další rozšiřování. Např. toto:
getmetatable("").__mod = function(str, args)
return (str:gsub("%%%(([a-zA-Z_0-9]*)%)([-0-9%.]*[cdeEfgGiouxXsq])",
function(k, fmt)
k = tonumber(k) or k
return (args[k]
and ("%" .. fmt):format(args[k])
or "%(" .. k .. ")" .. fmt)
end))
end
vlastně povolí takové trochu pythonoidní formátování stringů včetně pojmenovaných argumentů a neseřazených argumentů pomocí overloadu modulo operátoru, "args" poslaný metametodě __mod bude v tomto případě ta tabulka { foo = ....... }:
("hello %(foo)s %(2)i %(1)f") % { foo = "world", 3.14, 5 } -- takový string bude "hello world 5 3.14"
Namísto obyčejného
("hello %s %i %f"):format("world", 5, 3.14)
(ta syntax s :format je povolena, protože výchozí __index stringí metatabulky je knihovna "string", tudíž str:format(args) je ekvivalentní s string.format(str, args))
Jen poznámka, Lua pole má, i když jsou integrovaný v tables...Ano, ale pro uzivatele se to snazi syntaxe skryt, proto jsem napsal, ze pole nema, protoze Lua jako jazyk je nema
. Implementace je samozrejme neco jineho.
.
Ve skutecnosti je Python totiz tak "dobre" navrzeny, ze jde velice spatne optimalizovat, takze je imho i formalne dokazatelne (vychazejici primo ze specifikace Pythonu - staci si ji poradne procist), ze musi byt zakonite pomalejsi nez ostatni.A jak by se to formálně dokazovalo?
).
Predstavu mam takovou, ze by stacilo vytvorit specificky assembler spolecny pro oba porovnavane jazyky (Python a napr. Lua) a pote porovnat vsechny high-level operace prevedene do assembleru (kazda instrukce asm by byla ohodnocena "nejak" - zrejme empiricky - a cim mensi soucet techto vah by jednotlive operace mely, tim by byl jazyk rychlejsi).
Problem je, ze takovych high-level operaci je mnoho (musela by se vzit cely semanticky analyzator a z neho to vydolovat a pripadne chybejici high-level operace vzdy do druheho jazyka co nejefektivneji primo v tom jazyku dopsat tak, aby vykazovaly stejne chovani). Napr. takove dedeni je v Pythonu zadratovane, kdezto v Lua bych ho musel nasimulovat atd.
- proste lidsky nedeterminismus/stochasticita tady krasne funguje).
Pokud se budeme pohybovat na formalni urovni, zajima nas pouze samotny algoritmus (tzn. ne moduly apod. - ty budou ve finalni forme v podobe atomu "zapomenute", protoze se bude jednat o obycejnou posloupnost "instrukci") a pak jeho prevod skrze dany jazyk spolu s optimalizacemi do "instrukci" Turingova stroje.
Proto jsem navrhoval atomy, ktere by byly "vyssi" nez "instrukce" pro Turinguv stroj a pritom neomezovaly ani jednu z pouzitych optimalizaci (tzn. jednalo by se zrejme o naprosto zakladni instrukce pro naivni akumulatorovy CPU).
Já píši o „optimalizaci“, ne o „výkonnostních problémech“. Rozdíl mezi těmito dvěma termíny je myslím dost cítit.Ano optimalizace bez toho abych věděl, kde je problém je hádání. Ví se o tom už od 70. let, kdy vznikla slavná věta o předčasné optimalizaci.
Haskell je zrovna krásný příklad, jeho zdrojový kód dodává mnohem více informací, než je u jiných funkcionálních jazyků běžné. Například informaci o typech a další – a proto má lepší předpoklady k optimalizaci.Tohle je pravda, jenže využití těchto informací při překladu je pořád v plenkách. Třeba funkcionální jazyky by se teoreticky daly paralelizovat na úrovni překladače, jenže na internetu se o tom skoro nic nedá najít a nejspíš se tím ani nikdo moc nezabývá.
Pokud si zvolíte „meziassembler“, pak máte do toho vnesenu cestu zdrojový kód -> meziassembler -> cílový kód. Takováto striktní cesta nemusí vést k nejlepší optimalizaci, protože do toho vnášíte umělá omezení daná chytrostí vámi vymešleného meziassembleru.Jenom škoda, že tohle dělají snad všechny dnešní překladače snad všech jazyků. Tohle je totiž dost rozumný způsob oddělení jednotlivých částí překladače.
Asm je velmi dobrý příklad optimalizace. Protože optimalizace je provedena „v lidském mozku“ s použitím 100 % informací, které člověk o daném programů má a o dané cílové architektuře.z toho vlakna jsem mel pocit ze se nebavime o puvodnim autorovi, ktery samozrejme ma vsechny informace at uz pise v asm nebo ne, ale o automatu ktery dostane program a ma za ukol ho zrychlit... (bez komentaru protoze tam by se pouzival nejaky dalsi jazyk) a v samotnym asm kodu proste ty informace o umyslech autora nejsou. A i kdyby tam misto automatu byl hodne inteligentni clovek, tak kdyz dostane jenom asm kod tak muze jenom ***hadat*** jestli nejakou zmenou nezrusi nejakou pozadovanou vlastnost...
Ve všech progrmaovacích jazycích je vidět snaha efektivně vykonávat soubor příkazů,Tohle se snad snazi resit deklarativni jazyky jako Vortex, Prolog, Eiffel, Haskell atd.
nikoli snaha zapsat o co člověku jde a poradit s tím aspoň z pár % sám.Tim bychom vytvorili nedeterministicky jazyk, coz je obecne povazovano za nepouzitelny zpusob tvorby a zapisu algoritmu.
Ve všech progrmaovacích jazycích je vidět snaha efektivně vykonávat soubor příkazů, nikoli snaha zapsat o co člověku jdejo, to je pravda, ale obavam se ze reseni tohodle problemu bude vyzadovat strong AI
V optimalizaci nejde o syntaxi jazyka, pouze o množství informací, které optimalizátor dostane. Všechno ostatní je buřt.Syntaxe reflektuje moznosti jazyka a tudiz i ;moznosti optimalizace, proto jsem ji uvadel.
Jinak řečeno, informace pro optimalizátor musí zahrnovat jak znalost zdrojového kódu, tak znalost cílového strojáku. Když to někde přehradíte, třeba mezikódem s vašimi atomy, pak ztrácíte informace, a tedy nedobře optimalizujete.Ano, mate pravdu - samozrejme jsem temi atomy mel na mysli uzly grafu, kde kazdy uzel by byl spolecny pro vsechny grafy, pricemz kazdy graf by nesl jinou semantickou informaci - to vse pro ruzne typy optimalizaci. Trirozmerny prostor pro kazdy graf by na tohle mel bohate stacit. Tzn. nakonec by stacilo porovnat vysledne grafy z obou kompilatoru porovnavanych jazyku (coz je prave ten formalni dukaz, ktery by byl netrivialni). Vychazel bych ale z predstavy prave napr. toho jednoducheho procesoru, kde veskere vyssi informace by byly zachycene prave v tech "semantickych" grafech. Proto se vami zminene "prehrazeni" nekona. To, ze by se dala postavit HW architektura (a urcite takove existuji i pripade Python-versus-Lua), na ktere pobezi rychleji jazyk, ktery by formalne byl pomalejsi nehraje roli (na lispovskem CPU take nebudeme spoustet JVM). Jinak obecne informace, kterych Python dostane je vice (netroufnu si tipnout o kolik, a tak to nechme stranou), avsak s vice informacemi roste komplexnost optimalizaci a diky prekryvani ruznych oblasti optimalizaci musi kompilator optimalizacim davat prioritu v zavislosti na kontextu - a jelikoz jak jste napsal, zna dobre kontext pouze samotny programator, nemuze nikdy strojovy optimalizator tak dobre optimalizovat jako clovek. Proto bych si netroufnul rict, ze cim vice informaci kompilator ma, tim to je lepsi - to je pouze teorie, ale ve skutecnosti diky prekryvani se musi vybrat pouze podmnozina vzajemne kompatibilnich optimalizaci pro dany kus kodu (resp. souvisejici cast z tech "semantickych" grafu), coz v ASM a "jednodussich" jazycich jako Lua trochu odpada (oproti Pythonu). Proto jsem navrhoval Gaussovu krivku s velkou sigmou, kde ta komplexnost/semanticka_vyrazovost jazyka je ve vysledku kontraproduktivni ve srovnani s necim jednodussim (ale ne prilis jednoduchym). Python by byl jiz vetsi nez stredni hodnota, kdezto Lua mensi - prave tohle by se muselo dokazat.