abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

včera 16:11 | Komunita

Byly zveřejněny videozáznamy přednášek a workshopů z letošní konference OpenAlt konané 4. a 5. listopadu v Brně. K videozáznamům lze přistupovat ze stránky na SuperLectures nebo přes program konference, detaily o vybrané přednášce nebo workshopu a dále kliknutím na ikonku filmového pásu.

Ladislav Hagara | Komentářů: 0
včera 14:11 | Komunita

Některým uživatelům Firefoxu se tento týden do Firefoxu nainstalovalo neznámé rozšíření Looking Glass 1.0.3 (png). Ve fórů Mozilly se řešilo, zda se nejedná o malware. Mozilla později informovala, že se jednalo o reklamu na seriál Mr. Robot. Řadě uživatelů Firefoxu se jednání Mozilly vůbec nelíbilo. Mozilla proto automatickou instalaci doplňku ukončila [Hacker News, reddit].

Ladislav Hagara | Komentářů: 15
16.12. 12:00 | Nová verze

Po cca 3 týdnech od vydání Linux Mintu 18.3 s kódovým jménem Sylvia a prostředími MATE a Cinnamon byla oznámena také vydání s prostředími KDE a Xfce. Podrobnosti v poznámkách k vydání (KDE, Xfce) a v přehledech novinek s náhledy (KDE, Xfce). Linux Mint 18.3 je podporován do roku 2021.

Ladislav Hagara | Komentářů: 6
15.12. 12:55 | Nová verze

Byla vydána verze 17.12.0 KDE Aplikací (KDE Applications). Přehled novinek v kompletním seznamu změn a na stránce s dalšími informacemi. Aplikace, které nebyly dosud portovány na KDE Frameworks 5, byly z KDE Aplikací odstraněny.

Ladislav Hagara | Komentářů: 54
15.12. 03:00 | Komunita

Na Humble Bundle lze získat počítačovou hru Company of Heroes 2 (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
15.12. 02:00 | Zajímavý software

Christian Kellner představil na svém blogu projekt Bolt řešící bezpečnost rozhraní Thunderbolt 3 na Linuxu. Pomocí příkazu boltctl nebo rozšíření GNOME Shellu lze komunikovat s démonem boltd a například zakázat neznámá zařízení a předejít tak útokům typu Thunderstrike nebo DMA.

Ladislav Hagara | Komentářů: 10
15.12. 01:00 | Nová verze

Po půl roce vývoje od vydání verze 11.0 byla vydána verze 11.1 svobodného softwaru pro vytváření datových úložišť na síti FreeNAS (Wikipedie). Nejnovější FreeNAS je postaven na FreeBSD 11.1. Přehled novinek v příspěvku na blogu. Zdůraznit lze zvýšení výkonu OpenZFS, počáteční podporu Dockeru nebo synchronizaci s cloudovými službami Amazon S3 (Simple Storage Services), Backblaze B2 Cloud, Google Cloud a Microsoft Azure

Ladislav Hagara | Komentářů: 0
14.12. 23:55 | Nová verze

Po dvou měsících vývoje od vydání verze 235 oznámil Lennart Poettering vydání verze 236 správce systému a služeb systemd (GitHub, NEWS).

Ladislav Hagara | Komentářů: 10
14.12. 20:00 | Nová verze Ladislav Hagara | Komentářů: 0
14.12. 19:33 | Pozvánky

Pražská Fedora 27 Release Party, oslava nedávného vydání Fedory 27, se uskuteční 19. prosince od 19:00 v prostorách společnosti Etnetera (Jankovcova 1037/49). Na programu budou přednášky o novinkách, diskuse, neřízený networking atd.

Ladislav Hagara | Komentářů: 0
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (8%)
 (0%)
 (1%)
 (1%)
 (76%)
 (14%)
Celkem 1011 hlasů
 Komentářů: 45, poslední 1.12. 19:00
    Rozcestník

    OctaForge - OctaSTD update

    14.6.2015 18:14 | Přečteno: 1112× | octaforge | Výběrový blog | poslední úprava: 14.6.2015 18:46

    Knihovna OctaSTD dostala poslední dobou spoustu nového kódu a přibližuje se produkční použitelnosti.

    Kromě nových kompontent se dostalo i na designové změny a vylepšení těch stávajících. Ale začnu těmi novými.

    Co je teď implementováno?

    Přidal jsem několik nových komponent. Takže aktuální seznam je:

    Kromě toho jsem upravil knihovnu tak, aby ji bylo možné používat vedle C++ standardní knihovny. Tzn. kdokoliv ji bude chtít použít, může, bez úprav svého vlastního projektu.

    Momentálně podporovanými kompilátory jsou GCC (4.8 a vyšší) a Clang (3.3 a vyšší). Podpora pro Visual Studio byla odstraněna, nejspíš napořád (vzhledem k tomu, že MS chce ve Visual Studiu povolit Clang), ale v případě potřeby ji přidám zpět. Největším blockerem pro VS 2015 je nepodpora rozšířeného SFINAE. A atomic.h momentálně nebude fungovat taky, nicméně by neměl být problém to časem přidat, v případě potřeby.

    Co se týká dokumentace, celkem dost je teď na Wiki. Velké části API jsou kompletně zdokumentované včetně příkladů.

    Jardíka by mohlo potěšit to, že prefixy __Octa a __octa byly odstraněny. Všechny interní záležitosti jsou teď implementovány v namespace octa::detail a přistupuje se k nim s celou namespace (tzn. octa::detail::Foo), což zabrání konfliktům. Pořád nicméně může dojít ke konfliktům s makry - ale to je IMHO chyba uživatele knihovny, protože taková makra by vůbec neměla existovat.

    Změny v ranges systému

    V ranges systému proběhlo několik designových změn, které dělají celý systém o něco použitelnější a flexibilnější. Systém je detailně popsaný na Wiki, takže shrnu jen to důležité.

    Range half

    Jedna výhoda iterátorů oproti ranges je ta, že se iterátory dají volně skládat. Příkladem použití je funkce find z knihovny algorithm.h. Ta najde hodnotu v range a vrátí novou range, kde nalezená hodnota je prvním prvkem. Nějak takto:

    Vector<int> x(range(20)); // pole 0, 1, 2, 3, ... 19
    auto r = find(x.each(), 15);
    

    Takže r teď bude range začínající na 15 a končící na 19. A já teď chci novou range, která bude od začátku vektoru až po začátek této nové range, tzn. hodnoty od 0 do 15 (kde 15 není součástí range). S klasickým range systémem by toto nebylo možné. S iterátory to je možné, protože když funkce find vrátí iterátor, tak se tento iterátor dá použít jako koncový.

    Proto jsem do ranges zahrnul nový koncept "polovin". Z jakékoliv range se dá vytvořit objekt typu RangeHalf, přičemž tato metoda half() je implementována jako součást InputRange, takže ji mají všechny ranges. Tento objekt je ekvivalentní C++ iterátoru. Kromě vlastního interface implementuje i interface standardního iterátoru (typ iterátoru závisí na tom, jaký je typ spojené range - tzn. random access range bude mít random access half, resp. iterátor).

    Stejně jako se dá vytvořit range half z jakékoli range, tak se dá vytvořit range ze dvou polovin. Takže příklad s find() bude vypadat takto:

    Vector<int> x(range(20)); // pole 0, 1, 2, 3, ... 19
    auto h1 = x.each().half();
    auto h2 = find(x.each(), 15).half();
    auto r = h1.each(h2); // 0, 1, 2, 3 ... 14
    

    Objekt typu RangeHalf implementuje metodu each() pro jednoduché vytvoření nové range.

    Další změny

    RandomAccessRange má teď podtyp, FiniteRandomAccessRange. Implementoval jsem spoustu nových API a utilit. Range traits API je kompletně nové a použitelnější. A přidal jsem nové typy ranges do základní knihovny.

    Popsat tady vše by bylo moc nadlouho, takže kohokoliv to zajímá, si může přečíst článek na wiki (nicméně v angličtině).

    Příklady

    Připravil jsem pár příkladů, jak s ranges pracovat.

    Funkcionální map()

    Tato klasická higher-order funkce se dá implementovat i s ranges, a je přímo v OctaSTD.

    auto r1 = range(30); // 0, 1, 2 ... 29
    auto r2 = map(r, [](int v) { return v + 20 }); // 20, 21, 22 ... 49
    for (int i: r2)
        printf("%d\n", i);
    

    Výsledný range funguje "líně"... tzn. nová hodnota se mapuje až v případě potřeby. Takže se nepoužívá místo navíc.

    Funkcionální filter()

    auto r1 = range(30); // 0, 1, 2 ... 29
    auto r2 = filter(r1, [](int v) { return !(v % 2); }); // 0, 2, 4 ... 28
    

    Filtrační range funguje taky "líně". Implementuje požadavky pro ForwardRange.

    Pokročilejší ukázka

    Dejme tomu, že máme pole, které chceme vypsat na standardní výstup po 3 prvcích. OctaSTD má standardní funkci chunks(), která vrátí novou range, která "rozkouskuje" původní range. Takže můžeme udělat něco takového:

    auto r = range(11);
    // { 0, 1, 2 }
    // { 3, 4, 5 }
    // { 6, 7, 8 }
    // { 9, 10 }
    for (auto cr: chunks(r, 3))
        printf("%s\n", to_string(cr).data());
    

    Tato ukázka využívá string interface, který hned popíšu.

    String interface

    OctaSTD teď podporuje řetězce. Spolu s řetězci knihovna podporuje i string interface. Resp. stanardní knihovna poskytuje objekt typu ToString. Tento objekt má standardní specializace pro všechny primitivní numerické typy, pointery, řetězce samotné, StringRange apod. Každopádně pokud vlastní objekt poskytuje metodu octa::String to_string() const, tak jej bude automaticky podporovat i ToString.

    Pokud objekt nepodporuje tuto metodu, ale má range interface (tzn. metodu each()), tak bude s ToString fungovat taky - ToString podporuje ranges.

    Hash a swap interface

    Podobně funguje i hash interface. Pokud objekt poskytuje metodu size_t to_hash() const, standardní objekt ToHash jej bude podporovat (v defaultu podporuje všechny skalární typy).

    Třetí interface pro vlastní objekty je swap interface. Pokud objekt poskytuje metodu void swap(decltype(*this) &), standardní funkce octa::swap ji automaticky zavolá.

    Závěr

    Mohl bych popsat daleko víc, ale změn a funkcí je tolik, že nevím, čím začít. Tak alespoň těchto pár ukázek. Wiki postupně budu rozšiřovat, takže tam bude v podstatě vše. A jakékoliv nápady, kritiku apod. můžete napsat do komentářů.

           

    Hodnocení: 90 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    14.6.2015 21:36 txzn
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    Na první pohled to vypadá dost zajímavě. (Normální C++ STL je docela sračka.)
    q66 avatar 14.6.2015 22:35 q66 | skóre: 32 | blog: Q's CZ devblog
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    dost věcí ještě chybí, nicméně základní design tam je a nejdůležitější komponenty jsou už aspoň z části tam...
    14.6.2015 22:45 Ivorne | blog: Ivorne
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    V čem je STL sračka?

    Nějaké konkrétní koncepční/implementační chyby?

    O STL se zajímám, takže tohle by pro mě byla přínosná informace.
    q66 avatar 14.6.2015 22:55 q66 | skóre: 32 | blog: Q's CZ devblog
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    stream API je dost hrůza třeba
    15.6.2015 16:00 Jardík
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    Stream API není nejlepší (taky je hodně staré), ale hrůza to zas není. Pokud po vytvoření objektu nezapomenete zavolat exceptions() a nastavit tak výjimky, tak se o nic nemusíte starat a jenom načítat/zapisovat.
    15.6.2015 15:09 ugh
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    Třeba v tom, že tam není nic jako filter/map z OctaSTD. Čachry s iterátorama.
    15.6.2015 16:09 Jardík
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    Za odstranění rezervovaných identifikátorů pochvala. Jenom ale pořád nechápu tu potřebu reimplementovat standardní knihovnu kvůli ranges. Budete teď mít hlavně závislosti dvě. Závislost na standardní knihovně neodstraníte (např. operátor new vyhazuje std::bad_alloc, initializer list je daný std::initializer_list, typeid() vrací std::type_info const a jistě další věci) a budete záviset na dalších věcech (OctaSTD). Ale vynechejme to, je to vaše věc.

    Jak je na tom OctaSTD s výjimkami? Garance apod. Dáváte na to pozor? Píšu-li náhradu standardní knihovny, měla by být nějak exception safe, jinak se stává prakticky nepoužitelnou.
    q66 avatar 15.6.2015 16:17 q66 | skóre: 32 | blog: Q's CZ devblog
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    závislost na standardní knihovně není (mám vlastní implementace operátoru new, initializer listů apod - používají se, když se nepoužívá standardní knihovna), rtti a exceptions ignoruju (budu mít vlastní error handling pomocí option types apod.) - kód samotný by měl být většinou exception safe i tak, ale noexcept tam není (jen další věc na implementaci a dokumentaci, na což vážně nemám čas, zvlášť když to nevyužiju)
    15.6.2015 19:04 Jardík
    Rozbalit Rozbalit vše Re: OctaForge - OctaSTD update
    Jen tak letmo procházím zdroják array.h. Pozor,
    Size max_size() const { return Size(~0) / sizeof(T); }
    
    Nemusí asi správně fungovat, když signed int není na dané platformě dvojkový doplněk (já vím, já vím, která není, že). Naopak Size(-1) bude fungovat vždy, kvůli jasně definovanému pravidlu pro převod signed na unsigned. Nebo lze použít ~Size(0)

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.