I am not opposed to having a shim to support an API compatible with older 
releases. It's not even particularly difficult:

https://gist.github.com/3950124

I certainly did not anticipate this release causing significant problems 
for application or library developers, and if it did then I apologize.

However, I will stand by the decision to update the API. data.json 0.1.x 
suffered from what I consider, in retrospect, to be poor design decisions. 
Those were decisions I made over two years ago in a hasty effort to please 
too many people who had conflicting goals:


  - Converting field names to keywords by default can create invalid 
keywords.

  - Keywordization is controlled by a bare boolean argument with little 
indication of its function.

  - Inconsistent styles of optional arguments: read-json and write-json 
take booleans as bare arguments, json-str and print-json use keyword-value 
pairs.

  - Parsing a string and parsing from a stream -- two very different 
operations -- are conflated in a single function.

  - Functions are not consistently named: json-str, read-json, write-json

  - Function names repeat the name of the library, rather than using 
namespaces.


It was impossible to solve some of these problems without introducing 
breaking changes.

Looking at the Clojure Library Coding Standards[1], data.json 0.2.0 does a 
better job at "Use good names" and "Unroll optional named arguments." It 
fails at "Java's commitment to not break existing code." In this instance, 
I believe the tradeoff is worthwhile because the new API can be more easily 
extended with additional arguments. This also opened up a place to add new 
features such as customizable conversion functions, the 
most-commonly-requested feature for this library.

Per Rich's directive[2], I cannot yet make a 1.0.0 release. Therefore, 
0.1.3 to 0.2.0 is the largest version bump I can make and the best 
indication I can give of breaking changes. I hope that these improvements 
to the API bring this library closer to a 1.0.0-ready state.

I'm not trying to make anyone's life more difficult, just trying to provide 
useful tools.

-S


[1]: http://dev.clojure.org/display/design/Library+Coding+Standards
[2]: http://dev.clojure.org/display/design/Contrib+1.0.0+Releases


-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to