Vlákno názorů k článku Domain-Specific Language: programování pro každého od anonym - Ruzny jazyky me zajimaji, aspon pro prehled jsem...

  • Článek je starý, nové názory již nelze přidávat.
  • 27. 11. 2007 8:33

    anonymní
    Ruzny jazyky me zajimaji, aspon pro prehled jsem jich opravdu par procet, vcetne takovych jako Tcl, Lisp/Scheme, PostScript. Ruby jsem jeste nezkousel a netusim, jestli jsem uz videl nejaky jiny DSL nez tady.

    Mozna je clanek opravdu jenom ne-dobre napsanej, protoze mi pripada, ze DSL jsou jenom pseudojazyky s konkretnim zamerenim - Ruby on Rails pro web, Rake pro automatizovanou praci s balikama. Celkove to ale na me pusobi, jako kdyz pomoci low-level jazyka vytvorim parser pro nejakej specificky zamerenej high-level jazyk pro konkretni aplikaci. Neco jako kdyz v assembleru napisu prekladac C nebo pomoci C interpret Perlu. Chapu to spravne?

    Chapu teda spravne, ze napr. muzu navrhnout svuj vlastni DSL treba na parsovani HTML stranek s vystupem na tiskarnu nebo do souboru a pomoci Perlu napsat interpret?
  • 27. 11. 2007 9:05

    Michaelson (neregistrovaný)
    Skutocna pointa DSL je, ze namiesto toho, aby ste ohybali hlavu a prisposobovali sa jazyku, tak si prisposobujete jazyk pre seba, resp. pre problem ktory konkretne riesite.

    V jednoduchosti povedane (nekamenujte, viem ze to nieje vedecke a presne:): Ide o filozofiu vyvoja softveru, pri ktorom postupujete odspodu hore, a to tak, ze ako postupne chapete lepsie a lepsie dany konkretny (specificky) problem, tak si pre tento specificky problem vytvarate Domain Specific Language, a to taky, aby sa vam co najlepsie v tomto jazyku dany problem podarilo vyriesit. Toto vedie (ked sa to vie) k tvorbe efektivnych (aj co sa tyka vypoctovej, resp. algoritmickej efektovnosti) a "maloriadkovych" programov, lahko modifikovatelnych a skalovatelnych...

    Samozrejme to ma aj nevyhody... (aj ked podla mna nie podstatne;)
    Medzi relativne casto spominane nevyhody patri napriklad to, ze sa niekto, kto pride po Vas na dany projekt, musi ucit Vami vymysleny DSL a pochopit ho, ako aj kod v nom napisany... toto je vsak podla mna trochu "nefer" vycitka. Pretoze ktokolvek kto pride po Vas na dany projekt, tak bude musiet pochopit Vami vytvoreny kod, nech uz je napisany v assembleri alebo v Lispe. A pokial DSL navrhnete naozaj dobre, tak zaucenie sa noveho programatora do projektu podla mna paradoxne urychli, aj ked bude musiet pochopit Vas DSL... dovod: menej kodu, vystiznejsie a priamociarejsie vystihnute "gro" problemu/programu/algoritmu...

    Ak to niekoho zaujima (a neodradil ho tento nie moc podareny clanok), tak nech trosku pogoogli... ja som uz na prvych odkazoch nasiel omnoho zaujimavejsie clanky o tejto oblasti (ang. jazyk samozrejme nutnost). Tiez doporucujem vyhladat terminy ako "glass barriers in languages" a podobne... velmi zaujimave citanie pre kohokolvek, kto sa aspon okrajovo zaujima o computer language science (podobne ako ja;)...
  • 27. 11. 2007 9:57

    anonymní
    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.
  • 27. 11. 2007 10:21

    Michaelson (neregistrovaný)
    Z wikipedie:

    "A domain-specific programming language (domain-specific language, DSL) is a programming language designed for, and intended to be useful for, a specific kind of task. This is in contrast to a general-purpose programming language, such as C or general-purpose modeling languages like UML."

    Zial musim teraz prec, takze Vam nemozem napisat podrobnejsiu odpoved... ale nechapete to vobec dobre (mozno mojou vinou...)
  • 27. 11. 2007 13:17

    petr_p (neregistrovaný)
    Wikipedie pokračuje těmito příklady:
    Examples of DSLs include spreadsheet macros, YACC grammars for creating parsers, regular expressions, Generic Eclipse Modeling System for creating diagramming languages, Csound, a language used to create audio files, and GraphViz, a language used to define and create visual representations for directed graphs.
    Podstatné je, že vyšší jazyk (DSL) řeší jen jednu věc a ostatní funkcionalitu z nižšího jazyka ztrácí. Je to daň za lepší srozumitelnost a kratší zápis. Já bych DSL definoval jako jednoúčelový jazyk:
    DSLs focus on doing one kind of task well. For instance, GraphViz is designed to create images of graphs in a variety of formats, but GraphViz lacks the capability to perform some basic tasks, e.g., accessing a network socket, receiving additional user input, or manipulating strings.
    Po pravdě řečeno, úvod na Wikipedii (do obsahu) mi přijde mnohem srozumitelnější než tento článek na Rootu.
  • 27. 11. 2007 16:49

    Michaelson (neregistrovaný)
    Po pravdě řečeno, úvod na Wikipedii (do obsahu) mi přijde mnohem srozumitelnější než tento článek na Rootu.

    Uplne s Vami suhlasim... preto som aj napisal svoj prvy prispevok... je to celkom skoda, o takejto teme sa dal napisat omnoho lepsi clanok...
  • 28. 11. 2007 11:58

    delphym (neregistrovaný)
    "..... Já bych DSL definoval jako jednoúčelový jazyk:"

    Mno, vsak taky jo. Nechapu co tady vsichni porad resi.
    Myslim si, ze anglicky nazev DOMAIN SPECIFIC.... jasne rika, ze se jedna o jazyk na specificky problem/ucel/oblast ci ja nevim ja keste by se to dalo prelozit.

    zkratka mi cely ten clanek a diskuse k nemu prijde jako noseni drivi do lesa.
    mejte se.
  • 4. 12. 2007 19:49

    bez přezdívky
    Hm, budu vsetci okolo toho DSL tancovat, aky je uzasny, resp, aky je naprd? Alebo uz niekto KONECNE povie aku to ma syntax, kde zozeniem prekladac, ako nakodim Hello world?? Je to vobec pre programatorov, alebo sa o tom len tak rozprava? Fakt nemam najmensiu sajnu z tohto clanku ani z prispevkov :-(