<div class="gmail_quote">On Tue, Jun 12, 2012 at 8:12 PM, Eli Bendersky <span dir="ltr"><<a href="mailto:eliben@gmail.com" target="_blank">eliben@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">On Tue, Jun 12, 2012 at 12:43 PM, Chandler Carruth <<a href="mailto:chandlerc@gmail.com">chandlerc@gmail.com</a>> wrote:<br>
> Greetings all!<br>
><br>
> What follows is a fairly lengthy and detailed design document for a proposed<br>
> persistent Clang server (or clangd in unix-terms) to serve as infrastructure<br>
> for increasingly advanced and interactive C++ tools. It should generalize<br>
> and build upon libclang, and will allow us to effectively target Vim, Emacs,<br>
> and other editors. This is something we're planning to pursue in the near<br>
> term, so I'd appreciate any and all feedback.<br>
><br>
> Here is a Google Docs link you can use to view and comment on the proposal:<br>
> <a href="https://docs.google.com/document/d/1kNv2jJK0I0JGnxJxU6w5lUOlrIBoecU4fi9d_o5e2-c/edit" target="_blank">https://docs.google.com/document/d/1kNv2jJK0I0JGnxJxU6w5lUOlrIBoecU4fi9d_o5e2-c/edit</a><br>
><br>
> Its interim home is on github here, where you can see the history and the<br>
> actual rest version in all its glory:<br>
> <a href="https://github.com/chandlerc/llvm-designs/blob/master/ClangService.rst" target="_blank">https://github.com/chandlerc/llvm-designs/blob/master/ClangService.rst</a><br>
><br>
> I've also attached the text for email-based comments.<br>
<br>
</div></div>Great proposal, I really like the potential of such a project - it's<br>
exactly the kind of service that can start with one thing in mind and<br>
then find itself adapted for various interesting uses. That said, your<br>
initial proposed application is awesome and itself worth the effort -<br>
having real IDE-ish code completion and indexing in Vim & Emacs could<br>
be awesome.<br>
<br>
Some minor comments on the design document:<br>
<br>
* Goal: "Provide a restartable, long-lived background process which<br>
manages caching, compilation, indexes, and performs the business<br>
logic."<br>
<br>
What does "compilation" mean in this context? From the rest of the<br>
document I understand Clang is only used for its analysis features,<br>
not for actual code generation or full compilation.<br>
<br>
* "The crazy stretch goal for this is O(1ms) for code-completion with<br>
fully warm and primed caches."<br>
<br>
It really sounds overly ambitious, taking IPC and a fairly complex<br>
code-base into account. Why 1ms, though? Since this is user<br>
interaction application, isn't 1ms far, far below the human detection<br>
threshold?<br></blockquote><div><br></div><div>Well, people argue about what is "far below the human detection threshold". For example, I (personally, no idea how much chandler agrees) want this service to just take my keystrokes and be able to give me contextual information updated while I type. That would require getting close to the 1ms.</div>
<div><br></div><div>Cheers,</div><div>/Manuel</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
* "The communication protocol will take the form of serialized<br>
messages encoded using the LLVM bitcode system"<br>
<br>
Why the LLVM bitcode system, and not a library designed for IPC, such<br>
as protobuf? I realize this means less external dependencies, but it<br>
can also be a burden on a subsystem that was designed for a different<br>
purpose. Not to mention that something like protobuf gives you IPC<br>
bindings for other languages for free (Python, Java, etc.)<br>
<br>
* s/filei system/file system/<br>
<br>
* "Likely only to support Linux and local sockets"<br>
<br>
You mean Unix domain sockets<br>
(<a href="http://en.wikipedia.org/wiki/Unix_domain_socket" target="_blank">http://en.wikipedia.org/wiki/Unix_domain_socket</a>) or "normal" sockets<br>
on localhost ?<br>
<span class="HOEnZb"><font color="#888888"><br>
- Eli<br>
</font></span></blockquote></div><br>