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

Vyšla nová verze nástroje pro správu diskových oddílů GParted a distribuce GParted Live, která obsahuje tento a další nástroje pro zálohování či obnovu dat. GParted 1.1.0 aktualizuje překlady a opravuje chyby včetně v např. přesunu uzamknutých šifrovaných oddílů LUKS, výpočtu velikosti souborového systému JFS či rozpoznávání členů ATARAID a jejich stavu. GParted Live 1.1.0-1 pak obsahuje novou verzi GParted, Linux 5.4.13 a vůbec novější balíčky z Debianu Sid.

Fluttershy, yay! | Komentářů: 0
dnes 09:55 | Zajímavý článek

Jiří Eischmann se v příspěvku /e/: Android bez Googlu na starém telefonu na svém blogu podělil o zkušenosti s mobilním operačním systémem /e/ (Wikipedie) na telefonu Samsung Galaxy S4 Mini: Pokud hledáte pro svůj androidí telefon systém bez závislosti na Googlu, je to asi ta nejlepší volba.

Ladislav Hagara | Komentářů: 5
včera 18:55 | Nová verze

Po roce vývoje od vydání verze 4.0 a více než 7 400 změnách byla vydána nová stabilní verze 5.0 softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem, Wine (Wikipedie). Z novinek lze zdůraznit moduly ve formátu PE, podporu více monitorů, reimplementaci XAudio2 anebo podporu Vulkanu 1.1. Podrobnosti v poznámkách k vydání.

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

Michal Altair Valášek publikoval na svém blogu návod MQTT server do kapsy: Mosquitto na Orange Pi Zero na postavení vlastního MQTT (MQ Telemetry Transport) serveru s brokerem Mosquitto postaveného na ARM klonu Debianu Armbian na jednodeskovém počítači za deset dolarů Orange Pi Zero a zabezpečeného pomocí TLS certifikátů od Let's Encrypt a uživatelských jmen a hesel.

Ladislav Hagara | Komentářů: 3
20.1. 17:11 | Nová verze

Vyšlo Pharo 8.0. Přináší lepší nástroje pro refactoring či spoluráci s Gitem. Pharo je programovací jazyk a vývojové prostředí s řadou pokročilých vlastností.

Pavel Křivánek | Komentářů: 5
20.1. 13:11 | Pozvánky

Ak pracujete na zaujímavom projekte, zaujíma Vás špecifická téma alebo sa vyznáte o novinkách a trendoch vo svete Pythonu, zdieľajte to s ostatnými. Možnosť prihlásiť sa so svojou témou na PyConSK 2020 je otvorená do 31. 1. 2020.

… více »
RicCo386 | Komentářů: 0
20.1. 10:55 | Komunita

Mozilla.cz informuje (en), že Firefox Preview (kódově Fenix) se blíží svému prvnímu ostřejšímu vydání. Tento zcela nový prohlížeč pro Android nahradí zítra 21. ledna noční verze stávajícího Firefoxu pro Android (kódově Fennec).

Ladislav Hagara | Komentářů: 18
20.1. 06:00 | Zajímavý software

Byl vydán MindForger v nové major verzi 1.50.0. Přehled novinek na GitHubu. MindForger je poznámkový blok, markdown editor a nástroj pro management znalostí.

Ladislav Hagara | Komentářů: 2
19.1. 20:22 | Nová verze

Byla vydána nová stabilní verze 18 open source cloudového systému Nextcloud (Wikipedie). Nová verze tohoto forku ownCloudu přichází s novým názvem Nextcloud Hub a řadou předinstalovaných aplikací (Files, Flow, ONLYOFFICE, Photos, Calendar, Mail, Talk). Podrobnosti i s náhledy a videi v příspěvku na blogu.

Ladislav Hagara | Komentářů: 14
17.1. 19:00 | Komunita

Fedora Magazine informuje, že Fedora CoreOS je již k běžnému používání. Jedná se o nástupce Fedora Atomic Hostu a CoreOS Container Linuxu. Projekt Fedora CoreOS byl představen v červnu 2018. Preview verze byla vydána v červenci 2019.

Ladislav Hagara | Komentářů: 0
Zdají se vám sny s IT tématikou?
 (9%)
 (1%)
 (14%)
 (17%)
 (53%)
 (7%)
Celkem 251 hlasů
 Komentářů: 10, poslední 18.1. 16:18
Rozcestník

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

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