Hello there.
I was working on implementing a specification compliant edn reader on Rust, and I found that clojure.edn/read itself isn't specification compliant. I have three examples below that should all throw exceptions, but instead they are valid values according to clojure.edn/read. The quotes were taken verbatim from the text of the specification[0]. --8<---------------cut here---------------start------------->8--- ;; "Per the symbol rules above, :/ and :/anything are not legal keywords." [(edn/read-string ":/") ;; "It can be used once only in the middle of a symbol to separate the _prefix_ (often a namespace) from the _name _" (name (edn/read-string "a/b/c")) ;; specification doesn't talk about namespaced maps (edn/read-string "#:a{:k 1}")] [:/ "b/c" #:a{:k 1}] --8<---------------cut here---------------end--------------->8--- I couldn't find many references to these issues, other than a Jira ticket[1] and a thread on clojure-dev[2]. Both talk about clojure.edn/read being consistent with LispReader, though. I have no opinions on that. Since the clojure.edn/read is an edn reader, shouldn't it comply with the edn specification? Maybe not the namespaced maps parts, which the specification itself could be extended to cover. But the other two cases are explicitly forbidden on the specification, and clojure.edn/read allows them. I'm willing to write a patch to fix those, but is it something that would be welcome? One could consider it a breaking change since the reader will stop accepting data that is now does, but I could also argue that this is a bug on the reader that was fixed, and the behaviour was changed to match the expected behaviour, which is the specification. The specification itself could change to match the behaviour of the reader, but this is not desirable since it would invalidate the work that others have done to implement edn outside of Clojure. The tension between breaking the reader and matching the specification should, IMHO, be favoured towards the matching the specification. Otherwise, the actual specification isn't what edn-format.org says, but it would instead be "whatever clojure.edn/read does", which is worse. The value proposition of having an specification to begin with is lost. WDYT? Is there any other resource on this that I missed? [0]: https://raw.githubusercontent.com/edn-format/edn/a51127aecd318096667ae0dafa25353ecb07c9c3/README.md [1]: https://clojure.atlassian.net/browse/CLJ-1530 [2]: https://groups.google.com/g/clojure-dev/c/b09WvRR90Zc/discussion -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/87h7qxdr5y.fsf%40euandre.org.