From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Adam Porter Newsgroups: gmane.emacs.devel Subject: Re: Make peg.el a built-in library? Date: Thu, 26 Aug 2021 12:02:09 -0500 Message-ID: <87bl5k87hq.fsf@alphapapa.net> References: <875yvtbbn3.fsf@ericabrahamsen.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17102"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Thu Aug 26 19:04:04 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mJInM-00049d-O7 for ged-emacs-devel@m.gmane-mx.org; Thu, 26 Aug 2021 19:04:04 +0200 Original-Received: from localhost ([::1]:40206 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mJInK-0005vE-De for ged-emacs-devel@m.gmane-mx.org; Thu, 26 Aug 2021 13:04:02 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:44430) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mJIlk-0004Bg-Jq for emacs-devel@gnu.org; Thu, 26 Aug 2021 13:02:24 -0400 Original-Received: from ciao.gmane.io ([116.202.254.214]:43630) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mJIlh-0007h8-VY for emacs-devel@gnu.org; Thu, 26 Aug 2021 13:02:24 -0400 Original-Received: from list by ciao.gmane.io with local (Exim 4.92) (envelope-from ) id 1mJIlg-00024d-03 for emacs-devel@gnu.org; Thu, 26 Aug 2021 19:02:20 +0200 X-Injected-Via-Gmane: http://gmane.org/ Received-SPF: pass client-ip=116.202.254.214; envelope-from=ged-emacs-devel@m.gmane-mx.org; helo=ciao.gmane.io X-Spam_score_int: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.249, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:273051 Archived-At: FWIW, I've been happy using peg.el in org-ql. I use it to parse strings like: "todo:WAITING scheduled:from=2021-08-01,to=2021-08-31" into a sexp like: (and (todo "WAITING") (scheduled :from "2021-08-01" :to "2021-08-31")) You can see the code I use here: https://github.com/alphapapa/org-ql/blob/master/org-ql.el#L854 I can't speak much to its performance, because it's plenty fast enough for the relatively light usage it gets in org-ql. My only, minor complaint is that I ended up having to use `eval' on its `with-peg-rules' macro at runtime: https://github.com/alphapapa/org-ql/blob/94f9e6f3031b32cf5e2149beca7074807235dcb0/org-ql.el#L908 I tried many, many things before resorting to that, so I don't think I missed any alternatives at the time. If that aspect of the API could be improved, it would be welcomed, but I don't think it's necessary to do so before adding it to Emacs. (The issue is that the tokens that are parsed can be added to at runtime, so they are stored in a variable, and the parsing function is redefined as necessary at runtime, so it's not possible to define the parser fully at expansion time.) Thanks for suggesting this, Eric. And thanks to Helmut and Stefan for their work on peg. It's a great tool.