[ANN] Orsetto: structured data interchange languages (preview)



I’m nearing completion of the ~preview.1 release to OPAM of Orsetto, my toolkit for structured data interchange. Here’s a brief summary of things left to do before I can commit to collaborating with the community and to engaging with feedback.

  • Build pipeline for continuous integration on Bitbucket.Org.
  • Generate documentation with odoc using the Conjury build system.
  • Consolidate Cf_seq as extension of the Stdlib.Seq module.
  • Minor last-minute improvements (e.g. leap second database, et cetera).
  • Removal of some experimental modules (e.g. Cf_dyn and Cf_psys).

Not sure when I’ll have done this, but I’m hoping by the end of the month. I’m writing this now because I feel like I’ve gotten to the point where there isn’t any major new logic that needs to be done before an initial preview can be posted. Anybody interested in my work who wants to comment before I post a preview to OPAM is invited to check out the sources at Bitbucket (linked above) and file issues.

p.s. I would have just added this as an update to the previous topic I filed about it, but Discourse is now refusing to let me reply more than three times to myself.


Pushing back my initial release. I’ve decided on doing some refinements of the JSON library to provide better performance characteristics and unify on an architectural convention already present in the CBOR library.

  1. I’m going to define a Json_event module that contains basic encoding and decoding of the JSON grammar terminals. The Json_scan module will be refactored as parser combinators that work on streams of JSON events rather than Unicode characters. A similar refactoring may or may not be warranted with the Json_emit module (I haven’t thought about it yet).

  2. I’m also going to try to provide a higher-level interface for decomposing JSON objects directly into native data structures. I believe there is a functional core that is widely applicable and can be used with both JSON objects and CBOR maps (as well as similar associative key/value structures in other interchange languages).

I expect to have some time over the winter break to make some progress. I’ll post detailed Issue reports to the Bitbucket page, and I’ll make occasional updates here.