not only does clojure.edn accept invalid input, but the clojure reader also accepts invalid input for the same reason (prioritizing speed of implementation over validation)
user=> (name 'a/b/c) "b/c" On Sat, Oct 17, 2020 at 5:14 PM William la Forge <laforg...@gmail.com> wrote: > > My understanding is that run-time validation is often left weak in preference > to speed of execution. In contrast to validation by the "compiler". Thus > clojure throws many more exceptions than does the edn reader. --Bill la Forge > > On Friday, October 16, 2020 at 9:07:40 PM UTC-4 EuAndreh wrote: >> >> >> 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/1a9c0924-0b94-4094-8fa0-c8cd8f9bc667n%40googlegroups.com. -- 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/CAGokn9JNhUhR2_k_av606J5JWeu0vC%3DbrZPAoFuJygkzyc-z%2BQ%40mail.gmail.com.