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í
×

dnes 01:55 | Bezpečnostní upozornění

Společnost Uber potvrdila bezpečnostní incident a únik dat v roce 2016. Unikly údaje o 57 milionech cestujících (jména, emailové adresy a čísla mobilních telefonů) a 600 tisících řidičích (navíc čísla řidičských průkazů).

Ladislav Hagara | Komentářů: 0
včera 23:44 | Humor

Co vypíše příkaz man půl hodiny po půlnoci? Text "gimme gimme gimme". Jedná se o virtuální velikonoční vajíčko připomínající skupinu ABBA a její hit Gimme! Gimme! Gimme! (A Man After Midnight). Problém nastane, pokud gimme gimme gimme nabourá automatizované testování softwaru. To se pak příkaz man musí opravit [Bug 1515352] [reddit].

Ladislav Hagara | Komentářů: 4
včera 18:11 | Zajímavý článek

Mozilla.cz informuje, že Firefox na Fedoře podporuje Client Side Decorations. Firefox na Linuxu se vykresluje včetně standardního záhlaví okna, které je v případě webového prohlížeče většinou nadbytečné a ubírá drahocenné vertikální místo na obrazovce. Verze distribuovaná uživatelům Fedory však nyní obsahuje experimentální podporu pro takzvané Client Side Decorations, které umožňují vykreslování „oušek“ panelů do záhlaví okna.

Ladislav Hagara | Komentářů: 9
včera 05:00 | Bezpečnostní upozornění

Maxim Goryachy a Mark Ermolov ze společnosti Positive Technologies budou mít v prosinci na konferenci Black Hat Europe 2017 přednášku s názvem "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". O nalezeném bezpečnostním problému informovali společnost Intel. Ta bezpečnostní problém INTEL-SA-00086 v Intel Management Engine (ME), Intel Server Platform Services (SPS) a Intel

… více »
Ladislav Hagara | Komentářů: 28
včera 01:33 | Zajímavý projekt

Na Humble Bundle byla spuštěna akce Humble Book Bundle: Java. Za 1 dolar a více lze koupit 5 elektronických knih, za 8 dolarů a více 10 elektronických knih a za 15 dolarů a více 15 elektronických knih věnovaných programovacímu jazyku Java od nakladatelství O'Reilly. Peníze lze libovolně rozdělit mezi nakladatelství O'Reilly, neziskovou organizaci Code for America a Humble Bundle.

Ladislav Hagara | Komentářů: 0
včera 00:11 | Zajímavý projekt

Článek na OMG! Ubuntu! představuje rodinu písma IBM Plex. Jedná se o open source písmo (GitHub) navržené a uvolněné společností IBM (YouTube, Carbon Design System). Ukázka na Font Squirrel.

Ladislav Hagara | Komentářů: 11
20.11. 23:22 | Komunita

Na Humble Bundle lze získat počítačovou hru Brütal Legend (Wikipedie, YouTube) běžící také v Linuxu zdarma. Speciální akce končí ve středu v 19:00.

Ladislav Hagara | Komentářů: 0
20.11. 06:00 | Zajímavý článek

USA Network vysílá již třetí sérii seriálu Mr. Robot (Wikipedie, ČSFD.cz). Ryan Kazanciyan, technický konzultant seriálu, se na Medium v sérii článků Mr. Robot Disassembled věnuje jednotlivým dílům a popisuje použité nástroje a postupy.

Ladislav Hagara | Komentářů: 2
19.11. 23:55 | IT novinky

Společnost StartCom oficiálně oznámila, že jako certifikační autorita končí. Od 1. ledna 2018 přestane vydávat nové certifikáty a následující 2 roky bude poskytovat OCSP a CRL. Počátkem roku 2020 budou všechny platné certifikáty zneplatněny.

Ladislav Hagara | Komentářů: 53
19.11. 22:00 | IT novinky

Hodnota Bitcoinu, decentralizované kryptoměny, překonala hranici 8 000 dolarů [reddit].

Ladislav Hagara | Komentářů: 5
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (9%)
 (1%)
 (1%)
 (1%)
 (74%)
 (14%)
Celkem 735 hlasů
 Komentářů: 37, poslední včera 15:21
    Rozcestník

    libostd - dokumentace, stabilizace, unit testy a další

    6.5. 16:41 | Přečteno: 879× | octaforge | Výběrový blog | poslední úprava: 6.5. 16:46

    Nových funkcí poslední dobou sice až tolik nebylo, změn celkově ale bylo i tak dost.

    Změna názvu

    OctaSTD se nově jmenuje libostd. Důvodem je nový styl pojmenování podprojektů v OctaForge, kde knihovny mají předponu lib. V API toto neznamená skoro žádné změny, hlavní namespace vždy byl ostd.

    Stabilizace a dokumentace

    Momentálním cílem je během léta vydat první oficiální ukázkovou verzi se skoro stabilním API, za účelem získání zpětné vazby. Kvůli tomu jsem poslední dobou pracoval na dokumentaci a celá knihovna je teď zdokumentovaná. Dokumentaci lze najít zde. Obsahuje jak kompletní dokumentaci API, tak i ukázky použití a doprovodný vysvětlující text.

    Od teď je cílem mít vždy dokumentaci aktuální - veškerý nový kód bude od začátku zdokumentován a samotný HTML výstup dostupný přes uvedený odkaz se aktualizuje při každé změně.

    Nově má libostd i modul pro unit testing, který se používá pro testování celé knihovny. Prozatím existuje jen pár základních testů.

    Concurrency modul

    V posledním článku byl concurrency modul dost základní, proto v něm probíhá nejvíc změn. Rozepíšu ty hlavní.

    Rozšíření API schedulerů

    Schedulery nově podporují alokaci stacků a mají i vlastní stack allocator. Hlavním důvodem je používání samostatných korutin a generátorů. Ty si většinou alokují vlastní stack, ale nově je možné použít ten samý alokátor použitý pro jednotlivé úlohy, což je efektivnější. Nové API vypadá takto:

    
    virtual stack_context allocate_stack() = 0;
    virtual void deallocate_stack(stack_context &) noexcept = 0;
    virtual void reserve_stacks(std::size_t n) = 0;
    stack_allocator get_stack_allocator() noexcept;
    

    První tři metody implementuje samotný scheduler. Poslední metoda vrátí interní typ, který používá ty první dvě metody. Výsledek z volání get_stack_allocator() se dá použít přímo jako stack allocator pro korutiny. Pro pohodlí používání má základní scheduler interface i tyto dvě metody:

    
    template<typename T, typename F>
    coroutine<T> make_coroutine(F &&func);
    template<typename T, typename F>
    generator<T> make_generator(F &&func);
    

    Ty vytvoří buď korutinu nebo generátor s použitím tohoto alokátoru. Jinak metoda reserve_stacks(n) existuje, protože schedulery většinou vnitřně používají stack pool. Díky této metodě se dá předem rezervovat určité množství stacků, tím pádem omezit počet alokací.

    Nově mají schedulery i další metody:

    
    template<typename F, typename ...A>
    tid<std::result_of_t<F(A...)>> spawn(F func, A &&...args);
    template<typename T>
    channel<T> make_channel();
    

    Tyto metody dříve existovaly pouze jako globální. Teď se implementují přímo na scheduleru a ty globální je pouze volají na aktuálním scheduleru. Stejně tak nově globálně existují i make_coroutine a make_generator. Virtuální metoda, která se dříve jmeovala spawn a je součástí základního scheduler interface, je teď do_spawn.

    Objektová reprezentace úloh

    Modul nově má novou strukturu tid<T>. Ta se vrací buď z metody scheduleru nebo globální funkce spawn. Reprezentuje jednu úlohu podobně jako std::thread reprezentuje vlákno, ale funguje i podobně jako std::future. Má tři metody:

    
    T get();
    bool valid() const;
    void wait() const;
    

    Metoda wait() počká na dokončení úlohy. Pokud je úloha už skončená, neudělá nic. Efektivně se volá z metody get(), která vrátí návratovou hodnotu úlohy. Pokud je T void, metoda get() nevrací nic. Stále je ale důležitá, protože pokud úloha vyvolá výjímku, je uložena ve struktuře tid a metoda get() ji znovu vyvolá v úloze, která ji volá. To umožňuje jednoduchou správu výjímek mezi úlohami, které mohou být v úplně jiných vláknech - vše je bezpečné a synchronizované.

    Metoda valid() vrací první true, ale po volání get() vrátí false. V podstatě jen ověří, jestli návratová hodnota nebo výjímka už je zpracována. Metodu get() není bezpečné volat několikrát po sobě.

    Zjednodušení range systému

    Nově ranges nepotřebují definice metod equals_front/back, distance_front/back, pop_front/back_n, push_front/back_n. Kvůli tomu bohužel už není možné tvořit z ranges iterátory. Po delší úvaze jsem se rozhodl pro tuto změnu, protože dřívější interface byl moc komplikovaný a možnost tvořit z ranges iterátory není až tak důležitá - vždy se to dá udělat i jinak. Metody pop_front_n a pop_back_n teď existují jako globální funkce range_pop_front_n a range_pop_back_n. Ty se dají specializovat pro vlastní range typy a chovají se teď bezpečněji (pokud je range objekt kratší než požadovaný počet prvků, použije se jen počet prvků v range; opravdový počet zpracovaných prvků je návratová hodnota) a pro výkon používají metodu slice() kde je to možné.

    Metoda slice() teď má verzi s jedním argumentem. Platí:

    
    auto slice(size_type n) { return slice(n, size()); }
    

    Vnitřní typ difference_type byl v range systému odstraněn, protože už není použit. Některé typy jako join_range, zip_range, move_range, reference_range, map_range apod už nejsou viditelné ve veřejném API a jsou dostupné pouze přes ty správné metody.

    Sice už není možné tvořit normální pokročilé iterátory pomocí ranges, ale stále je možné vytvořit dva jednoduché input iterátory z celého range objektu. Každý range objekt má nově toto API:

    
    using full_iterator = ...;
    full_iterator iter_begin() const;
    full_iterator iter_end() const;
    

    Hlavní použití pro tyto metody je s STL container typy - např. pro vložení range objektu na určité místo do std::vector. Tento iterátor má jen tu nejzákladnější funkcionalitu, např. jeho operator== funguje na základě volání empty() na jeho range objektu. Proto se dají tyto dvě metody použít pouze pro reprezentaci celé sekvence.

    Build systém

    Nově se využívá build utilita napsaná v C++. Umožňuje sestavení na všech podporovaných platformách. První se zkompiluje a pak může kompilovat libostd:

    
    c++ build.cc -o build -I. -std=c++1z -pthread
    ./build help
    

    Důvodem je nepřinášet do knihovny žádné nové závislosti a stále zajistit jednoduché sestavení na všech platformách včetně Windows, Windows podpora momentálně ale chybí, bude potřebovat několik menších změn. Nástroj podporuje sestavení ve více vláknech, takže je kompilace rychlá; zkompiluje i všechny ukázky, unit testy a knihovnu i otestuje. Ostatní součásti OctaForge se v budoucnu budou kompilovat pomocí OctaBuildu. Pro libostd jej ale není možné použít, protože libostd knihovna je samotná závislosti OctaBuildu.

    Závěr

    To je prozatím vše. V repozitáři je i mnoho dalších změn, ale ty jsou většinou malé. Až budou další velké změny, zmíním je v dalším zápisku.

           

    Hodnocení: 100 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    7.5. 13:19 stepan
    Rozbalit Rozbalit vše Re: libostd - dokumentace, stabilizace, unit testy a další
    Ahoj, jak vidis budoucnost OctaForge jako herniho enginu? Je mrtev? Chystaji se na nem nejake hry, jak jsi pred lety avizoval, anebo to padlo? Diky za odpoved, kazdopadne hezka knihovna.
    q66 avatar 7.5. 19:39 q66 | skóre: 32 | blog: Q's CZ devblog
    Rozbalit Rozbalit vše Re: libostd - dokumentace, stabilizace, unit testy a další
    Není, jen se rozděluje do víc podprojektů a celkově to restartuju (nová generace bude mít nativní API, bude umět plně využít vícejádrové systémy, bude mít dynamicky načítané moduly s možností restartu jednotlivých modulů za běhu, podporu pro mobilní zařízení a konzole a další věci, které by se starším designem nešly)
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.