Thread (51 messages) flat view 51 messages, 5 authors, 2016-06-15

Re: [PATCH 1/2] Update the bash prompt from 'applied' instead of the obsolete 'current'

From: Karl Hasselström <hidden>
Date: 2016-06-15 22:43:11

On 2007-05-21 16:17:22 +0100, Catalin Marinas wrote:
On 21/05/07, Karl Hasselström [off-list ref] wrote:
quoted
On 2007-05-21 12:15:40 +0200, Karl Hasselström wrote:
quoted
We might consider having plumbing written in C or something, and
make sure that the plumbing can be called directly if there's
need, but it's going to complicate things greatly compared to
pure Python.
Yes, it will complicate things. I think StGIT would have progressed at
a much slower pace if written in C :-).
I agree. C is not a good language to write a whole application in. But
for the hot spots, C is a reasonable choice.
quoted
What I'm (foggily) envisioning here is to rewrite parts of StGIT
(as little as possible) as a C library (libstgit.so?), and call
the library both from the Python code, and from a "plumbing" C
program (stgit-helper?). We should not try to make the library API
stable, just like the current git library.
Apart from the start-up time, I don't see other major slowdowns
caused by Python.
I haven't, either.
It would be useful to use a git library directly without invoking
external applications (I'm not sure what's the state of a "libgit.a"
or what improvement we would get).
There is no usable git library yet. But once there is, I agree we
should use it.
As for the start-up time, unless you write most of the commands in C,
we would still have to load Python modules. If you run stg-prof
instead of stg for a simple command like 'top', you can see that the
main function takes about 60-70ms, the rest to 150ms reported by the
external 'time' is Python start-up and module loading.
My suggestion was to have a small stand-alone C program that could do
some operations that need to be really fast, such as
top/applied/unapplied. It need not have a nice user interface since
it's only going to be called by scripts (bash-completion and the
like), and it should only handle those operations that _must- avoid
the Python startup penalty. And for sanity reasons, it should share
code with stgit.
I had a quick try at using "freeze.py" to generate a binary (well,
it includes python bytecodes but it might save time on module
look-up) but it got confused by my optimisation to only load module
commands based on the stg arguments. Maybe we should try this first.
I agree that we should try pure-Python optimizations first.
quoted
There are two kinds of things we'd want to have in the library:
(1) things that are too slow to do in Python, and (2) things that
need to be available from stgit-helper in order to avoid Python's
startup cost, such as top/applied/unapplied for the bash
completion and bash prompt.
As you probably guessed, I'm not really in favour of re-writing
parts of StGIT in C, at least not in the near future, though anyone
can fork and re-implement it :-).
I wouldn't do it just for fun, either. But if it's a prerequisite to
get good enough performance for something we really want, and all else
has failed, I'd be willing to argue for the introduction of a C
library and helper application.

-- 
Karl Hasselström, kha@treskal.com
      www.treskal.com/kalle
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help