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 09:22 | Pozvánky

V Praze dnes probíhá Konference e-infrastruktury CESNET. Na programu je řada zajímavých přednášek. Sledovat je lze i online na stránce konference.

Ladislav Hagara | Komentářů: 0
9.12. 20:11 | Nová verze

Byl vydán Debian 9.3, tj. třetí opravná verze Debianu 9 s kódovým názvem Stretch a Debian 8.10, tj. desá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ářů: 0
9.12. 00:44 | Nová verze

Po 6 měsících vývoje od vydání verze 0.13.0 byla vydána verze 0.14.0 správce balíčků GNU Guix a na něm postavené systémové distribuce GuixSD (Guix System Distribution). Na vývoji se podílelo 88 vývojářů. Přibylo 1 211 nových balíčků. Jejich aktuální počet je 6 668. Aktualizována byla také dokumentace.

Ladislav Hagara | Komentářů: 3
8.12. 21:33 | Nová verze

Po půl roce vývoje od vydání verze 5.9 byla vydána nová stabilní verze 5.10 toolkitu Qt. Přehled novinek na wiki stránce. Současně byla vydána nová verze 4.5.0 integrovaného vývojového prostředí (IDE) Qt Creator nebo verze 1.10 nástroje pro překlad a sestavení programů ze zdrojových kódů Qbs.

Ladislav Hagara | Komentářů: 0
7.12. 11:11 | Komunita

Naprostá většina příjmů Mozilly pochází od výchozích webových vyhledávačů ve Firefoxu. Do konce listopadu 2014 měla Mozilla globální smlouvu se společností Google. Následně bylo místo jedné globální smlouvy uzavřeno několik smluv s konkrétními vyhledávači pro jednotlivé země. V USA byla podepsána pětiletá smlouva s vyhledávačem Yahoo. Dle příspěvku na blogu Mozilly podala společnost Yahoo na Mozillu žalobu ohledně porušení této

… více »
Ladislav Hagara | Komentářů: 0
7.12. 05:55 | Zajímavý článek

V Londýně probíhá konference věnovaná počítačové bezpečnosti Black Hat Europe 2017. Průběžně jsou zveřejňovány prezentace. Videozáznamy budou na YouTube zveřejněny o několik měsíců. Zveřejněna byla například prezentace (pdf) k přednášce "Jak se nabourat do vypnutého počítače, a nebo jak v Intel Management Engine spustit vlastní nepodepsaný kód". Dle oznámení na Twitteru, aktualizace vydaná společností Intel nevylučuje možnost útoku.

Ladislav Hagara | Komentářů: 5
7.12. 04:44 | Komunita

Virtualizační nástroj GNOME Boxy ve Fedoře 27 umožňuje jednoduše stáhnout a nainstalovat Red Hat Enterprise Linux, který je pro vývojáře zdarma. Vývojová verze GNOME Boxy již umožňuje jednoduše stáhnout a nainstalovat další linuxové distribuce. Ukázka na YouTube. Seznam distribucí a jejich verze, nastavení a cesty k ISO obrazům je udržován v knihovně a databázi libosinfo (GitLab).

Ladislav Hagara | Komentářů: 0
7.12. 03:33 | Nová verze

Google Chrome 63 byl prohlášen za stabilní (YouTube). Nejnovější stabilní verze 63.0.3239.84 tohoto webového prohlížeče přináší řadu oprav a vylepšení. Vylepšeny byly také nástroje pro vývojáře. Opraveno bylo 37 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 10
6.12. 22:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených technologií a otevřeného přístupu na 147. brněnský sraz, který proběhne v pátek 15. prosince od 18:00 hodin v restauraci Severka na rohu Tučkové a Zahradníkové.

Ladislav Hagara | Komentářů: 0
6.12. 22:33 | Komunita

V roce 2013 byl představen projekt Debsources, jehož cílem bylo a je poskytnout webové rozhraní ke zdrojovým kódům balíčků obsažených v Debianu. Projekt doteď běžel na doméně debian.net. Dnes bylo oznámeno, že projekt byl přesunut na oficiální infrastrukturu Debianu. Služba Debian Sources nově běží na doméně debian.org. V plánů je řada vylepšení. Již dnes je ke službě k dispozici API a procházet lze také patche a licence.

Ladislav Hagara | Komentářů: 0
Jak se vás potenciálně dotkne trend odstraňování analogového audio konektoru typu 3,5mm jack z „chytrých telefonů“?
 (8%)
 (1%)
 (1%)
 (1%)
 (75%)
 (14%)
Celkem 948 hlasů
 Komentářů: 45, poslední 1.12. 19:00
    Rozcestník

    Nové OctaForge cíle, OctaSTD coroutines a další změny

    6.3. 23:58 | Přečteno: 1377× | octaforge | Výběrový blog | poslední úprava: 10.3. 01:19

    OctaForge projekt už zas běží a s tím přichází i různé změny.

    Libcubescript

    Mnoho změn se událo v mé nezávislé implementaci jazyka CubeScript. Jednou z nich je REPL:

    Ten podporuje různé věci jako doplňování funkcí a nápovědu, jak jde vidět v animaci. Kromě toho oproti implementaci v Cube 2 enginu, popř. Tesseractu podporuje spoustu věcí:

    Ukázkou použití nového API je třeba ten samotný REPL, dostupný zde. API ale ještě není stabilní, takže se může dál měnit, a kromě toho se pracuje na těch věcech jako alokátory.

    OctaSTD

    CubeScript je jedna věc, ale mnoho změn bylo i v OctaSTD.

    C++17 a integrace standardní knihovny

    Zavedl jsem použití C++17. To sice ještě není stabilní a momentálně to všechno vyžaduje aspoň Clang 4.0 nebo GCC 7, a žádný z nich ještě není stabilní venku, nicméně počítám s tím, že až to všechno bude stabilnější, tak budou i ty kompilátory. Clang 4.0 má vyjít během několika dní a GCC 7 pokud vím asi příští měsíc. Pokud se neobjeví nějaká závažná chyba, vyšší požadavky na kompilátor/toolchain nebudou - používá se jen tolik z C++17, kolik poskytují ty toolchainy.

    Výraznou změnou je to, že OctaSTD je teď rozšiřující knihovnou standardní C++ knihovny. To bylo původně důvodem k přechodu na C++17. Nové věci ve standardní knihovně (jako std::string_view) umožňují konečně použitelnou integraci věcí jako ranges pro řetězce a jejich hashování. Samozřejmě se vyžaduje C++17 standardní knihovna, normálně libc++ (ve verzi s Clangem 4.0) nebo libstdc++ (ve verzi s GCC 7).

    Ta integrace není základní - např. je možné vytvářet ranges z iterátorových párů a iterátory z ranges. Je zde integrace se standardními kontejnery včetně vytváření těchto kontejnerů z ranges, pokud jsou iterovatelné, a automatické ranges pro všechny standardní kontejnery.

    Věci jako názvy funkcí a objektů teď používají stejný styl, jako standardní knihovna. Kromě toho je možné postupně OctaSTD zabudovat do jakéhokoliv C++ projektu, klidně i postupně.

    Integrace exceptions

    OctaSTD je teď exception safe a v určitých případech i exceptions využívá, ale jen do míry, kde to má opravdové výhody. Např metoda .put(x) na output_range používá exceptions - díky tomu se algoritmy používající výstupní ranges nemusí starat o chyby (občas to ani není možné, aspoň ne bez komplikace API) a prostě to .put(x) použije - v případě chyby ta metoda vyhodí exception, algoritmus skončí (díky RAII se uvolní dočasné prostředky) a rozhodnutí je na uživateli API. Nebo může použít jako tu output range nějaký bezpečný, kde výjímky nejsou (třeba appender pro přidávání do standardních kontejnerů může vyhodit pouze std::bad_alloc, s čímž ve většině případů nejde nic dělat).

    Změny ve formátovacím modulu

    Už delší dobu OctaSTD poskytuje modul pro formátování řetězců, který používá podobný systém jako v C printf, ale narozdíl od toho je typově bezpečný (třeba %s funguje pro všechny typy). V něm bylo pár změn:

    Všechny možné formátovací featury jsou ukázané zde.

    Coroutines

    OctaSTD teď má podporu coroutines, tzn. funkcí, které se dají zapauzovat a později zas spustit. Context switching je implementovaný pomocí assembleru. Ten jsem nepsal sám, místo toho jsem kód vzal z knihovny Boost.Context - pouze ty asm části, takže tam není žádná Boost závislost. Díky tomu je už teď v OctaSTD podpora pro architektury x86, x86_64, ARM, Aarch64, MIPS, PPC a PPC64, pro ELF (většina Unix-like), Mach-O (Darwin/OS X), XCOFF (AIX), MS PE (Windows) systémy, pro assemblery gas (AT&T syntaxe, umí přeložit i GCC/Clang přímo, pro většinu Unix-like a taky MinGW na Windows), masm (MS Visual Studio) a armasm (Microsoft ARM assembler). To znamená vcelku slušnou portabilitu.

    Momentálně se používá dost naivní přístup k alokaci stacku (prostě obyčejný new[]). To se brzy změní. K alokaci stacku se používá VirtualAlloc na Windows a mmap na POSIX platformách (v případě přítomnosti MAP_ANON nebo MAP_ANONYMOUS, jinak se použije malloc fallback). Možná časem přidám i podporu pro segmentované rostoucí stacky. Ale zatím jednoduchá ukázka:

    coroutine<void()> c = [](auto yield) {
        writeln("hello world");
        yield();
        writeln("test");
    };
    
    c(); // vypíše "hello world"
    c(); // vypíše "test"
    

    V bodě volání yield() se funkce zastaví a pustí opět při dalším volání z toho místa. Ale umožňuje to i transfer dat:

    coroutine<int()> c = [](auto yield) {
        writeln("hello world");
        yield(10);
        writeln("test");
        return 15;
    };
    
    int x = c(); // vypíše "hello world", vrátí 10
    x = c(); // vypíše "test", vrátí 15
    

    A fungují i argumenty (pro dva argumenty yield vrací std::pair, pro více std::tuple):

    coroutine<int(int)> c = [](auto yield, int arg) {
        writefln("hello world %s", arg);
        arg = yield(10);
        writefln("test %s", arg);
        return 15;
    };
    
    int x = c(3); // vypíše "hello world 3", vrátí 10
    x = c(6); // vypíše "test 6", vrátí 15
    

    Protože korutiny mají stack, yield() se může uskutečnit v jakémkoliv vnitřním volání v korutině, takže když z ní zavoláme funkci, která zavolá další funkci, která zavolá yield(), příště se bude pokračovat přesně z toho bodu.

    Korutiny bez argumentů vracející hodnotu se dají použít jako generátory, protože implementují range interface:

    coroutine<int()> c = [](auto yield) {
        yield(5);
        yield(10);
        yield(15);
        return 20;
    };
    
    for (int v: c.iter()) {
        writeln(v); // vypíše 5, pak 10, pak 15, pak 20
    }
    

    Další ukázky třeba zde nebo zde. Korutiny se chovají víceméně jako normální funkce, pouze s tím omezením, že se nedají uložit v std::function (ale jakákoliv funkce se dá uložit v coroutine, vůbec nemusí použít yield), protože není CopyConstructible - pouze MoveConstructible. To je vcelku jasné omezení, stejné je i u normálních systémových vláken. V tomto případě je to kvůli vlastnímu stacku a kontextu, které jsou unikátní pro jednu korutinu a nedají se zkopírovat.

    Cílem je eventuálně implementovat scheduler a umožnit využití N:M mappingu (malé množství systémových vláken na velké množství úloh reprezentovaných korutinami).

    Další změny

    V repozitáři OctaSTD je několik ukázek a kód by měl být také čitelný. Budu přidávat i další ukázky a další featury. OctaSTD momentálně není stabilní, takže API se může dále měnit. Dokumentace také potřebuje napsat...

    OctaForge

    Všechny tyto věci budou základem nové generace OctaForge enginu. Budou dříve nebo později všechny plánované nové věci (masivně paralelní architektura škálovatená na mnohojádrové systémy, podpora mobilních platforem, nativní C++ API, dynamické herní moduly včetně reloadingu apod.) s tím, že všechno bude modulárnější, než dříve. Plánuje se mnoho dalších věcí jako nezávislé projekty, takže spousta komponent bude použitelná i bez enginu - zatím je to tedy jen OctaSTD and libcubescript. Co se týče enginu samotného, herní portál jako dřív se zatím neplánuje - hlavním cílem je teď pouze engine. Další věci se budou dělat později.

    Závěr

    To je prozatím všechno. Od konce minulého roku jsem zpátky v Česku. Pracuju stále pro Samsung, ale dálkově. Během několika měsíců se stěhuju do Brna (kupuju tam byt), tak se zkusím objevit i na nějakých lokálních linuxových událostech...

           

    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.3. 00:50 Maxmilian Prdel
    Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
    Jsi hovado, v tom nejlepsim slova smyslu. +1 za neskutecnou vydrz.
    7.3. 04:09 Sten
    Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
    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. 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.
    q66 avatar 7.3. 11:29 q66 | skóre: 32 | blog: Q's CZ devblog
    Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
    q66 avatar 7.3. 11:26 q66 | skóre: 32 | blog: Q's CZ devblog
    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...
    q66 avatar 7.3. 17:44 q66 | skóre: 32 | blog: Q's CZ devblog
    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. 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
    Moc hezké!
    Pochybnost, nejistota - základ poznání
    skunkOS avatar 7.3. 09:29 skunkOS | skóre: 26 | blog: Tak nějak
    Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
    Krutopřísné.
    http://martinrotter.github.io
    7.3. 23:44 tom
    Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
    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.
    q66 avatar 7.3. 23:54 q66 | skóre: 32 | blog: Q's CZ devblog
    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. 01:07 Radovan
    Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
    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. 17:22 agagd
    Rozbalit Rozbalit vše Re: Nové OctaForge cíle, OctaSTD coroutines a další změny
    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

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