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

Byla vydána verze 11.3 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností i s náhledy v příspěvku na blogu.

Ladislav Hagara | Komentářů: 0
22.9. 13:00 | Komunita

Do 30. října se lze přihlásit do dalšího kola programu Outreachy (Wikipedie), jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 4. prosince 2018 do 4. března 2019, v participujících organizacích lze vydělat 5 500 USD.

Ladislav Hagara | Komentářů: 85
21.9. 22:22 | Komunita

Společnost Purism představila kryptografický token Librem Key. Koupit jej lze za 59 dolarů. Token byl vyvinut ve spolupráci se společností Nitrokey a poskytuje jak OpenPGP čipovou kartu, tak zabezpečení bootování notebooků Librem a také dalších notebooků s open source firmwarem Heads.

Ladislav Hagara | Komentářů: 8
21.9. 20:33 | Nová verze

Společnost NVIDIA oficiálně vydala verzi 10.0 toolkitu CUDA (Wikipedie) umožňujícího vývoj aplikací běžících na jejich grafických kartách. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
21.9. 20:00 | Upozornění

Příspěvek Jak přežít plánovanou údržbu DNS na blogu zaměstnanců CZ.NIC upozorňuje na historicky poprvé podepsání DNS root zóny novým klíčem dne 11. října 2018 v 18:00. Software, který nebude po tomto okamžiku obsahovat nový DNSSEC root klíč, nebude schopen resolvovat žádná data. Druhým důležitým datem je 1. února 2019, kdy významní výrobci DNS softwaru, také historicky poprvé, přestanou podporovat servery, které porušují DNS standard

… více »
Ladislav Hagara | Komentářů: 11
21.9. 15:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 156. brněnský sraz, který proběhne v pátek 21. září od 18:00 v restauraci Na Purkyňce na adrese Purkyňova 80.

Ladislav Hagara | Komentářů: 0
21.9. 13:22 | Nová verze

Alan Griffiths z Canonicalu oznámil vydání verze 1.0.0 display serveru Mir (GitHub, Wikipedie). Mir byl představen v březnu 2013 jako náhrada X serveru a alternativa k Waylandu. Dnes Mir běží nad Waylandem a cílen je na internet věcí (IoT).

Ladislav Hagara | Komentářů: 0
20.9. 22:00 | Nasazení Linuxu
Stabilní aktualizace Chrome OS 69 (resp. Chromium OS), konkrétně 69.0.3497.95, přináší mj. podporu linuxových aplikací. Implementována je pomocí virtualizace, a proto je tato funkce také omezena na zařízení s dostatkem paměti a podporou hardwarové akcelerace, tudíž nejsou podporovány chromebooky s 32bitovými architekturami ARM, či Intel Bay Trail (tzn. bez Intel VT-x).
Fluttershy, yay! | Komentářů: 5
20.9. 21:32 | Zajímavý projekt

Došlo k uvolnění linuxové distribuce CLIP OS, vyvíjené francouzským úřadem pro kybernetickou bezpečnost ANSSI, jako open source. Vznikla za účelem nasazení v úřadech, kde je potřeba omezit přístup k důvěrným datům. Je založená na Gentoo.

Fluttershy, yay! | Komentářů: 1
20.9. 16:00 | Komerce

Zjistěte více o bezpečné a flexibilní architektuře v cloudu! IBM Cloud poskytuje bezpečné úložiště pro Vaše obchodní data s možností škálovatelnosti a flexibilitou ukládání dat. Zároveň nabízí prostředky pro jejich analýzu, vizualizaci, reporting a podporu rozhodování.

… více »
Fluttershy, yay! | Komentářů: 12
Na optické médium (CD, DVD, BD aj.) jsem naposledy vypaloval(a) data před méně než
 (13%)
 (15%)
 (21%)
 (23%)
 (25%)
 (4%)
 (1%)
Celkem 399 hlasů
 Komentářů: 33, poslední 16.9. 11:55
Rozcestník

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

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