I am aware my choice of challenge may be considered abuse. I did it as the grammar is big enough to allow me to (a) get to know the library (b) check how it handles larger inputs, as I've had problems with other libs in the past.
As much as I like the UX, I'd be worried to add specs to my functions if I am not confident that I understand how the performance is affected (esp., related to the spec structure). Some info on that in the wiki would be great (but if I get to vote, I'd pick the clojurescript port first). On Sunday, May 29, 2016 at 12:11:25 AM UTC+2, Rich Hickey wrote: > > spec is not for text parsing - there are plenty of more suitable tools for > that. It is not a general-purpose regex tool either. > > > > On May 28, 2016, at 5:46 PM, Georgi Danov <georgi...@gmail.com > <javascript:>> wrote: > > > > I love the regexp approach, so decided to implement JSON parser in order > to get acquainted with spec. The parser treats the input as char sequence. > > > > The parser works, code is very readable, however performance is horrible > — json file with 3.5k characters takes 350 seconds to process — 10 > terms/sec. > > > > Here is the spec > https://gist.github.com/gdanov/3a0440255f7f4df262ce16ce87351a04 > > > > On Monday, May 23, 2016 at 4:12:29 PM UTC+2, Rich Hickey wrote: > > Introducing clojure.spec > > > > I'm happy to introduce today clojure.spec, a new core library and > support for data and function specifications in Clojure. > > > > Better communication > > > > Clojure is a dynamic language, and thus far we have relied on > documentation or external libraries to explain the use and behavior of > functions and libraries. But documentation is difficult to produce, is > frequently not maintained, cannot be automatically checked and varies > greatly in quality. Specs are expressive and precise. Including spec in > Clojure creates a lingua franca with which we can state how our programs > work and how to use them. > > > > More leverage and power > > > > A key advantage of specifications over documentation is the leverage > they provide. In particular, specs can be utilized by programs in ways that > docs cannot. Defining specs takes effort, and spec aims to maximize the > return you get from making that effort. spec gives you tools for leveraging > specs in documentation, validation, error reporting, destructuring, > instrumentation, test-data generation and generative testing. > > > > Improved developer experience > > > > Error messages from macros are a perennial challenge for new (and > experienced) users of Clojure. specs can be used to conform data in macros > instead of using a custom parser. And Clojure's macro expansion will > automatically use specs, when present, to explain errors to users. This > should result in a greatly improved experience for users when errors occur. > > > > More robust software > > > > Clojure has always been about simplifying the development of robust > software. In all languages, dynamic or not, tests are essential to quality > - too many critical properties are not captured by common type systems. > spec has been designed from the ground up to directly support generative > testing via test.check https://github.com/clojure/test.check. When you > use spec you get generative tests for free. > > > > Taken together, I think the features of spec demonstrate the ongoing > advantages of a powerful dynamic language like Clojure for building robust > software - superior expressivity, instrumentation-enhanced REPL-driven > development, sophisticated testing and more flexible systems. I encourage > you to read the spec rationale and overview http://clojure.org/about/spec. > Look for spec's inclusion in the next alpha release of Clojure, within a > day or so. > > > > Note that spec is still alpha, and some details are likely to change. > Feedback welcome. > > > > I hope you find spec useful and powerful! > > > > Rich > > > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to clo...@googlegroups.com > <javascript:> > > Note that posts from new members are moderated - please be patient with > your first post. > > To unsubscribe from this group, send email to > > clojure+u...@googlegroups.com <javascript:> > > 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+u...@googlegroups.com <javascript:>. > > For more options, visit https://groups.google.com/d/optout. > > -- 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. For more options, visit https://groups.google.com/d/optout.