Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 160 (pdf).
Izrael od února zakáže dětem používat v prostorách základních škol mobilní telefony. Podle agentury AFP to uvedlo izraelské ministerstvo školství, které zdůraznilo negativní dopady, které na žactvo používání telefonů má. Izrael se tímto krokem přidává k rostoucímu počtu zemí, které dětem ve vzdělávacích zařízeních přístup k telefonům omezují.
Internetová společnost Google ze skupiny Alphabet pravděpodobně dostane příští rok pokutu od Evropské komise za nedostatečné dodržování pravidel proti upřednostňování vlastních služeb a produktů ve výsledcích vyhledávání. V březnu EK obvinila Google, že ve výsledcích vyhledávání upřednostňuje na úkor konkurence vlastní služby, například Google Shopping, Google Hotels a Google Flights. Případ staví Google proti specializovaným
… více »Byl oznámen program a spuštěna registrace na konferenci Prague PostgreSQL Developer Day 2026. Konference se koná 27. a 28. ledna a bude mít tři tracky s 18 přednáškami a jeden den workshopů.
Na webu československého síťařského setkání CSNOG 2026 je vyvěšený program, registrace a další informace k akci. CSNOG 2026 se uskuteční 21. a 22. ledna příštího roku a bude se i tentokrát konat ve Zlíně. Přednášky, kterých bude více než 30, budou opět rozdělené do tří bloků - správa sítí, legislativa a regulace a akademické projekty. Počet míst je omezený, proto kdo má zájem, měl by se registrovat co nejdříve.
Máirín Duffy a Brian Smith v článku pro Fedora Magazine ukazují použití LLM pro diagnostiku systému (Fedora Linuxu) přes Model Context Protocol od firmy Anthropic. I ukázkové výstupy v samotném článku obsahují AI vygenerované nesmysly, např. doporučení přeinstalovat balíček pomocí správce balíčků APT z Debianu místo DNF nativního na Fedoře.
Projekt D7VK dospěl do verze 1.0. Jedná se o fork DXVK implementující překlad volání Direct3D 7 na Vulkan. DXVK zvládá Direct3D 8, 9, 10 a 11.
Byla vydána nová verze 2025.4 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux (Wikipedie). Přehled novinek se seznamem nových nástrojů v oficiálním oznámení na blogu.
Národní úřad pro kybernetickou a informační bezpečnost (NÚKIB) zveřejnil Národní politiku koordinovaného zveřejňování zranitelností (pdf), jejímž cílem je nejen zvyšování bezpečnosti produktů informačních a komunikačních technologií (ICT), ale také ochrana objevitelů zranitelností před negativními právními dopady. Součástí je rovněž vytvoření „koordinátora pro účely CVD“, jímž je podle nového zákona o kybernetické … více »
Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 25.12. Přehled novinek i s náhledy a videi v oficiálním oznámení.
. A to se považuju za pokročilýho v c++.
Dobrá tedy, tak na té nesrozumitelnosti asi něco bude.
Co to dělá: Zdrojové soubory kompilovaného projektu obsahují značky, které popisují datové typy, které se mají generovat na základě podporované množiny šablon.
Program o kterém píši, prochází zdrojové soubory kompilovaného projektu, hledá v něm tyto značky, a generuje kód implementující datové typy popsané těmito značkami. Vygenerovaný výsledný soubor je určen ke kompilaci kompilátorem C/C++.
Pokud znáte STL a kontejnery (vector, list, atd.), tak to v podstatě dělá to samé, jen jsou tyto značky zpracované externím preprocesorem (programem cont).
Ano je to víceméně tak jak píšeš. Jen mapy nejsou implementovaný jako samostatný typ kontejneru, a je potřeba tyto vytvořit jako kombinaci struktury obsahující integer index a string value, nad kterou se vygeneruje rb_tree.
Příklad generování mapy int na string výše uvedeným způsobem je uveden zde.
Struktura int_string_s je generována nad nějakým mým obskurním řetězcem, protože struktury použité v kontejnerech musí implementovat rozhraní, které jsem zmiňoval v zápisku.
Značky generující kontejnery jsou ve zdrojových souborech umístěny zde.
Nesnažím se tvrdit, že je to lepší než STL šablonové kontejnery, případně jiná implementace kontejnerů, to by jsem si ani tvrdit netroufal.
Typy kontejnerů, které to je schopné generovat jsem se snažil popsat v zápisku. Výhody oproti STL jsou pro mě následující:
Hlavním důvodem proč jsem jsem se tu o tom upsal bylo, že to používám ve větší věci, kterou tu chci zmínit, a byl by jsem rád, kdyby někdo kdo se případně podívá na zdrojové kódy a viděl tam tyto značky, tak aby tušil která bije.
Když jsem implementoval grafové gramatiky reprezentoval jsem množiny vrcholů a hran grafu rb-stromy, kde:
Tyto "odkazy" na hrany a uzly byly realizované pomocí celých čísel (unsigned), tak jak o nich píši v zápisku (viz "Umístění objektů v jednom bloku paměti"). Takto popsaný graf bylo snadné exportovat do binárního souboru, a z tohoto jej importovat, jednoduchým zkopírováním bloků paměti generovaných kontejnerů (offset zůstal zachován).
Některé z důvodů proč jsem v té době nepoužil STL:
Před tím, než jsem vytvořil tento preprocesor, jsem zkoušel za účelem generování kódu používat makra preprocesoru, a později i C++ šablony. Ale vždy jsem narazil na nějaké omezení, které se mi nelíbilo.
Já jsem takový úchyl, kterému by se líbilo, kdyby jazyk C preprocesoru byl úplný programovací jazyk, který by generoval zdrojový soubor pro překladač.
Šablony jsou určitě nástroj, který by člověk myslící to s C++ vážně neměl ignorovat. Před 6 lety, kdy jsem vytvářel preprocesor, se mi šablonování zdálo docela divoké, ale v poslední době, když se setkám s novými věcmi z C++11, tak bývám často překvapen, v dobrém slova smyslu.
Problémy (které si myslím že mám) s C++ šablonami:
Já jsem takový úchyl, kterému by se líbilo, kdyby jazyk C preprocesoru byl úplný programovací jazyk, který by generoval zdrojový soubor pro překladač.Taky bych bral nějaký hybrid mezi céčkem a tím, co jsem slyšel o lispu.
Já jsem takový úchyl, kterému by se líbilo, kdyby jazyk C preprocesoru byl úplný programovací jazyk, který by generoval zdrojový soubor pro překladač.Zkus D. Tam přesně takhle fungují template mixiny.
Problém je v tom, že programuji spíše v jazyce C, než v C++. Z C++ si beru jen syntaktický cukr týkající se metod a referencí. Potvrzením tohoto budiž fakt, že bylo poměrně snadné upravit generátor kódu tak, aby jeho výstup bylo možné zkompilovat kompilátorem jazyka C (branch cont_c).
Na šablony, jsem zanevřel před šesti lety, předtím, než jsem generátor začal používat. V okamžiku, kdy použiji šablony jsem odsouzen programovat v C++ naplno (konstruktory/destruktory, new/delete, instanciace šablonových funkcí, ...), ale to já nepotřebuji, proč by jsem musel? Namísto zjednodušení mi výše uvedené do problémů zanáší další úroveň složitosti.
S příchodem C++11 (nebo spíše s přibývající podporou v kompilátorech) to začíná být znovu zajímavé. Vypadá to, že už se upustilo od čisté teorie a někdo se to (šablony) pokusil použít v praxi a získanou zkušenosti promítl do C++11. To nic nemění na tom, že například Texas Instruments nepodporují v některých svých kompilátorech tyto "kouzla" (C++11 traits), na rozdíl od C++ jak jej používám já, a které bude vždy a všude přístupné. Ale i v budoucnu, kdy bude podpora "kouzel" už dostatečná by jsem musel odmítnout názor tvrdící, že když jazyk podporuje generické programování, tak dělat to jiným způsobem je rouhání (neříkám, že to tvrdíte).
Na C a C++ s objekty mi vyhovuje minimální množství axiomů, které programátor musí znát, aby mohl naprogramovat cokoli. Pokud má někdo problém s dynamickou pamětí a inicializací proměnných (konstruktory, destruktory), ukazateli (iterátory, smart ukazatele), vstupem/výstupem (streamy), dobrá ať si to zjednoduší, za cenu toho, že se připraví o určitou svobodu, ale nemusí takový přístup vyžadovat i od ostatních (pokud ovšem není projektový manager, rozhodující o používaných nástrojích).
Je to tak jak říkáš. Proto pořád píši C/C++ namísto C++, čímž mám na mysli C rozšířené o metody ve strukturách, reference, datový typ bool, výčtový typ, a možná některé další funkce.
Původně to (v experimentální fázi) generovalo C kód, a generované funkce vypadaly tak jak je vidět v některých C knihovnách: rb_tree_init, rb_tree_push, apod. Od toho jsem ale upustil, protože pohodlnost použití vygenerovaných "objektů" byla ještě horší.
Aktuálně generovaný kód překladačem C přeložit nejde, ale je jednoduché to upravit tak, aby takový kód byl generován.
Problém je jen v tom, že C nezná metody ve strukturách, reference a typ bool. Kód generátoru je možné upravit tak, aby místo metod generoval funkce s prefixovou notací (<class>_<method>), a reference nahradil ukazateli. Algoritmy zůstávají stejné.
Včera jsem vykoušel jeden generátor takto upravit, a funguje to.
Včera jsem vykoušel jeden generátor takto upravit, a funguje to.Však keby si do blogov napísal konkrétne prípady použia, tak by to viac povedalo ako stovky riadkov teórie
Inu chtěl jsem aby to bylo kompletně popsané :). Jinak jsem tam uvedl nějaké odkazy na příklady pro každý popsaný kontejner. Nebo případem použití máš na mysli nějaký konkrétní program, ve kterém jsem to použil? Třeba parser generátor yapgen je na tom kompletně založený.
Transformace do C výstupu už je v pokročilé fázi, jsem zvědavý na porovnání výsledku překladu C vs C++ co se rychlostí výsledného kódu týká (i když tuším, že se to nijak lišit nebude).
Jinak ty generované kontejnery v C/C++ používám docela často ve věcech na kterých dělám, a dost jsem si na to zvykl. Šablony v C++ mě zatím nějak míjí.
IMHO by se dala udelat implementace v cistem C++, ktera by se chovala naprosto stejne jako C++ vystup z cont. Sablony nejsou zas takova veda, pokud jde o containery. Urcite by i slo vyuzit ty algoritmy.
Tiskni
Sdílej: