Po 9 týdnech vývoje od vydání Linuxu 7.0 oznámil Linus Torvalds vydání Linuxu 7.1. Přehled novinek a vylepšení na LWN.net: první a druhá polovina začleňovacího okna a časem také na Linux Kernel Newbies.
Cheat Engine (Wikipedie) je s verzí 7.7 k dispozici už také pro Linux. Jedná se o proprietární skener/debugger paměti používaný především k cheatování v počítačových hrách.
Vláda USA nařídila společnosti Anthropic pozastavit přístup k modelům Fable 5 a Mythos 5 pro všechny cizince, včetně zaměstnanců Anthropicu.
Společnost Murena představila (YouTube) novou verzi 4.0 mobilního operačního systému /e/OS (Wikipedie) založeného na Androidu a LineageOS bez aplikací a služeb od Googlu.
V Arch User Repository (AUR) bylo kompromitováno přes 400 opomíjených balíčků (jejich seznam). Útočník do nich začlenil škodlivý npm balíček atomic-lockfile, který krade citlivá data uživatelů. Publikována byla předběžná analýza spouštěného malwaru deps.
Homebrew, správce balíčků nejen pro macOS, byl vydán ve verzi 6.0.0 (seznam změn). Hlavními novinkami jsou bezpečnostní mechanismus tap trust kvůli důvěryhodnosti závislostí, vylepšení sandboxingu na Linuxu, interní JSON API nebo zlepšení výkonu.
Byla nalezena a 9. června opravena kritická zranitelnost ve FreeBSD v Kernel TLS (KTLS). Pojmenována byla Bumsrakete (FreeBSD-SA-26:26.ktls, CVE-2026-45257). Lokální neprivilegovaný uživatel může přepisovat soubory, ke kterým má právo pouze pro čtení. Přepsáním setuid binárky a jejím spuštěním může získat roota. Na všech verzích od verze 13.0 vydané v dubnu 2021.
Vývojáři open source operačního systému ReactOS (Wikipedie), jehož cílem je kompletní binární kompatibilita s aplikacemi a ovladači pro Windows, se na síti 𝕏 pochlubili, že ReactOS zvládne počítačovou hru Half-Life.
Byla vydána nová verze 4.8 multiplatformního integrovaného vývojového prostředí (IDE) pro rychlý vývoj aplikaci (RAD) ve Free Pascalu Lazarus (Wikipedie). Využíván je Free Pascal Compiler (FPC) 3.2.2.
Apple container dospěl do verze 1.0.0. Jedná se o open source nástroj pro spouštění linuxových kontejnerů na macOS postavený nad containerization. Napsaný je v programovacím jazyce Swift a optimalizovaný pro Apple silicon.
kontejner) a v té mám deklarovány další 2 - iterátory (iterator a const_iterator).
Pak mám v té šabloně STL-like metody, které vrací iterátory
iterator begin(); iterator end(); const_iterator begin() const; const_iterator end() const;Když pak chci použít
begin() vracející const_iterator, tak mi GCC řve, že iterator nelze převést na const_iterator
kontejner<int> k;
k.insert(50);
k.insert(60);
for (kontejner<int>::const_iterator it = k.begin(); it != k.end(); ++it)
{
// něco
}
MSVC hlásí ambigous call (nebo tak něco).
Dovolil jsem se kouknout do hlavičkového souboru STL a tam je něco podobného, co mám já a tam si kompilátor při použití const_iterator nestěžuje, např. u setu:
set<int> k;
k.insert(50);
for (set<int>::const_iterator it = k.begin(); it != k.end(); ++it)
{
// něco
}
Proč? Proč mu vadí vlastně napsaný a ten v STL mu nevadí, vždyť to je snad to samý ... nebo jsem úplně blbej.
Řešení dotazu:
begin() vracející const_iterator stane zbytečnou (protože se použije ta druhá).
To neni tak uplne pravda, verze vracejici const_iterator je deklarovana jako const, takze bude pouzita u konstatniho kontejneru.
begin() je const a druhá ne. Jakmile to const odstraníte, překladač vám vynadá, že to nejde overloadnout.
const a přiřazuju to do const_iterator... Jak je možné, že když použiju např. set z STL, tak to funguje, když to v podstatě dělá to samé?
iterator a ten se následně automaticky přetypuje na const_iterator. V tomhle smyslu vám to bude fungovat taky, pokud to přetypování umožníte.
Muzete si vynutit zavolani const metody. Nekam pred cyklus dejte const kontejner<int>& ck = k; a pak piste nasledujici:
for (kontejner<int>::const_iterator it = ck.begin(); it != ck.end(); ++it)
Uprime receno nevim, cemu se s panem Kubeckem divite, takhle se to normalne dela a ve standardu je u kontejneru receno, ze iterator musi byt konvertibilni na const_iterator.
Predevsim, pokud by verze s const byla (po pridani konverze interator -> const_iterator) zbytecna, tak byste ji mohl odstranit. Jenze kdyz tam nebude, tak si na konstatnim kontejneru nezavolate metodu begin(), coz je, jak jiste uznate, u kontejneru nikoliv zanedbatelny nedostatek. Ergo zbytecna neni.
Tak to jsem se asi prehledl. Jaky ze byl ten kontext, ve kterem normalni kontejner nepotrebuje konstatni begin() metody?
Kdyz uz jsme se tak pekne rozhovorili... z tonu vaseho prispevku mam pocit, ze znate nejake reseni, ktere neni postavene na hlavu a ve kterem se begin() const nestane zbytecnym. Mohl byste alespon naznacit?
cbegin() a cend(), které jsou AFAIK součástí návrhu C++0x.
A čemu tím v daném případě pomůžete? cbegin() a cend() má pomoci tam, kde typ iterátoru není znám (tzn. v parametrech šablonových funkcí a auto proměnných), ale to tady nenastává. Tzn. s cbegin můžu napsat:
std::search(cow_sequence.cbegin(), cow_sequence.cend(), // kompilátore, tady nedělej kopii COW sekvence
needle.begin(), needle.end());
Místo abych psal ekvivalentní
std::search(const_cast<const COW_SEQ&>(cow_sequence).begin(), const_cast<const COW_SEQ&>(cow_sequence).end(), // kompilátore, tady nedělej kopii COW sekvence
needle.begin(), needle.end());
MMCH, v C++ lze v jistém smyslu overloadovat podle návratového typu
No vidite, to neni spatny napad. Na druhou stranu, pokud tomu vytvoru budete chtit rikat kontejner a povolit jeho obecnejsi vyuziti, tak se reseni s konstruktorem nevyhnete. Konec koncu, v navrhu C++0x pozadavek na existenci konverze z iterator na const_iterator zustava.
Vysvětlení je asi v této části hlavičkového souboru:
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// DR 103. set::iterator is required to be modifiable,
// but this allows modification of keys.
typedef typename _Rep_type::const_iterator iterator;
typedef typename _Rep_type::const_iterator const_iterator;
Chápu-li to dobře, jde o workaround na známou chybu gcc implementace standardní C++ knihovny.
Are Set Iterators Mutable or Immutable?
Mimochodem, v puvodni STL od SGI byly const_iterator a iterator pro set (a dalsi "Simple Associative Container") zadefinovany jako identickeho typu.
Tiskni
Sdílej: