用 Emacs Web Server 写的 Emacs Lisp Docstring Server


#1

算是 emacs-web-server 的一个小例子:

(defun docstring-server ()
  (ws-start
   (lambda (request)
     (with-slots (process headers) request
       (let* ((path (alist-get :GET headers))
              (str (substring path 1))
              (doc (elisp--company-doc-string str)))
         (cond
          (doc
           (ws-response-header process 200 '("Content-type" . "text/plain; charset=utf-8"))
           (process-send-string process doc))
          (t
           (ws-send-404
            process
            (if (string= str "")
                "Visit http://localhost:9001/mapcar for its docstring."
              (concat "No documentation for " str))))))))
   9001))

然后 http://localhost:9001/mapcar 会返回 mapcar 的 docstring,我还丢进了自己的服务器上,预计随时都会挂掉,just for fun

~ $ curl -L 1.xuchunyang.me
Visit http://localhost:9001/mapcar for its docstring.
~ $ curl -L 1.xuchunyang.me/mapcar
Apply FUNCTION to each element of SEQUENCE, and make a list of the results.                                                                                               
~ $ curl -L 1.xuchunyang.me/cl-loop
The Common Lisp `loop' macro.
~ $

#2

如果要认真点的话,写个 daemon 在 unexpected exit 后重启就行了


#3

我们要不要洪水一下,看能不能挂?


#4

太坏了 :joy: ,紫薯布丁


#5

假设 Emacs 处理一个请求需要一秒钟,那么如果一秒钟里 60 个用户访问,最后一个用户岂不是要等一分钟?!这也太慢了!

这个 Emacs 服务器是用下面的方法启动的:

$ emacs --daemon && emacsclient -e '(docstring-server)'

#6

用 Apache 這种专用的高性能代理之类的缓存 HTTP 请求的结果。


#7

觉得文档的需求没有代码段的需求大

咱们网站可以提供一个代码段的接口

可以上传 检索 查看代码段 当然也可以红心加关注


#8

这不就是最近 facebook 开源的 AI 代码么?:joy::joy::joy:


#9

elisp--company-doc-string 提供的信息偏少,elisp--company-doc-buffer 提供的信息比较完整。


#10

哪里可以下载?


#11

https://ai.facebook.com/blog/aroma-ml-for-code-recommendation/


#12

还要翻墙吗? 看不了啊!


#13

facebook什么时候不需要翻墙了?