Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I haven't much experience with the Spring XML you refer, so you should take the following feedback with a pinch of salt. </p> <p>As a second and third caveat: </p> <ul> <li>providing a snippet of code will give a <em>flavour</em> of what the language and its semantics are. It is difficult to completely understand some of the choices you have already made (and with good reason), so any feedback here may be completely contradictory or impossible in the light of those choices.</li> <li>language design is as much an art as a science, and so at this stage, any feedback you may get is likely to be quite subjective. </li> </ul> <p>A larger, meta-, question: as a DSL are you trying to do configuration of Spring, or as a more general class of frameworks?</p> <p>There: caveat emptor. Now my subjective and incomplete feedback ;)</p> <ul> <li><p>I'm not sure I understand the reason why you have the <strong><code>@</code> prefix</strong> for <code>scope</code> and <code>destroy-method</code>, but not <code>driverClassName</code>. Also the mix of <strong>both xml-case and camelCase</strong> isn't completely apparent to start with. Is the <code>@</code> prefix a type modifier, or are these keywords in the language?</p></li> <li><p>I'm not completely sure of your intentions about the block header format. You have class name, then a function of that class; is the intention to specify what class your are going to use for a particular function? </p></li> </ul> <p>e.g.</p> <pre><code>sqlMapClient: org.springframework.orm.ibatis.SqlMapClientFactoryBean { # body. } </code></pre> <p>or even:</p> <pre><code>sqlMapClient { @class = org.springframework.orm.ibatis.SqlMapClientFactoryBean; # is there a sensible (perhaps built-in) default if this is missing? } </code></pre> <ul> <li><p>I like the <strong>variable substitution</strong>; I presume the values will come from System properties?</p></li> <li><p>I like being able to specify <strong>string literals</strong> (without escaping), especially for the regular expressions you've shown. However, having multi-character quote or quote modifier seems a little alien. I guess you considered the single-quote (shell and Perl use single-quotes for literal strings). </p></li> <li><p>On the other hand, I think the triple forward slash for <strong>multi-line <code>TEXT</code></strong> is the right approach, but two reminiscent of comments in C-style languages. Python uses a triple <code>"</code> for this purpose. Some shell idioms have a multi-line text convention I would not copy.</p></li> <li><p>I very much like the look of properties and config location, using what looks like a <strong>URI notion of addressing</strong>. If this is a URI, <code>classpath://file.xml</code> may be clearer. I may have the wrong end of the stick here, however.</p></li> <li><p>I also very much like the notion of list and map literals you have, though I'm not sure where: </p> <ul> <li><code>this</code> comes into it (I guess a call to a Java constructor)</li> <li>why some types are capitalized, and others are not. Do I take it that there is a default <code>MAP</code> type, which you can be more specific type if you wish to?</li> <li>is Dilbert an unquoted string literal?</li> </ul></li> </ul> <p>Finally, I'd point you to another configuration DSL, though perhaps more for sysadmin usage: <a href="http://reductivelabs.com/projects/puppet/" rel="nofollow noreferrer">Puppet</a>.</p> <p>Go well.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload