Jo, takze jsem to pochopil relativne presne. Priklad s assemblerem, Ceckem a Perl byl spis prehnanej, ale je to taky urcity zpusob predvedeni DSL, napr. misto psani nekolika instrukci v assembleru mam jednu funkci printf nebo jeden prikaz for, dale pak misto psani nejaky slozity konstrukce v Cecku (nepocitam nejaky knihovny) mam v Perlu operator "=~" pro regularni vyrazy. A pod "specifickym probleme", ke kterymu potrebuju tyhle DSL jazyky (PERL a C), si muzu predstavit problem "programovani". Pak muzu nad Perlem udelat dalsi DSL, kde budu psat jednoduche prikazy ve stylu SED nebo AWK a to pak predhodim Perlu - ten to zpracuje a bude provadet vlastnimi silami (funkcemi a operatory) cinnost zadanou pomoci meho DSL. Cely PERL ale bude taky jenom DSL nad jazykem C, ktery bude provadet nizsi operace podle zadanych PERL prikazu. No a jazyk C bude zase jenom DSL nad assemblerem a assembler bude provadet zadany C prikazy pomoci strojoveho kodu.
Podle tehle definice jsou DSL jazyky vsechny ty mozne sablonovaci systemy nad PHP a Perlem a Ceckem. Jinak zapis XML by se mi libil asi vic, protoze ten uz ma clovek vetsinou zazity a navic, pokud by byl pro vice projektu, tak se ho clovek uci pouze jednou a pak uz jenom seznam funkci a parametry, ktery by se musel ucit vzdy. Kdezto kdyz kazdy bude delat vlastni DSL, tak se ucit kazdy ruzny DSL s ruznymi vlastnostmi bude docela peklo, ikdyz budou treba dobre navrzene.
Ono, kdyz se to tak vezme, tak prakticky dobre navrzeny API je taky DSL. Ted jsem snad pochopil rozdil v tom priklade API a DSL na zacatku clanku. Je to sice hezkej priklad, nicmene spis chapu ten zapis v API, nez v DSL a to ani neni receno v jakem jazyku je to API zapsane. Kdezto k tomu DSL bych potreboval nejaky manual, abych pochopil, co to vlastne udela. Jinak zapis na jeden radek je pouze veci jazyka, pripadne navrhu trid, napr. v perlu muzu napsat
Coffee::new('size'='Venti', 'fat'=>NON_FAT ....);
a budu to mit stejne jako v DSL na jeden radek a taky prehledne.

