Looking at SerAPI, I'm wondering about the choice of "sexp".  I know it
may sound odd to want something else than sexps when working in Elisp,
but in reality sexps only work well if they use *exactly* the same
syntax.  E.g. in https://github.com/ejgallego/coq-serapi I see:

    (Query ((sid 3) (pp ((pp_format PpStr)))) Goals)
      > (Answer 3 Ack)
      > (Answer 3 (ObjList ((CoqString
      >   "\
      >    \n  n : nat\
      >    \n============================\
      >    \nn + 0 = n"))))
      > (Answer 3 Completed)

which seems to show that the strings don't use the same escape syntax as
Elisp.  This little detail will likely end up forcing the Elisp side to
either re-implement a sexp-reader by hand (in Elisp, which will be
slowish), or require ugly hacks to try and pre-process the answer before
passing it to the sexp reader (or post-process the sexp), which will
likely always end up flaky.

Same thing when it comes to turning Elisp sexps into the print
representation of SerAPI sexps, of course.

This said, I don't see any hand parsing or pre/post processing tricks
when reading SerAPI's sexps: I only see the prin1-to-sexp hack which
works around the nil-vs-() difference.  So maybe the syntax is closer to
that of Elisp than shown in the README.md.

Otherwise I see 2 convenient options: tweak the sexp syntax so it is
a 100% subset of that of Elisp or use some other widespread standard
such as XML or JSON (modern Emacsen can link to efficient parsers of
those two).  The first option is of course more convenient for Emacs,
but I understand that the second is more convenient for all the
non-Emacs clients and it's not that bad for Emacs.


        Stefan
_______________________________________________
ProofGeneral-devel mailing list
ProofGeneral-devel@inf.ed.ac.uk
http://lists.inf.ed.ac.uk/mailman/listinfo/proofgeneral-devel

Reply via email to