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 19:11 | Nová verze

Do aplikace pro instant messaging Telegram (Wikipedie) lze nově nahrát češtinu. Více v příspěvku na blogu Telegramu.

Ladislav Hagara | Komentářů: 2
včera 10:55 | Nová verze

Jean-Baptiste Kempf, prezident neziskové organizace VideoLAN stojící za svobodným multiplatformním multimediálním přehrávačem a frameworkem VLC, oznámil v příspěvku na svém blogu vydání první oficiální verze 0.1.0 v říjnu představeného dekodéru svobodného videoformátu AV1 (AOMedia Video 1) s názvem dav1d (Dav1d is an AV1 Decoder). Jedná se o alternativu k referenčnímu dekodéru libaom. Kódový název dav1da verze 0.1.0 je Gazelle.

Ladislav Hagara | Komentářů: 2
včera 10:22 | Nová verze

Po více než dvou letech od vydání verze 11.0 byla vydána nová major verze 12.0 svobodného unixového operačního systému FreeBSD. Podrobný přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 4
11.12. 19:55 | Nová verze

Byla vydána verze 3.11 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Řešena je řada bezpečnostních chyb.

Ladislav Hagara | Komentářů: 0
11.12. 15:22 | Nová verze

Byl vydán Mozilla Firefox 64.0. Přehled novinek v poznámkách k vydání a na stránce věnované vývojářům. Nejnovější verze tohoto webového prohlížeče přináší například ovládání více panelů, nebo správce úloh, který lze otevřít v nabídce Firefoxu > Více > Správce úloh, nebo napsáním about:performance do adresního řádku.

Ladislav Hagara | Komentářů: 8
11.12. 13:00 | Zajímavý článek Ladislav Hagara | Komentářů: 0
10.12. 22:33 | Nová verze

Po 3 měsících vývoje od vydání verze 14 byla vydána nová stabilní verze 15 open source systému Nextcloud, forku ownCloudu, umožňujícího provoz vlastního cloudového úložiště. Přehled novinek i s náhledy v příspěvku na blogu. Pro vyzkoušení Nextcloudu je k dispozici demo.

Ladislav Hagara | Komentářů: 6
10.12. 18:00 | IT novinky

Počítačová hra Doom slaví 25 let. Společností id Software ji vydala 10. prosince 1993. Zahrát si ji lze například na Internet Archive.

Ladislav Hagara | Komentářů: 17
9.12. 23:55 | Zajímavý článek

Nakladatelství Raspberry Pi vydalo 244 stránkového průvodce pro úplné začátečníky s jednodeskovým počítačem Raspberry Pi The Official Raspberry Pi Beginner’s Guide (pdf). Programování ve visuálním programovacím jazyce Scratch je věnována nová příručka Code Club Book of Scratch Volume 1 (pdf). Vydáno bylo také třetí číslo časopisu věnovaného počítačovým hrám Wireframe (pdf).

Ladislav Hagara | Komentářů: 0
9.12. 23:44 | Nová verze

U příležitosti oslav jednoho roku prací na debianím balíčku, vyšlo GPXSee 7.0. Nová verze přináší zejména podporu vektorových map (Mapbox PBF) pomocí nově vzniklého Qt pluginu.

Martin Tůma | Komentářů: 8
Chystáte se přejít na Wayland na „desktopu“?
 (25%)
 (6%)
 (12%)
 (30%)
 (27%)
Celkem 111 hlasů
 Komentářů: 14, poslední 10.12. 12:19
Rozcestník

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

6.5.2017 16:41 | Přečteno: 988× | octaforge | Výběrový blog | poslední úprava: 6.5.2017 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.2017 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.2017 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)
8.5. 06:29 Kevin Spires
Rozbalit Rozbalit vše Re: libostd - dokumentace, stabilizace, unit testy a další
Very helpful blog. It is very good to read and meaningful. admin192 admin192

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