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.

Reply via email to