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 11:22 | Komunita

Mozilla.cz informuje, že na blogu Mozilly věnovaném bezpečnosti byly zveřejněny výsledky bezpečnostního auditu služby Firefox Accounts, v českých překladech účet Firefoxu, sloužící hlavně k přihlašování k synchronizaci Firefox Sync. Nalezeno bylo celkem 15 bezpečnostních chyb, z toho jedna byla označena jako kritická a tři jako vážné.

Ladislav Hagara | Komentářů: 0
dnes 11:00 | Nová verze

Byla vydána první stabilní verze 1.0 svobodného komunikačního softwaru Ring (Wikipedie). Ring, původně SFLphone, je součástí projektu GNU [reddit].

Ladislav Hagara | Komentářů: 1
dnes 06:00 | Zajímavý projekt

Warner Skoch na svých stránkách zveřejnil návod (YouTube) na zhotovení kapesní herní konzole MintyPi. Konzole MintyPi je postavena na Raspberry Pi Zero W a RetroPie. Jako obal slouží plechová krabička od mentolek.

Ladislav Hagara | Komentářů: 0
včera 02:00 | Nová verze

Byl vydán Debian 9.1, tj. první opravná verze Debianu 9 s kódovým názvem Stretch a Debian 8.9, tj. devátá opravná verze Debianu 8 s kódovým názvem Jessie. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 9 a Debianu 8 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

Ladislav Hagara | Komentářů: 16
22.7. 15:50 | Zajímavý článek

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice zveřejnila čtyřiačtyřicetistránkovou výroční zprávu za rok 2016. K dispozici je ve formátu pdf ve vysokém (21,68 MB) a nízkém (7,1 MB) rozlišení. Zpráva byla vytvořena ve Scribusu.

Ladislav Hagara | Komentářů: 0
22.7. 14:40 | Zajímavý software

Mozilla.cz informuje, že Firefox Focus pro Android, velmi jednoduchý prohlížeč zaměřený na anonymní prohlížení, dosáhl milionu stažení. Firefox Focus blokuje sledující prvky a reklamy a při ukončení automaticky smaže všechna uložená data stránek, historii prohlížení a cookies.

Ladislav Hagara | Komentářů: 39
22.7. 14:20 | Komunita

Vyplněním dotazníku na Formuláře Google lze ovlivnit výběr výchozích aplikací v Ubuntu 18.04 LTS. Podrobnosti v příspěvku Dustina Kirklanda na Ubuntu Insights [reddit].

Ladislav Hagara | Komentářů: 7
21.7. 11:30 | Komunita

Etherpad (Wikipedie), svobodný online webový textový editor umožnující spolupráci v reálném čase, se stal oficiálním projektem organizace Software Freedom Conservancy (Wikipedie). Vývojáři Etherpadu se tak mohou stejně jako vývojáři dalších projektů soustředit pouze na vývoj softwaru a vše kolem zařídí Software Freedom Conservancy. Spuštěna byla instance Etherpadu pad.sfconservancy.org.

Ladislav Hagara | Komentářů: 3
21.7. 10:40 | Zajímavý článek

Lukáš Růžička se v článku Workrave ve Fedoře aneb jak si nevytunelovat karpál na MojeFedora.cz věnuje aplikaci Workrave (Wikipedie) na sledování času stráveného na počítači, která může pomoci vyhnout se negativním účinkům práce s počítačem (RSI, CTS), nebo je alespoň výrazně zmírnit.

Ladislav Hagara | Komentářů: 1
21.7. 10:00 | Komunita

Na Humble Bundle lze získat počítačovou hru Shadow Warrior: Special Edition běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 2
Těžíte nějakou kryptoměnu?
 (5%)
 (3%)
 (20%)
 (71%)
Celkem 59 hlasů
 Komentářů: 2, poslední dnes 03:34
    Rozcestník

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

    6.5. 16:41 | Přečteno: 812× | 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.