<div dir="ltr"><div class="gmail_extra"><div><div class="gmail_signature">On Mon, Oct 30, 2017 at 4:16 AM, Sam McCall <span dir="ltr"><<a href="mailto:sammccall@google.com" target="_blank">sammccall@google.com</a>></span> wrote:<br></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="gmail-">On Sun, Oct 29, 2017 at 11:19 PM, Michael Spencer <span dir="ltr"><<a href="mailto:bigcheesegs@gmail.com" target="_blank">bigcheesegs@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div><div class="gmail-m_-6179579667313490458h5"><div><div class="gmail-m_-6179579667313490458m_-5404265045033119415gmail_signature">On Fri, Oct 27, 2017 at 1:53 PM, Sam McCall via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br></div></div></div></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="gmail-m_-6179579667313490458h5"><div dir="ltr"><div>We don't have a dedicated JSON library in the LLVM tree, I'd like to add one. The pressing need is for clangd, but we have other tools that read/write JSON too.</div><div><br></div><div>I'm proposing we write a new one, rather than importing a third-party library (licensing/integration reasons), on or extending YamlParser/YamlIO (usability/flexibility). I lean towards a design that parses a full DOM at once, and provides literal-like syntax for composing documents.</div><div><br></div><div>I've written a document laying out the reasons for taking this path, and my proposal for a design (with links to a prototype)</div><a href="https://docs.google.com/document/d/1OEF9IauWwNuSigZzvvbjc1cVS1uGHRyGTXaoy3DjqM4/edit" target="_blank">https://docs.google.com/docume<wbr>nt/d/1OEF9IauWwNuSigZzvvbjc1cV<wbr>S1uGHRyGTXaoy3DjqM4/edit</a><br><div>(Comments are enabled, but high-level discussion probably belongs on the list instead.)<br></div><div><br></div><div>What do you think? I'm particularly interested in which parts of LLVM produce/consume JSON (or might want to), and what they need. I'm mostly familiar with the stuff in clang-tools-extra.</div><div><br></div><div>Cheers, Sam</div></div>
<br></div></div><span>______________________________<wbr>_________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-dev</a><br>
<br></span></blockquote></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">The technical problems you've listed for YAMLIO aren't fundamental to the design of the library, and wouldn't be too hard to fix (it already has output support).</div></div></blockquote></span><div>Right! Sorry if that was misleading: I meant it can't be used for writing _JSON_ today (whereas reading does work). </div></div></div></div></blockquote><div><br></div><div>Ah, yeah.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="gmail-"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra">However the usability concerns you have are pretty fundamental to the design, as it's designed for strong typing as opposed to exposing a DOM.</div></div></blockquote></span><div>Yeah. The tagged-union format is unfortunate in its requirement for out of order parsing (though it is strongly typed!)</div><div>The protocol is driven by the fact that everyone *else* uses DOM parsers, I think.</div></div></div></div></blockquote><div><br></div><div>Tagged union works with YAMLIO, the MachO YAML interface uses it (see MappingTraits<MachOYAML::LoadCommand>::mapping). By usability I was mainly referring to the verbosity and non-JSONness of YAMLIO.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="gmail-"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_extra">An alternative I would suggest looking at is adding a JSON mode to YamlParser and then adding a YAML compatible DOM API similar to what you've proposed on top of that. I could see this being more complex/less usable than a dedicated JSON parser, but just want to make sure it's weighed against the cost of adding yet another parser.</div></div></blockquote></span><div>Sharing the parser might make sense. On the other hand the JSON grammar is so simple that JSON enforcement in YAMLParser may be more complex than a standalone parser, and would certainly be slower. I'll do some experiments here.</div><div>I'm less convinced about a YAML-compatible DOM: tree vs arbitrary graph is a pretty big difference, to start.</div></div></div></div>
</blockquote></div><br></div><div class="gmail_extra">Thanks for looking into this.</div><div class="gmail_extra"><br></div><div class="gmail_extra">- Michael Spencer<br></div></div>