Názor k článku 602SQL Server: historie velkého produktu vyvinutého v malém týmu od Kiwi - Neviděl jsem sice ten kód, tak nemohu posuzovat....

  • Článek je starý, nové názory již nelze přidávat.
  • 18. 5. 2018 13:39

    Kiwi (neregistrovaný)

    Neviděl jsem sice ten kód, tak nemohu posuzovat. Nicméně - mám pocit, že se u nás postupně sklouzlo k jakémusi flákání a flikování ve stylu "to neřešte, na to je knihovna, to nepište ručně, na to je generátor". Myslím, že to i souvisí s převládajícími názory tady na rootu v diskusích, pokud jde o potřebné vzdělání a schopnosti v IT. Jenže to je v podstatě stejný přístup, k jakému jsme se dostali třeba ve strojírenství - prostě montovny. Hlavně rychle, rychle, kvalitu neřešme, do inovací se nepouštějme... To nemusí být z dlouhodobého hlediska rozumné. Často je opravdu lepší místo použití nějaké univerzální knihovny napsat vlastní podmnožinu toho, co potřebuji, přesně sobě na míru. Ta univerzální řešení nebývají optimální, právě protože jde nutně o kompromisy, už ze své podstaty. Soft inženýrství je právě umění posoudit to a správně se rozhodnout.

    A k věci - pokud jde o parser, tak oba přístupy mají svá pro a proti. Generovaným parserem se dá ušetřit na počátku nějaký čas - hlavně u lidí, kteří napsat parser prostě neumějí. Ručně psané parsery bývají založeny na LL(1), zatímco generované na LR(1). Ručně psaný parser bývá kompaktní, řešený rekurzivně, z hlediska kódu velmi přehledný a umožňující v každém kroku různé "vedlejší" reakce - u kompilátorů shromažďovat informace pro optimalizace generovaného kódu, z uživatelského hlediska ale nejčastěji k vyhození co nejvýstižnějšího chybového hlášení. V tomhle generované parsery prostě kulhají.

    Nechci vyvolávat nějaký flame, ale čistě z mého praktického pohledu - 1) pokud je možné sestavit gramatiku v LL(1) formě, pak bych jí dal přednost před LR(1) - ač restriktivnější, připadá mi taková čistší; 2) pokud mám LL(1) gramatiku, tak bych raději napsal rekurzivní parser "ručně". LR, resp. LALR generátory považuji stále za určitou znouzectnost, instantní polívku oproti poctivému vývaru.