From: Jeff King <peff@peff.net>
To: "Eric S. Raymond" <esr@thyrsus.com>
Cc: Sitaram Chamarty <sitaramc@gmail.com>,
Patrick Donnelly <batrick@batbytes.com>,
Nguyen Thai Ngoc Duy <pclouds@gmail.com>,
Michael Haggerty <mhagger@alum.mit.edu>,
Felipe Contreras <felipe.contreras@gmail.com>,
git@vger.kernel.org
Subject: Re: Python extension commands in git - request for policy change
Date: Wed, 12 Dec 2012 01:32:09 -0500 [thread overview]
Message-ID: <20121212063208.GA18322@sigill.intra.peff.net> (raw)
In-Reply-To: <20121212033043.GA24937@thyrsus.com>
On Tue, Dec 11, 2012 at 10:30:43PM -0500, Eric S. Raymond wrote:
> My sense is that git's use cases are better served by a glue language
> in the Python/Perl/Ruby class rather than an extension langage. But
> my mind is open on this issue.
I think there are really two separate use cases to consider:
1. Providing snippets of script to Git to get Turing-complete behavior
for existing Git features. For example, selecting commits during a
traversal (e.g., a better "log --grep"), formatting output (e.g., a
better "log --format" or "for-each-ref --format").
2. Writing whole new git commands in a language that is quicker or
easier to develop in than C.
I think (1) is a good match for lua. It's light-weight and easy to
embed, we can map the few bits of information we want for each snippet
into the language (e.g., a commit object as a lua table), and the
language ecosystem is not that important (the user is more interested in
writing readable one-liners manipulating data provided by git than they
are in calling out to third-party modules).
But for (2), you are going to care a lot more about the language and its
ecosystem (because you'll be interacting more with the world outside of
git), and about having bindings to lots of different parts of git
(because you'll want to do more interesting things than just examine a
few data structures). We provide that right now with executable
plumbing commands. That's convenient for shell scripts, and you can
build bindings for other languages on top (e.g., see perl/Git.pm).
It's nicely universal, but of course there are some drawbacks: it's slow
(fork and pipe overhead), and it's sometimes awkward (parsing, quoting,
no interactivity between caller and plumbing). The other obvious choice
for a lingua franca is a linkable C library, with bindings in your
language of choice.
It would take a lot of effort to expose git-core's internals in a clean
way; you'd probably be better off starting from scratch and rewriting
large parts in a friendly library-like manner. Fortunately, there is
already a project underway to do so: libgit2. It does not yet have
feature parity with git, but it can do quite a bit. And there are
already ruby and python bindings.
-Peff
next prev parent reply other threads:[~2012-12-12 6:32 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-25 2:44 Python extension commands in git - request for policy change Eric S. Raymond
2012-11-25 3:15 ` Nguyen Thai Ngoc Duy
2012-11-25 5:18 ` Eric S. Raymond
2012-11-25 8:56 ` Felipe Contreras
2012-11-25 9:54 ` Eric S. Raymond
2012-11-25 11:48 ` Felipe Contreras
2012-11-25 17:50 ` Eric S. Raymond
2012-11-25 21:22 ` Felipe Contreras
2012-11-25 21:56 ` Eric S. Raymond
2012-11-26 13:11 ` Felipe Contreras
2012-11-27 7:54 ` David Aguilar
2012-11-27 8:43 ` Felipe Contreras
2012-11-27 9:17 ` Sitaram Chamarty
2012-11-27 10:51 ` David Aguilar
2012-11-27 22:01 ` Guillaume DE BURE
2012-11-27 15:33 ` Johannes Schindelin
2012-11-28 2:09 ` Felipe Contreras
2012-11-25 17:21 ` Johannes Schindelin
2012-11-25 10:26 ` Pat Thoyts
2012-11-25 10:33 ` Eric S. Raymond
2012-11-25 15:51 ` Erik Faye-Lund
2012-11-25 8:53 ` Felipe Contreras
2012-11-25 9:53 ` Eric S. Raymond
2012-11-25 11:19 ` Felipe Contreras
2012-11-25 17:32 ` Eric S. Raymond
2012-11-25 21:43 ` Felipe Contreras
2012-11-25 22:44 ` Eric S. Raymond
2012-11-26 11:05 ` Andreas Ericsson
2012-11-25 10:44 ` Michael Haggerty
2012-11-25 10:57 ` Eric S. Raymond
2012-11-25 11:51 ` David Lang
2012-11-25 12:01 ` Stefano Lattarini
2012-11-25 17:44 ` Eric S. Raymond
2012-11-25 11:25 ` Nguyen Thai Ngoc Duy
2012-12-11 5:44 ` Patrick Donnelly
2012-12-12 0:09 ` Sitaram Chamarty
2012-12-12 0:28 ` Patrick Donnelly
2012-12-12 0:53 ` Tomas Carnecky
2012-12-12 1:50 ` Nguyen Thai Ngoc Duy
2012-12-12 2:22 ` Tomas Carnecky
2012-12-12 2:26 ` Patrick Donnelly
2012-12-12 5:15 ` Joshua Jensen
2012-12-12 3:30 ` Eric S. Raymond
2012-12-12 5:11 ` Joshua Jensen
2012-12-12 12:23 ` Eric S. Raymond
2012-12-12 6:32 ` Jeff King [this message]
2012-12-12 7:03 ` Patrick Donnelly
2012-12-12 8:32 ` Jeff King
2012-12-12 12:26 ` Eric S. Raymond
2012-12-12 12:29 ` Jeff King
2012-12-12 17:49 ` Junio C Hamano
2012-12-12 22:21 ` Andrew Ardill
2012-12-12 22:43 ` Junio C Hamano
2012-12-12 7:11 ` Patrick Donnelly
2012-12-12 12:43 ` Eric S. Raymond
2012-12-19 2:30 ` Patrick Donnelly
2012-11-25 11:40 ` Felipe Contreras
2012-11-25 17:36 ` Eric S. Raymond
2012-11-25 21:25 ` Felipe Contreras
2012-11-25 22:11 ` Eric S. Raymond
2012-11-26 13:17 ` Felipe Contreras
2012-11-27 14:35 ` Magnus Bäck
2012-11-27 18:35 ` Eric S. Raymond
2012-11-27 21:08 ` Sitaram Chamarty
2012-11-28 0:16 ` Felipe Contreras
2012-12-03 21:45 ` Philippe Vaucher
2012-12-04 14:19 ` Felipe Contreras
2012-12-04 14:40 ` Stephen Bash
2012-11-28 0:10 ` Felipe Contreras
2012-11-28 0:51 ` Jeff King
2012-11-28 1:22 ` Felipe Contreras
2012-11-28 1:39 ` Jeff King
2012-11-28 2:06 ` Felipe Contreras
2012-11-28 15:39 ` Magnus Bäck
2012-11-28 5:08 ` Joshua Jensen
2012-11-25 8:57 ` Johannes Sixt
2012-11-25 10:25 ` Eric S. Raymond
2012-11-25 21:41 ` Krzysztof Mazur
2012-11-25 22:47 ` Eric S. Raymond
2012-11-26 5:10 ` Sitaram Chamarty
2012-11-26 8:32 ` Krzysztof Mazur
2012-12-04 15:51 ` Martin Langhoff
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20121212063208.GA18322@sigill.intra.peff.net \
--to=peff@peff.net \
--cc=batrick@batbytes.com \
--cc=esr@thyrsus.com \
--cc=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=mhagger@alum.mit.edu \
--cc=pclouds@gmail.com \
--cc=sitaramc@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).