abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    včera 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    včera 02:00 | IT novinky

    Ještě letos vyjde Kingdom Come: Deliverance II (YouTube), pokračování počítačové hry Kingdom Come: Deliverance (Wikipedie, ProtonDB Gold).

    Ladislav Hagara | Komentářů: 3
    21.4. 19:11 | Komunita

    Thunderbird 128, příští major verze naplánovaná na červenec, přijde s nativní podporou Exchange napsanou v Rustu.

    Ladislav Hagara | Komentářů: 21
    21.4. 04:44 | Komunita

    Byly vyhlášeny výsledky letošní volby vedoucího projektu Debian (DPL, Wikipedie). Novým vedoucím je Andreas Tille.

    Ladislav Hagara | Komentářů: 7
    21.4. 00:11 | Nová verze

    Po osmi měsících vývoje byla vydána nová verze 0.12.0 programovacího jazyka Zig (GitHub, Wikipedie). Přispělo 268 vývojářů. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 2
    20.4. 23:55 | Pozvánky

    Poslední měsíc byl plný zajímavých akcí, o kterých Vám bastlíři z projektu MacGyver mohou povědět, protože se na ně sami vydali. Kde všude byli, ptáte se? Objevili se na Installfestu, Arduino Day, Hackaday Europe a tajném srazu bastlířů z Twitteru. A z každé akce pro vás mají zajímavé poznatky.

    … více »
    bkralik | Komentářů: 1
    KDE Plasma 6
     (71%)
     (10%)
     (2%)
     (17%)
    Celkem 670 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Jak copy-on-write udělalo náš projekt zase použitelným

    7.2.2013 16:23 | Přečteno: 2577× | Programování | Výběrový blog | poslední úprava: 8.2.2013 14:40

    V našem projektu s otevřeným zdrojovým kódem canal se zabýváme statickou analýzou nad programy přeloženými do LLVM IF. To vyžaduje vytvoření objektu pro každou proměnnou zpracovávaného programu, což s sebou nese zvýšené paměťové nároky. A zde hraje copy-on-write klíčovou roli.

    Princip fungování copy-on-write

    Základním principem copy-on-write je pozdržení vytvoření celkové kopie objektu tak dlouho, dokud to není potřeba - tedy dokud se do objektu nezapisuje. Při realizaci této metody se třídy, které mají mít tuto vlastnost, vybaví počítadlem, které se inkrementuje při vytvoření kopie; při zápisu do daného objektu se pak v případě, že počítadlo je nenulové (tedy existuje kopie), vytvoří fyzická kopie objektu a původní počítadlo se dekrementuje. Implementačně se třída využívající copy-on-write obvykle obalí do jiné třídy, která zajišťuje tuto funkcionalitu.

    Při implementaci je tedy potřeba odchytit dvě operace - vytváření kopie a zápis do objektu. Vzhledem k tomu, že je náš projekt napsán v C++, to umožňuje snadno rozlišit, které objekty jsou modifikovatelné, a které ne (díky klíčovému slovu const). Vytvořili jsme tedy obalující třídu (šablonu), která při vytváření kopie objektu (ať už pomocí kopírovacího konstruktoru či virtuální metody clone) zvýší vnitřní počítadlo. Navenek je dále schopna se "přetypovat" na původní třídu - a to za pomoci konstantních metod (které nevytváří kopii objektu) i nekonstantních metod (u kterých se naopak kopie objektu vytváří). Tohoto je možno dosáhnout mimo jiné pomocí operátor *, ->, případně operátoru přetypování.

    Zde je vhodné zmínit jednu nepříjemnou vlastnost C++:
    class Trida {
        const int& get() const;
        int& get();
    };
    Trida t;
    const Trida& c;
    const int& a = c.get(); //Zavola se const metoda
    const int& b = t.get(); //NEzavola se const metoda!
    

    Pro copy-on-write by bylo vhodné, aby se při přiřazení do proměnné b volala konstantní metoda, zatímco ona se volá nekonstantní (která v kontextu copy-on-write způsobí zbytečnou kopii). Tento problém lze vyřešit buď magií se šablonami (jen v omezené míře; viz dále), přejmenováním nekonstantní metody (třeba na mutable_, neboť mutable je klíčové slovo) nebo použitím ošklivé konstrukce.

    Naše implementace

    Pro náš projekt jsme postupně vyzkoušeli dvě implementace, které se liší přístupem k danému problému - jedna implementuje copy-on-write pro konkrétní třídy (interně nazvaná COW), druhá obaluje všechny objekty v mapě objektů (interně SharedDataPointer). Obojí však řeší problém domén, což jsou naše reprezentace proměnných analyzovaného programu. Všechny třídy, kterých se copy-on-write týká, jsou pak potomci třídy Domain.

    Přístup pro třídy (třída COW)

    V tomto přístupu bylo snahou při vytváření instance domény vytvořit objekt, který se bude tvářit jako doména (bude potomkem třídy Domain) a interně si bude držet instanci vlastní domény, pro kterou bude dělat delegaci volání metod. Protože v projektu často pracujeme i se základní třídou Domain, implementuje třída COW všechny metody této třídy. Pro přetypování z Domain na potomka používáme vlastní šablonovou funkci, což umožňuje nejen přetypování z COW třídy na instanci obalené třídy, ale zároveň to řeší (s pomocí menší šablonové magie) problém s přiřazením nekonstantních objektů do konstantních (více viz zde).

    Vlastnosti tohoto přístupu:

    Přístup pro místo (třída SharedDataPointer)

    V našem projektu máme mapu, která drží všechny proměnné použité při analýze programu. Dalším řešením tedy je při ukládání do této mapy obalit veškeré domény, a při jejich čtení nedělat kopii a při zápisu ano.

    Výsledky

    My jsme se nakonec rozhodli pro druhý přístup, neboť vyžaduje méně změn v kódu a protože většina dat je uložena na jednom místě. Pro efektivní využití bylo však potřeba kód ještě projít a zjistit místa, kde dochází ke kopiím - spousta těch míst totiž tvořila kopii i v momentě, kdy to nebylo potřeba (třeba operátor porovnávání). A jaké byly výsledky (měřili jsme čtyři programy z Coreutils) ?

    Zdroj.

    Závěr

    Díky použití copy-on-write se nám povedlo nejen náš projekt zrychlit, ale především ho učinit použitelným pro další programy (již se zvládneme zpracovat více než 70 programů z Coreutils). Zároveň to náš projekt zrychlilo, neboť již není potřeba provádět operace na objektech, které byly kopiemi jiných objektů.

    Projekt canal se zabývá statickou analýzou nad programy v jazyce C přeloženými do LLVM bytecode (potenciálně však i pro další jazyky přeložené do LLVM). Tento přístup umožňuje zjistit nadmnožinu všech možných hodnot proměnných v programu. Naší snahou je toto umožnit nad co největším množstvím programů. Tento projekt je vytvářen pod Fakultou informatiky Masarykovi univerzity a podporován společností Red Hat.

           

    Hodnocení: 94 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    7.2.2013 17:28 phpGuru
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    nemohl by nekdo 'normalne', napsat, wo co de :-)
    7.2.2013 19:09 Jan33
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    To je jednoduché, vytvoří si objekt A a když chceš zapisovat, vytvoří se kopie ... jo tak, ty bys rád věděl co je canal, hmm, tak to taky nevim.
    7.2.2013 19:43 phpGuru
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    hm, a tim se usetri co? Ze se neco zapise do kopie misto do toho A originalu? A co se vubec zapisuje? Jak vypada ten objekt? Jak vypada to zapisovani?

    Ja to fakt nechapu.
    gogloid avatar 7.2.2013 20:08 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Ušetří se nutnost vytvoření vlastní kopie (což může chvíli trvat, zvlášť u větších objektů), stejně jako paměťová náročnost. Některé jazyky toto řeší za tebe, v C++ je však toto plně v tvých rukách (celá práce s pamětí je v tvých rukách). Stejně tak pokud se nad více objekty provádí stejná operace, tak pokud by u všech dopadla stejně, tak má smysl to dělat jen u jedné (což ušetří další, především časové, prostředky).
    7.2.2013 19:09 Magog | skóre: 6
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Já osobně tento text chápu jako konkrétní případ toho, jak copy-on-write může velmi výrazně snížit HW nároky.
    7.2.2013 19:49 phpGuru
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    jak ja si pamatuji, tak se tahle finta pouziva (pouzivala?) kdysi u forku, kdy se nenalozi cela nova procesni struktura ale zpocatku jen absolutni minimum s tim, ze novy process vlastne ani kopii nechce nybrz by to narocne zkopirovane za chvilku premlatil uplne necim novym, protoze exec.

    Neco takoveho jsem ale v clanku nevycetl.
    7.2.2013 20:01 depka | skóre: 20 | blog: eterity
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    a stale pouziva viz man fork
    Under Linux, fork() is implemented using copy-on-write pages, so the only penalty that it incurs is the time and memory required to duplicate the parent's page tables, and to create a unique task structure for the child.
    stativ avatar 8.2.2013 21:17 stativ | skóre: 54 | blog: SlaNé roury
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    COW se AFAIK používá v clone(), které fork() volá. Má to smysl i proto, že clone() se používá i při implementaci vláken a tam se některé věci vůbec nekopírují.
    Ať sežeru elfa i s chlupama!!! ljirkovsky.wordpress.com stativ.tk
    9.2.2013 03:39 Sten
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Potřebují vytvářet velké množství kopií stejných objektů zabírajících hodně paměti, s tím, že později do libovolné kopie může (ale nemusí) být zapisováno. Tak si řekli, proč vlastně kopírovat ty objekty v případech, kdy se do nich nezapíše? A tak vytváří jen jakože-kopie, které ve skutečnosti sdílí paměť, a teprve při prvním zápisu vytvoří skutečnou kopii. Podle analýzy na konci to evidentně ušetří hodně paměti a výkonu.
    9.2.2013 17:25 phpGuru
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    diky za odpoved. Samozrejme se vtira otazka, odkud prichazi ten pozadavek vytvaret kopie, ktere pak nejsou potreba. :-)
    pavlix avatar 9.2.2013 18:30 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Samozrejme se vtira otazka, odkud prichazi ten pozadavek vytvaret kopie, ktere pak nejsou potreba.
    Tuhle otázku jsem níže naťuknul taky.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 7.2.2013 19:09 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Díky za čtivý článek.

    BTW: To tě někdo donutil ho sepsat, nebo jsi to udělal sám od sebe? Já jen že by bylo fajn číst tu víc podobných, programátorsky orientovaných článků, tak by mě zajímalo jakou mám naději, že se toho někdy dočkám.
    gogloid avatar 7.2.2013 20:05 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Naději rozhodně máš; jestli narazím na další věc, kterou stojí za to publikovat, tak budu :) Nebylo to z donucení, jde o skutečné použití této metody v našem projektu. Jen mě mrzí, že jsem to nepsal před dvěma měsíci, kdy jsme to implementovali, kdy jsem o tom měl větší přehled...
    pavlix avatar 7.2.2013 21:32 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Já musím říct, že jsem měl chuť si článek přečíst, ale je pro mě ohromně nesrozumitelný. Napříklat jsi nejsem jistý, že ta část o kopírování tříd se skutečně týká kopírování tříd a ne instancí. Prostě totální zmatek. Ale kdybys tohle trochu uhladil, tak by se mi něco takového líbilo mezi články.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 7.2.2013 21:37 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Doufám, že to vyznělo správně jako konstruktivní kritika a ne jako trollování :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    gogloid avatar 7.2.2013 21:44 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Ano, vyznělo :) Psal jsem to dnes, tak se na to zkusím zítra podívat a případně nějaké věci ujasnit.
    gogloid avatar 8.2.2013 14:43 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Tak jsem se snažil to trochu upravit - je ještě něco výrazně nesrozumitelného?
    pavlix avatar 8.2.2013 15:47 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Já po tobě ani nežádám, abys to upravoval, to je zcela na tobě. Ale jestli máš pocit, že ti to pomůže, tak…
    Při realizaci této metody se třídy, které mají mít tuto vlastnost, vybaví počítadlem, které se inkrementuje při vytvoření kopie
    Tuhle část snad chápu, takže tuším, že tím máš namysli asi spíš že se inkrementuje místo vytvoření fyzické kopie, tudíž to „při vytváření kopie“ by rozhodně zasloužilo reformulovat.

    Ale to už jsem řešil v jiné diskuzi, že mnozí mají stále ještě náhled na OOP pokažený implementačními detaily C++. Obecný popis toho, co chceme dělat, by neměl vyžadovat přepnutí mozku na C++ mód :D.

    Takhle, já tě nechci nijak prudit, ale celý ten článek vypadá jako když jsi ho psal pro sebe, tedy pro člověka, který do toho vidí. Já jsem z něj byl schopný pochytit co obecně obnáší copy-on-write (což už jsem znal), nějaké ty statistiky jak to pomohlo.

    Ale že bych bez zkoumání samotného kódu chápal, co se vlastně děje, jestli se to nějak uplatí i u nových objektů, a hlavně, proč je pro daný projekt relevantní zrovna kopírování existujících objektů.

    A když už popisuješ konkrétní metody jak toho dosáhnout, tak bych chtěl nejdřív vědět, co daná metoda obnáší, a pak teprve pracovat se specifickými pojmy jako šablonová funkce apod.

    Něco ve stylu (a teď kecám, protože jsem to zdaleka všechno nepochopil)...

    Nové instance tříd se vytvářejí běžným způsobem. Ale protože canal dělá … a k tomu potřebuje často udržovat kopie již existujících instancí, které z důvodu, že …, často zůstávají nezměněné, a protože bychom neradi měnili celý datový model, rozhodli jsme se použít metodu copy-on-write. Umožnuje nám to ušetřit paměť, protože nemusíme alokovat … až do chvíle, kdy se do nového objektu zapisuje.

    A teď bych očekával technické vysvětlení toho, jak je možné se vyhnout té alokaci…

    Místo stovek bajtů pro celý objekt tak můžeme alokovat proxy objekt, který obsahuje informaci, že je zatím nezměněný a odkaz na datový objekt, který využíváme pouze pro čtení. První zápis pomocí proxy objektu způsobí zkopírování datového objektu a zrušení příznaku pouze pro čtení. Od této chvíle se prostřednictvím proxy objektu čte a zapisuje nový datový objekt. Když se nový proxy objekt klonuje, znovu se označí jako read-only.

    Ve skutečnosti je tam potřeba ten reference counting kvůli dealokaci, ale nechtěl jsem ty ukázky příliš komplikovat.

    Minimálně takhle nějak bych si představoval text, který mi má předat něco nového.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    gogloid avatar 9.2.2013 12:19 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Zápisek měl poukázat na dvě věci:
    • na dva způsoby řešení (pro třídu a pro místo)
    • že to může mít opravdu velký přínos
    Účelem nebylo vysvětlení copy-on-write, ani k čemu je to dobré, ani jestli ho využijete ve svých projektech - šlo mi především o to ukázat, že když už se rozhodnete ho využít, abyste měli nějakou inspiraci jak.

    Pro mne z toho plyne důležitá zkušenost, že jsem to měl napsat před dvěma měsíci, když jsme to implementovali, a ne až nyní - v ten moment bych nejspíš napsal dvakrát tak dlouhý zápisek, který by to rozebíral víc ze široka (a tedy by i nejspíš pokryl věci, které ti tam chybí).
    pavlix avatar 9.2.2013 15:43 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    na dva způsoby řešení (pro třídu a pro místo)
    Subjektivně vnímám, že tento účel nesplnilo.
    že to může mít opravdu velký přínos
    Tento účel splnila ta tabulka časů a nebyl by k tomu potřeba zbytek článku.
    šlo mi především o to ukázat, že když už se rozhodnete ho využít, abyste měli nějakou inspiraci jak.
    Opět subjektivně vnímám jako nesplněné.
    Pro mne z toho plyne důležitá zkušenost, že jsem to měl napsat před dvěma měsíci, když jsme to implementovali, a ne až nyní - v ten moment bych nejspíš napsal dvakrát tak dlouhý zápisek, který by to rozebíral víc ze široka (a tedy by i nejspíš pokryl věci, které ti tam chybí).

    To je dost možné. Ono taky záleží na tom, jak moc má člověk na to psaní chuť a čas.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    9.2.2013 22:17 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Očekávané nadávky na C++ pod článkem týkající se C++. => Tentokráte splněno. Už jsem si myslel, že ne, ale pavlix se opět postaral. Takže díky pavlixovi je zase svět srozumitelně předvídatelný a dokonale deterministický. A tedy krásný, nádherný a bez nebezpečí, ale nuda a bez překvapení.

    ---

    Jinak článek je opravdu velmi nesrozumitelný. Obsah je zajímavý, ale zabila to neschopnost psát.

    Každé sdělení (článek, dopis, …) má mít úvod, stať a závěr. Z úvodu by mělo být nastíněné co se bude text řešit, jak to bude řešit, co nebude řešit, o co se jedná, pro koho je, pro koho není, atd.

    Stať by měla slíbené v úvodu učinit. A závěr by to měl ukončit.

    Sám jsem COW implementoval mnohokrát, ale přesto jsem článku neporozuměl zcela. Pochopil jsem, že účelem článku nebylo vysvětlit princip COW, nicméně tím, že druhý odstavec ho „jakoby“ vysvětluje spoustu lidí zmátl a očekávali, že se tedy dozví co to ten COW je. Následně se řeší marginální a vedlejší problém, který vzniká když se kdosi pokouší implementovat COW na const/non const v C++. Pak se ukazují nějaké dva přístupy.

    Následně se dostane na třídu SharedDataPtr, která je věrnou kopií třídy shared_ptr obsažené přímo ve standardní knihovně C++. S výjimkou, že standardní knihovna má tuto třídu thread safe, zatímco v článku zmíněná SharedDataPtr nesmí přijít do multithreadové prostředí.

    Článek obsahuje některé kvalitní a zajímavé věci a úvahy, a moc bych si přál články takového typu číst častěji. Navzdory strašnému slohu, přeházenému pořadí sdělení v textu oproti logice snižující srozumitelnost textu. Přesto bych byl rád, aby takovéto články vznikaly.
    gogloid avatar 9.2.2013 22:37 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Chybami se člověk učí; zatím mě komentáře neodradily od toho, abych tvořil další podobné články (když budu mít o čem psát), a snad již budou srozumitelnější. Tento článek už upravovat nebudu, neboť by to nejspíš vyžadovalo kompletní přepsání, a to se mi z různých důvodů nechce.

    Po zběžném pohledu je shared_ptr obsazen až v C++11, což jej, bohužel, činí pro náš projekt zatím nepoužitelným.
    pavlix avatar 9.2.2013 23:16 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Tento článek už upravovat nebudu, neboť by to nejspíš vyžadovalo kompletní přepsání, a to se mi z různých důvodů nechce.
    Není zapotřebí vypilovávat tenhle jeden článek, spíš se opravdu těším na zlepšení u těch příštích :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Bystroushaak avatar 10.2.2013 10:28 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Tento článek už upravovat nebudu, neboť by to nejspíš vyžadovalo kompletní přepsání, a to se mi z různých důvodů nechce.
    Já být tebou, tak to moc nehrotím. V čechách je problém najít texty o programování, které jsou určeny lidem, jenž už o programování něco vědí. Takové to běžné meziprogramátorské povídání, které se dá najít třeba na redditu. Co ovšem není problém, je sehnat tu tisíc úvodů do něčeho, zas a stále znova. Nechápu proč, imho nemusí být každý blogpost srozumitelný pro všechny kdo náhodou půjdou kolem.
    12.2.2013 18:36 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Protože od určité úrovně vyžaduje od čtenáře určité teoretické nebo matematické znalosti. A nebo napsat 100 × delší úvod, který nejdříve vysvětlí ty teoretické nebo matematické znalosti použité pro danou věc.

    A protože se v Čechách razí, že teorie je fuj, takže člověka to brzy odradí psát kvůli tomu články 30 × delší.

    Momentálně v zahraničí se razí jakýsi kompromis, kdy se teorie nahradí dogmaty a prohlášeními „jenom takto je to správně“, kdy autor smixuje 10 % teoretických znalostí a 90 % vlastních předsudků či co se mu líbí a přetaví to do podoby „takto jedině je to správné“. Na toto téma je dokonce i mnoho amerických knih.

    Jediná cesta v každém oboru od určité úrovně je začít studovat teorii, souvislosti mezi jedinými věcmi, apod.

    A nebo se nakrmit dogmaty, kdy nikdy nevíte, co je lež a co pravda. (Takových dogmat je velmi mnoho zejména v tom jak správně OOP programovat.)

    A vysoký level v programování a sw inženýrství už bez vlastních rozsáhlých znalostí teorie nedáte vůbec.

    Není problém psát články o vyšší úrovni, ale je otravné psát ty úvody pro ty, kdo neznají teorii, souvislosti a další. Nakonec kdo na teorii dlabe, nechť se jednoduše vzdá toho, že by přesáhl určitou úroveň. Protože to stejně jinak nedopadne.
    Josef Kufner avatar 12.2.2013 19:32 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Však ono stačí odkázat na vhodné zdroje a shrnout prerekvizity do jednoho odstavce. Kdo ty rozvleklý kecy má číst pořád dokola.
    Hello world ! Segmentation fault (core dumped)
    Bystroushaak avatar 13.2.2013 09:52 Bystroushaak | skóre: 36 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Kdo ty rozvleklý kecy má číst pořád dokola.
    Jo.
    pavlix avatar 9.2.2013 23:14 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Očekávané nadávky na C++ pod článkem týkající se C++.
    Zřejme jsi si spletl vlákno.
    nicméně tím, že druhý odstavec ho „jakoby“ vysvětluje spoustu lidí zmátl a očekávali, že se tedy dozví co to ten COW je.
    Což mimochodem není můj případ, jak se gogloid mylně domníval.
    Přesto bych byl rád, aby takovéto články vznikaly.
    To už jsem psal výše. Kdyby se vytáhly obsah i forma do srozumitelné úrovně, rád bych to viděl mezi vydanými články.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    10.2.2013 02:13 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    „Zřejme jsi si spletl vlákno.„

    Nespletl, cituji:

    „Ale to už jsem řešil v jiné diskuzi, že mnozí mají stále ještě náhled na OOP pokažený implementačními detaily C++. Obecný popis toho, co chceme dělat, by neměl vyžadovat přepnutí mozku na C++ mód“

    pavlix avatar 10.2.2013 02:36 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    To není kritika C++.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    12.2.2013 18:29 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Mě hlavně fascinuje, jak všichni hledají to správné OOP.

    Pochopil jsem, že žádný jazyk, který existoval, existuje a bude existovat podle zastánců čistého OOP neobsahuje to správné a dokonale čisté OOP.

    Pochopil jsem už dávno, že mainstreamově prezentovaná touha po správném OOP je chiméra, něco jako sektářská víra.

    Jo a k Vaší větě: Napsat pod článek věnující se primárně C++, že by se popis prolému neměl vyžadovat OOP v přepnutí na C++ mód je – vysvětlitelné pouze aplikací lysohlávek před tím, než jste začal psát. Případně nezvladatelnou nenávistí k C++, kterou už nedokážete potlačit, a zřejmě to dáváte najevo i na koncertech, na zastávkách autobusů, píšete to na sloupy veřejného osvětlení, atd. – tedy v úrovni obsesivně-kompulzivní poruchy.
    12.2.2013 23:29 Sten
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Pochopil jsem, že žádný jazyk, který existoval, existuje a bude existovat podle zastánců čistého OOP neobsahuje to správné a dokonale čisté OOP.
    Smalltalk.
    Pochopil jsem už dávno, že mainstreamově prezentovaná touha po správném OOP je chiméra, něco jako sektářská víra.
    To je samotná touha po čistě OOP jazyce. V praxi velmi rychle zjistíte, že jsou běžné situace, které s OOP jazykem řešíte půl hodiny při odtržení jednorázové definice od jejího použití, zatímco s dobrou podporou funkcionálních jazyků to máte za pět minut a přehledně (třeba řazení podle řetězce xorovaného nějakou hodnotou — funktor vs. lambda).
    pavlix avatar 14.2.2013 19:26 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Mě hlavně fascinuje, jak všichni hledají to správné OOP.
    Mě spíš facinuje, že jsi můj příspěvek sice nepochopil, zato ti to nijak nebrání dělat chytrého.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    8.2.2013 17:45 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným

    Hm, to API mi není moc jasný (nezkoumal jsem dopodrobna), ale na první je celkem zřejmé, že to není ani exception-safe ani thread-safe. Skoro bych možná nevynalézal kolo a podíval se, jak to mají řešeno jinde...
    8.2.2013 19:01 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    *první pohled, samozřejmě...
    gogloid avatar 9.2.2013 12:21 gogloid | skóre: 10 | blog: Tomášovy poznatky | Kladno/Brno
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Vzhledem k tomu, že výjimky ani vlákna zatím nevyužíváme, tak jsme zatím exception-safety ani thread-safety neřešili. API jsme postavili na míru našemu projektu po inspiraci jinými implementacemi (přestože to nemusí být vidět).
    9.2.2013 22:24 Miloslav Ponkrác
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    To, že výjimky nepoužíváte neznamená, že tam výjimka nemusí vzniknout.

    12.2.2013 23:31 Sten
    Rozbalit Rozbalit vše Re: Jak copy-on-write udělalo náš projekt zase použitelným
    Exception-safety je v C++ velmi jednoduché řešit, pokud ji řešíte rovnou od začátku, v naprosté většině případů úplně stačí dodržovat RAII. Přidávat podporu později je noční můra.

    Založit nové vláknoNahoru

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