On Tue, 23 Jul 2013 10:29:36 +0200, Stephan Beal <sgb...@googlemail.com> wrote:

On Tue, Jul 23, 2013 at 3:25 AM, Aaron W.Hsu <arcf...@sacrideo.us> wrote:

I’ve so far managed to avoid using the feature myself, but I have been on teams where people tried to use this to some effect, and unfortunately, the interfaces always seemed to scale very poorly. That’s not to say that they
cannot be made to scale, but it seems to be a little too fragile for my
sensibilities. Monotone’s integrated scripting, on the other hand, had
another problem. From an user’s perspective, I found that the strict
support for a single scripting language made it difficult to integrate
Monotone fully into whatever project I was using.


Hi Aaron,

you've just summarized two of the hurdles any potential scripting language
would have vis-a-vis v2. My current thinking is that if the library's
interface is sane then we can bind it to arbitrary script languages and
find out which one is best. i've got lots of experience with binding
third-party libraries to scripting engines (SpiderMonkey, Google v8,
QtScript, TH1, and custom engines) and have a fairly good feel for what is
required of a C API vis-a-vis scripting engines. So i'm fairly confident
that, with the help of the list, we can conquer this without all that much
grief. It'll be fun :).



While the Lua scripting enabled me to gain a level of sophistication and
relative rigor in the process more than what I could get from normal UNIX
plumbing, if my project wasn’t in Lua in the first place, I found it
breaking my concentration a good deal more than I would have liked.


That's my impression of lua, though i haven't worked with it (it's too
weird, both at the script and C API level).

really? regarding the language (the scripting level) I find lua exceptionally well thought out and clear. the syntax is intentionally very "boring" -- no surprises here -- and sure much easier to swallow than tcl, for instance, for people starting from scratch. regarding the C level API I don't have any experience (nor an opinion) but it claims to be much easier than that of other scripting languages. the LaTeX guys at least have decided to move into this direction to get a real scripting facility into latex http://luatex.org/ which personally
I feel was a good decision.

which is not to mean that I want to advertise lua here. ultimately I personally don't care too much and, as has been said in this thread elsewhere already I would argue that for 99.9% of the projects of 99.9% of the users there should be (and probably actually will be) no need to script a revision control system (beyond, maybe, some basic shell script drivers patching together fossil commands): the SCM needs to provide the required functionality through it's commmand set.

I also do hope any potential changes/extensions will not interfere with
the current 'look and feel' of fossil (the single-executable/zero-installation-overhead, minimal dependencies, and single file for whole repo (and, yes, the nice web ui, although personally I could live without it) are the things which sets fossil apart.
otherwise I would just use mercurial ;-).

personally, my impression is that the absence of a scripting facility is _not_ high on the least of current shortcomings. maybe, one should try to also go through the archives and the assorted wish lists and to agree among the developers which functionality changes should be implemented if the serious overhaul to realize `fossil2' (please don't call it that in the end...) is actually undertaken. `grep' sure would be high on my list as would be a more consistent and less idiosyncratic CLI. E.g., I'm very happy that recently significant progress has been achieved regarding the use of SSH (long overdue, I feel) which I find more important than any scripting facilities in one or more languages.

but maybe my perspective is to limited ;-)



I feel like there should be a balance when it comes to extensibility.
Indeed, I think that a good DVCS ought to never require the user to start extending or programming their VCS in order to use it normally from day to
day.


And we shall call it "fossilmacs" :)



The plug-and-play nature of Fossil is a huge advantage to me right now, as it’s so simple to use and get running on any given platform and workflow.
It just works, and does not rely on any extension interface, such as a
scripting or hook layer to get things done.



One of my goals is that we will be able to compile specific modules in and
out, e.g. the HTML UI might not be needed for someone who just wants an
AJAX back-end. Ideally these could be compiled in/out or be loaded at
runtime, but runtime loading is a low priority [for me] because static
binaries of fossil are amazingly popular.


On the other hand, it seems to me that scripting and a programmatic
interface *is* very good when it comes to integrating VCS into a project’s
workflow.


In my experience scripting is the only flexible way to do this. Once an API is scriptable, all kinds of new/unimagined things become possible with it.


It’s this last part that I think should be the target of any
extensibility. I would argue that, to me, one should not direct the
programmatic interface towards end-users, but rather, those who wish to
integrate Fossil into a larger framework.


That's a good point.



In that case, I see the limitation of a single scripting language as a
problem. I also think that the ad hoc nature of a “text” based interface
like UNIX style plumbing to be a problem. Instead, perhaps there is a way of creating a public interface to Fossil that allows one to reliably extend
its functionality without restricting yourself to a single language.


That's one of my primary goals. i recently developed my own scripting
engine and will be developing a fossil wrapper in that language parallel to any v2 development, the intention being to make sure that the v2 interface
is indeed suitable for scripting.


Here’s a simple idea of how this might work. Publish a specific interface
in C against which people can write their code. Allow people to generate
shared objects that export a specific set of functions for registering or
extending functionality of the Fossil executable.


That's in principal where i'd like to head. i'd like for modules to be
either statically or dynamically linkable, but those details are still far down the road and does not affect the planning of the overall architecture
at this point.



Then, these executables can be placed inside of a specific directory,
perhaps found through a set of paths in an environment variable.


i'm also thinking something like:

export FOSSIL_AUTOLOAD_MODULES=foo,bar,baz

and it would try to load those from $FOSSIL_MODULES_PATH.

When fossil runs, it can dynamically link in any of the shared objects that
it finds there, and these can register additional functionality with the
Fossil system.


And we're very much on the same page. Note, however, that people really
like having fossil as a static binary, so that will likely be the "tier 1
target."


In this way, people can use whatever language they want to use, as long as it has a bi-directional C FFI, which most languages I have seen have. The fossil executable will still be shipped as a single executable, and people would only need a simple C header file to use the extended features, which
can be obtained separately. It would have the benefit of a rigorously
defined interface with more than textual interfaces for increased
reliability of the code, but people could still use shell scripts if that’s what they really wanted to do, they would just have to be dispatched from a
shared object.

Just a few thoughts that I have wondered about when it comes to extension interfaces. Most of the time I tend not to use them because they don’t work
with my language or they are too ad hoc for me to rely on. I think the
above would solve those issues while still keeping Fossil dirt simple for
the end user.


By all means, feel free to propose concrete interfaces. At this point v2 is
"just talk" - there is no code, no concrete plan. i have lots of things i
would like to try out, in terms of finding the "shape" of the library
without actually writing implementation code, and that's where i'll be
spending much of the next few days (in between dog walks), and will post a
link once i've got some headers sketched out.



--
Using Opera's revolutionary email client: http://www.opera.com/mail/
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to