Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Když diskuse,
tak s Lopuchem

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub C, C++ [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.
Archiv

Články

Jak bezpečně ukončit vlákno z DllMain
FastAllocPool - urychlení častých alokací a dealokací
Akce a zpráva jako objekt
Tuply v C++
Efektivní alokátor malých objektů a tady druhý a třetí díl
Šablony: Být vládce kvalifikátorů
Vracíme z funkce objekty
Základy komunikace mezi procesy (ve Windows)
Multiple Interface a Instance Factory
Multithreading v C++ (ve Win32)
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: asktlkv
[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
huh huh 25.10.2007 16:11  681
Bredy [680]: Tady jde asi o nejake nedorozumeni. STL je jenom jedna a je dana standardem C++ (resp. implementaci je samozrejme vice [byt zatim vsechny, co jsem videl vychazeji z puvodni HP verze] ale musi odpovidat standardu).
bredy 23.10.2007 23:57  680
huhPokud je to navržený jinak, pak se tomu nemůže říkat STL. Bude mi program napsaný ve Stepanove STL fungovat stejne i pod MS STL? A pod GCC s STL?
huh huh 23.10.2007 22:29  679
Ale viděl jsi STL (tedy myslím tu část standardní knihovny navrženou právě S. & spol; což třeba proudy nebo řetězce už nejsou). A to je příklad knihovny navržené podle Stepanovových principů.
bredy 23.10.2007 19:34  678
huhTo si v žádném případě nemyslím. I když o Tvých návrzích nic nevím, resp. žádnou jsem neviděl.
huh huh 23.10.2007 15:21  677
Bredy [674]: Chápu, protože vyznávám jiné principy návrhu knihoven, jsem pro tebe úchylák.
huh huh 23.10.2007 15:17  676
Bredy [673]: "Vkládal jsi mi do úst, že když nepoužívám STL, neprogramuji genericky." nikdy jsem nic takovyho nedelal. pokud si me tak pochopil, tak je mi to lito, ale nemam dojem, ze bych neco takovyho byt jenom naznacoval. pouze tvrdim, ze STL je dobry priklad jednoho pristupu generickeho programovani. that's all
bredy 22.10.2007 22:31  675
Ale pravda je taková, že šablony jsou nástrojem generického programování. Umožňuje to skutečně navrhovat algoritmy nezávislé na datových typech. To je generické programování. A co víc, můžeš genericky programovat generické typy, můžeš pracovat v generickém OOP, kde existuji pojmy jako dědičnost generického typu nebo instance generického typu. Generická třída a podobně. Můžeš používat techniky pravého OOP, kde můžeš používat objekty generických tříd bez nutnosti mít nějaké rozhraní, kde pro použití instance generické třídy stačí pouze syntaxtická správnost (něco jako ve smalltalku). To je třeba důvod, proč lze udělat foreach na iterátor, ať už je to vektor, nebo strom, nebo fronta, nebo jiný kontejner.

STL je jen jakýsi demo generického programování. Ano, i o demu se dají napsat celé knihy. Ale ta pravá síla generiky se nachází právě za plotem, až se člověk odprostí od STL.

STL má spoustu problémů. Jeden za všechny, například kontejnery nemohou používat auto_ptr (to bych vraždil!) Valná většina implementací není threadsafe (a co je horší, nejsou instančně nezávislé, takže přestože pracuji s dvěma instancemi nějakého objektu z stl ve dvou threadech, tak přesto dochází ve vláknech k problémům). Streamy jsou naprosto nepoužitelné. Je to směs chaosu bez ladu a skladu. Nemá to žádnou strukturu. Zkus někdy naimplementovat vlastní stream, jako třeba v javě když podědíš OutputStream. Až mi to někdo ukáže, že to jde nějak jednoduše, začnu věřit, že stl je trochu užitečné.

A ještě ty iterátory. Jsou často těžkopádné, například pro stromy, hashe, a další. Mnohem častěji používám index + foreach a funktory. Co iterátor řeší komplikovaně (uložení stavu iterátoru, synchronizace iterátorů), to foreach + funktor řeší levou zadní. A lepší výsledky dává i překladač.
bredy 22.10.2007 22:19  674
Bohužel termín "generické programování" je v dnešní době poněkud zamlžen, zejména se smíchal s parametrizací typy (tj. šablonami). Proto budu raději používat "generické programování dle A. S.", tj. tak ja ho definuje A. Stepanov. A "generické programování dle A. S." == STL. A to je to, co já vyznávám.

Tohle je naprostá blbost. Lehká interpretace zní: Protože neumím genericky programovat, raději používám STL dle A.S., což mi zaručuje (jakýsi certifikat), že genericky programuji.

Jenomže generické programování v původním slova smyslu nemá s šablonama nic společného (resp. je jenom používá pro implementaci), je to způsob návrhu programu založený na maximální možné abstrakci algoritmů, do značné míry antagonický k objektové analýze a návrhu. Z toho plyne tvůj pocit, že je STL špatně navrženo. Ve skutečnosti je STL výborně navržená věc, ale vycházející z principů, které tobě zjevně nevyhovují (to je v pořádku, mě zase nevyhovuje třeba funkcionální programování).
Lehká interpretace: Říkáš, že se pletu, že tomu vlastně nerozumím, protože si myslím, že generické programování jsou templaty. A vyzdvyhuješ STL, kterému taky vlastně nerozumíš, ale jakýsi mesiáš A.S. ti řekl, ře to je generické programování. Následně templaty přirovnáš k funkcionálnímu programování. he?...
bredy 22.10.2007 22:11  673
huhTo si dělej co chceš. Já se jen ohradil proti slově generický. Vkládal jsi mi do úst, že když nepoužívám STL, neprogramuji genericky. Což není pravda a tomuto nařčení se bráním.

Když se někdo vzhlídne v jednom vzoru, je to jeho věc. Ale měl by si uvědomit, že zeměkoule nekončí plotem kolem výběhu.
huh huh 22.10.2007 17:30  672

Bredy [670]:
Ale "Základní myšlenkou, která se skrývá za pojmem generické
programování, je rozdělení kódu programu na algoritmus a datové typy
takovým způsobem, aby bylo možné zápis kódu algoritmu chápat jako
obecný, bez ohledu nad jakými datovými typy pracuje. Konkrétní kód
algoritmu se z něj stává dosazením datového typu." se naprosto vztahuje i na programovani dle S. Termin genericky se v souvislosti s
prog. dle S. pouziva naprosto bezne, ale klidne se mu v tomto foru
vyhnu.
bredy 22.10.2007 15:47  670
huh: Aha, tak tomu prosím neříkej "generický" a nehádej se o tenhle termín. Já programování dle Stepanova nemusím, tím se ale nepovažuji za méněceného.



Základní myšlenkou, která se skrývá za pojmem generické programování, je rozdělení kódu programu na algoritmus a datové typy takovým způsobem, aby bylo možné zápis kódu algoritmu chápat jako obecný, bez ohledu nad jakými datovými typy pracuje. Konkrétní kód algoritmu se z něj stává dosazením datového typu.

U kompilovaných jazyků dochází k rozvinutí kódu v době překladu. Typickým příkladem jazyka, který podporuje tuto formu generického programování je jazyk C++. Mechanismem, který zde generické programování umožňuje, jsou takzvané šablony (templates).

huh huh 22.10.2007 14:18  669
Bredy [667]: Ale no ták, snad nemusím bejt tak polopatickej. Já fakt už nevím, jak ti vysvětlit, že pod tím termínem chápu něco úplně jiného než ty. Ale klidně to slovo "generický" vynechám a budu tomu říkat jenom "programování dle Stepanova". A STL je vynikající příklad realizace knihovny podle tohoto přístupu. A ne Bredy [668] s tím nic společného nemá, to je standardní objektový návrh realizovaný pomocí šablon (chceš-li, tedy generický).
bredy 22.10.2007 13:49  668
Mimochodem, tohle (Možnosti generického pole) těžko uděláš v STL. Přesto myslíš si, že to nepatří mezi generické programování

(A co pak třeba takový generický funktor, genericky pointer nebo tuples, he?)
bredy 22.10.2007 13:15  667
huhAle houby STL je zkratka Standard Template Library. "Standardni knihovna šablon". To ti zase nějaký matla narval nějaké bláboly do hlavy. Nesmíš poslouchat kdejakého ňoumu, i když má známé jméno.

STL je význačná zejména tím, že je jaksi standarizovaná. Ovšem, jestli to byl dobrý počin si nejsem jistej. Na světě existuje spousty jiných knihoven, které by měly ambice nahradit STL. Zkus třeba Boost
huh huh 22.10.2007 10:08  666
Bredy [665]: Bohužel termín "generické programování" je v dnešní době poněkud zamlžen, zejména se smíchal s parametrizací typy (tj. šablonami). Proto budu raději používat "generické programování dle A. S.", tj. tak ja ho definuje A. Stepanov. A "generické programování dle A. S." == STL. A to je to, co já vyznávám.

[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt