Was haltet ihr von Domain-Specific-Languages



  • Das Thema kommt ja doch immer mal vor.

    Ein nettes Beispiel in c++ wäre Testsoon, welches

    TEST_GROUP(foo) { 
        TEST(bar) { 
            Equals(1,1) 
        } 
    }
    

    möglich macht.

    Andere Beispiele sind die teilweise recht intressanten xml/xhtml Generatoren, die einige Sprachen zur Verfügung stellen



  • DSLs sind goil 🙂
    Wenn sich einer die Mühe gemacht hat und die Sprachen schon für mich erstellt hat, gebe ich mir große Mühe immer diese zu benutzen.
    Selber schreiben ist zwar manchmal ganz lehrreich, aber sicher nicht so produktiv.
    Ein Topbeispiel ist da sicherlich Rubyonrails, "act_as_taggable", "act_as_tree" usw... sind schon echt klasse.
    Besonders bei Javascript finde ich DSLs für einen sehr vielversprechenden Ansatz um wenigstens die Ansätze von MVC auch in stark AJAX-lastigen Anwendungn zu realisieren. Z.b. wie hier.

    Und ja, Testsoon ist auch cool 🕶



  • DSLs sind ... naja.

    Vorteile gibt es einige, ja. Nachteile: wieder eine neue Syntax in die man sich einlernen muss, und wenn die DSL in C++ abgebildet wird wieder 1000e verschiebene Fallstricke und "Eigenartigkeiten" die man kennen und umgehen muss.

    Ein Beispiel aus der hier verlinkten Seite welches ich z.B. zum Kotzen finde:

    show("us-state-field").when("country").is("United States");
    

    OMG.
    OMFG.



  • r0nny, das beispiel hinkt gewaltig. zumindest die syntax, was ja ne DSL ausmacht.

    DSLs sollen spezielle sachverhalte einfach ausdruecken und die uebersetzung dem computer ueberlassen.
    was man davon halten soll?
    bloede frage, natuerlich. DSLs sind wichtig und erleichtern schwere aufgaben ungemein.

    kein im kopf gesunder mensch wuerde z.b. ein textverarbeitungsprogramm wie ms word in assembly nachbauen wollen. man wuerde eher eine sprache entwerfen, die fuer texteditoren gut passt.

    abstraktion ist das zauberwort. wer nur ein kapitel SICP gelesen hat wirds wissen.

    hustbaer: c++ ist pferdeapfel. mach du mir DSLs nicht schlecht, nur weil c++ schlecht ist. das js beispiel aus dem "hier"-link ist doch garnicht so schlecht. versuchs doch besser zu machen :> oder finde zumindest bessre syntax-moeglichkeiten innerhalb von javascript.

    die hostsprache ist entscheidend. deswegen ist lisp nicht tot.



  • c.rackwitz schrieb:

    r0nny, das beispiel hinkt gewaltig. zumindest die syntax, was ja ne DSL ausmacht.

    wiso hinkt es ? normalerweise gibt es TEST_GROUP(foo) sowie TEST(bar) nicht



  • sieht nach reduzierten funktionen oder macros aus. fuer testcode wuerde ich zumindest irgendeine andere syntax nehmen, falls das geht... mir ist klar, dass das mit c/c++/cpp machbar sein soll.

    meinetwegen sowas (nicht mehr c/c++/cpp):

    group foo
        test bar
            sum(1, 2, 3, 4) == 10
            product(1, 2, 3, 4) == 24
    


  • DSLs sind sehr wichtig, um sich beim Programmieren nicht mit der Programmiersprache ein Bein zu stellen. Aber im Grunde können die wenigsten Programmiersprachen vernünftig DSLs. Daher greift man auf Code-Generatoren zurück, was ich aber für keine gute Idee halte, da Code-Generatoren am Ende in der Regel unwartbaren und ineffizienten Code generieren. Lieber eine Programmiersprache, die DSLs gut beherrscht, so wie Scheme oder Common Lisp.



  • Oder eine, die sie überhaupt beherrscht, so wie C++.



  • Mr. N schrieb:

    Oder eine, die sie überhaupt beherrscht, so wie C++.

    was soll denn das heissen? zu was soll denn c++ eine alternative darstellen?



  • Mr. N schrieb:

    Oder eine, die sie überhaupt beherrscht, so wie C++.

    DSLs sind C++ sind ja eher undurchsichtige Hacks mit Template- oder gar Präprozessor-Metaprogrammierung.



  • DSLs find ich schon gut, wenn sie eindeutig unterschiedlich sind.

    Ich mache immer wieder schlechte Erfahrungen wenn ich bitte keinen Flamewar! Java programmieren muss, weil das halt fast wie C++ funktioniert an einigen Stellen, dann aber unerwartet Unterschiede auftreten.

    => DSLs gerne aber bitte nicht mit annäherndder C(++), Pascal, ... Syntax und bitte nicht untereinander die gleiche Syntax.

    Ganz schlecht finde ich auch die C++ Makro / Template DSLs, das Programm frisst weiter C++-Code, sobald einem mal eine funktion der DSL nicht bekannt ist baut man sich selber was mit C++ und das ist ja nicht der Sinn der Sache



  • ich finde dsl's die auf der sprachsyntax basieren toll - bei dynamischen sprachen ist das ein sehr mächtiges werkzeug



  • ok war von mir vll etwas unklar formuliert.

    so sachen wie das for(;;) und die {} zu übernehmen ist kein Problem, weil nicht sehr umfangreich. Das ganze wird zum Problem wenn die std-Biblioteken ähnlich sind in der Verwendung



  • Habe etwas, was ein wenig Ontopic ist.

    In der Boost-Sandbox liegt eine Library ähnlich Boost.Spirit, mit der sich jedoch eigene DSLs erzeugen lassen. Boost.Proto schimpft sich das ganze.

    Das ganze ist wie gesagt in der Sandbox, also nicht mal zu einem Review frei gegeben. Aber trotzdem vielleicht interessant, für die DSL-Fans die C++ programmieren? (ich kann pers. mit DSL nichts anfangen)

    Docu:
    http://boost-sandbox.sourceforge.net/libs/proto/doc/html/index.html

    Ein Beispiel:
    http://boost-sandbox.sourceforge.net/libs/proto/doc/html/boost_proto/user_s_guide/calculator.html


Log in to reply