Portál AbcLinuxu, 4. června 2024 09:42


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
7.3.2017 00:50 Maxmilian Prdel
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Odpovědět | Sbalit | Link | Blokovat | Admin
Jsi hovado, v tom nejlepsim slova smyslu. +1 za neskutecnou vydrz.
7.3.2017 04:09 Sten
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Odpovědět | Sbalit | Link | Blokovat | Admin
Zběžně jsem kouknul na GitHub a měl bych pár doporučení k C++:

Používej explicit operator bool(). Implicitní operator bool() lze použít pro převod na číselné typy, což je náchylné na chyby:
coroutine<void()> a = …;
coroutine<void()> b = …;
a + b;
(Keyword: safebool)

Pomocné metody typu swap je lepší uvádět jako friend void swap(type &a, type &b) { … } uvnitř tříd. Řeší to některé problémy s nutností hledat správný namespace a udržuje kód u toho, k čemu to patří. Při volání se pak místo
void do_swap() {
    std::swap(a, b);
    ostd::swap(c, d);
    ostd::foo::swap(e, f); // Nebo to bylo ostd::bar::swap?
}
použije
void do_swap() {
    using std::swap;
    swap(a, b);
    swap(c, d); // friend třídy instancí c a d, nepotřebuje namespace
    swap(e, f);
}
(Keyword: argument-dependent lookup)

Místo
type(type const&) = delete;
type(type &&) = default;
type& operator =(type const&) = delete;
type& operator =(type &&) = default;
doporučuji použít noncopyable á la Boost. Je to přehlednější a lépe se to používá v šablonovém metaprogramování.

Jinak moc pěkný kód *thumbs up*
7.3.2017 04:15 Sten
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Jinak k tomu, proč použít swap(a, b) místo a.swap(b): to první funguje v šablonách, kde nemusím řešit, jestli ten typ má metodu swap nebo používá std::swap.
7.3.2017 11:29 ---- | skóre: 33 | blog:
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
7.3.2017 11:26 ---- | skóre: 33 | blog:
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Ono je možné použít std::swap i tak, protože ADL prostě hledá globální "swap" funkci v namespace toho typu, jestli je to friend je celkem jedno. Takže volání std::swap(foo::bar::T{}, foo::bar::T{}) první vyzkouší foo::bar::swap(a, b) a pak použije standardní obecný fallback. OctaSTD deklaruje jak vnitřní swap metody, tak samostatné funkce, stejně jako všechny standardní containery, takže je možné na nich použít jak x.swap(b), tak std::swap(a, b). Ty volné swap funkce jsou většinou deklarované hned po tom containeru, jako inline void swap(mytype &a, mytype &b) { a.swap(b); }.

Ohledně toho explicitního boolu, záměrem je samozřejmě použít explicitní. Momentální použití implicitního je bug...
7.3.2017 17:44 ---- | skóre: 33 | blog:
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
každopádně všechno opraveno... na jednom místě to opravdu nebylo ADL-aware, ale to jsem jen přehlédl na mé straně, teď je všechno v pořádku.
7.3.2017 07:33 KS | skóre: 10 | blog: blg | Horní polní u západní dolní
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Odpovědět | Sbalit | Link | Blokovat | Admin
Moc hezké!
Pochybnost, nejistota - základ poznání
skunkOS avatar 7.3.2017 09:29 skunkOS | skóre: 27 | blog: Tak nějak
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Odpovědět | Sbalit | Link | Blokovat | Admin
Krutopřísné.
http://martinrotter.github.io
7.3.2017 23:44 tom
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Odpovědět | Sbalit | Link | Blokovat | Admin
btw znate libcoro - http://software.schmorp.de/pkg/libcoro.html , primarne je to pouzite v Perlovskem Coro (ktere se hezky kombinuje s event loopem AnyEvent) a mimo to ji tvori jen jeden .c soubor a jedna hlavicka, takze pro zacleneni do jinejch projektu je to idealni.
7.3.2017 23:54 ---- | skóre: 33 | blog:
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Znám, má několik backendů, v mém případě je to pouze asm kód - ale pro C++ se taková knihovna nehodí, protože je nutné řešit exceptions a destruktory lokálních proměnných v korutině, s třeba tím ucontextem to moc nejde (resp. skoro jde, ale pokud korutina umře v polovině, tak se ty destruktory prostě nezavolají, není tam žádný ekvivalent ontop_fcontext)... nicméně ten asm mám stejně pro všechny podporované platformy, tak je to celkem jedno.

Jinak jsem zrovna implementoval lepší stack allocator, takže by ta implementace v ostd měla být teď víceméně kompletní s relativně ideálním výkonem (jen momentálně nepodporuje rostoucí segmented stacky, ale to možná jindy...)
8.3.2017 01:07 Radovan
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Odpovědět | Sbalit | Link | Blokovat | Admin
Jak vypadá tvůj běžný den? Zbývá ti kromě práce a vývoje OctaForge čas i na něco jiného? Skoro by mohl být zajímavější článek o tom.
14.3.2017 17:22 agagd
Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
Odpovědět | Sbalit | Link | Blokovat | Admin
Pre Cesko je dobre ze taky clovek ako ty ostava zit v rodnej krajine. Dovolim si tvrdit ze patris medzi top 5% ludi v krajine.

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.