guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Exceptions


From: Vorfeed Canal
Subject: Re: Exceptions
Date: Tue, 27 Sep 2005 21:18:30 +0400

On 9/27/05, Ludovic Courtès <address@hidden> wrote:
> Hello,
>
> Vorfeed Canal <address@hidden> writes:
>
> > 1. Not really:
> >   A. They are usually useless for programs not linked to guile - and
> > such programs will know where to find them anyway since libguile will
> > know this.
>
> Libguile knows where _any_ third party library (the shared object) gets
> installed?

Of course it must - how else can it load them ? With my patch it knows
about few default places and can be instructed about other places in
nice shemely way.

> This is wrong.  The user knows it, the Scheme module that
> loads it knows it, but Guile itself doesn't care.

... and as a result the whole system does not work. Yeah - this is
exactly what I see.

In our real imperfect world neither module creater nor user care about
libraries placement so it's obvious that guile should do this, there
are noone else. Module creator does not care since it's not really
important for him/her (it should be somewhere where guile can find it
- no other preferences usually), user has even less reasons to care
(he's just a user - why should he care?) and when libguile does not
care as well the whole thing breaks down.

The real strange thing is that libguile actually *knows* about
it:"guile-config info pkglibdir" will print correct information (true
for both GUILE 1.6.x and GUILE 1.7.x).
-- cut --
$ /somewhere/there/bin/guile-config info pkglibdir
/somewhere/there/lib/guile
-- cut --
it just never actually uses this knowleadge.

> >   B. If program A is linked to libguile.so.12 (guile 1.6.7) while
> > program B is linked to libguile.so.16 (guile 1.7.2) they'll need
> > DIFFERENT versions of such libraries - and this is somewhat
> > problematic with libtool.
>
> This is true I guess, because `dynamic-link' doesn't allow to specify
> version info.  _This_ is an issue and maybe this procedure could be
> fixed by allowing the user to pass Libtool-like version information.

This is one solution. And IMO not the best solution. If package DOES
HAVE pkglibdir (and GUILE has one - just check "guile-config info
pkglibdir" with GUILE 1.6.x and/or GUILE 1.7.x) then I should be able
to put my architecture-dependent file there without further dances!

> Note that `(ice-9 readline)' works around this by having the library
> name contain version information.

Are we on the same planet ? On my planet this:
-- cut --
$ /somewhere/there/bin/guile -e '(use-modules (ice-9 readline))'
ERROR: In procedure dynamic-link:
ERROR: file: "libguilereadline-v-16", message:
"libguilereadline-v-16.so: cannot open shared object file: No such
file or directory"
-- cut --
means that "(ice-9 readline) does not work".

> >   C. While it's true "these libraries can do this and they can do
> > that" in almost 100% cases today they just export some functions for
> > scheme level.
>
> Maybe.  So what?

IETF principle: It's better to have working code today then perfect
code "sometime in the future". Let's handle existing use-cases now,
then think about perfection. GUILE exists for 8 eyars yet still
mishandle common cases. May be it's time to stop worrying about
perfection ?

> > 2. You can not install them "in the usual place" anyway:
> >
> > $ ./configure --prefix=/somewhere/there ; make ; make install
> > $ /somewhere/there/bin/guile -e '(use-modules (ice-9 readline))'
> > ERROR: In procedure dynamic-link:
> > ERROR: file: "libguilereadline-v-16", message:
> > "libguilereadline-v-16.so: cannot open shared object file: No such
> > file or directory"
> >
> > Oops ?
>
> That doesn't look so weird to me.  The convention on Unix systems is
> that you _have to_ specify at run-time a list of directories where
> libraries may be searched for by the loader.
>
I *did*. When I configured GUILE I specified this info. If GUILE lost
it - it's not my problem.

> > I did not. Right now it's IMPOSSIBLE to install two versions of guile
> > at all - let alone in the sane way
> > (/usr/bin/guile-{1.6,1.7},/usr/lib/guile-{1.6,1.7},/usr/share/guile-{1.6,1.7}
>
> Debian has two Guile packages that may be installed together alongside.
> Guile itself would work fine.  Even `(ice-9 readline)' will work fine
> thanks to the workaround above.
>
Oh the infinite wisdom of RFC1925. Yes, "with sufficient thrust, pigs
fly just fine". But you forgot the next part: "However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead." Yes, it's possible to hack around GUILE's idiosyncrasies -
but I think my time will be better spent doing something else.

> The only thing (admittedly important!) that may not work, though, is
> other extension libraries, as we noted above.
>
And this is the problem I've started the thread with.

> > so I can not see how guile development is done in first place (it's
> > standard practice to have 3-4 different versions of program while it's
> > in developmet and guile does not work this way at all - and even if
> > you'll fix guile itself third-party extensions will not obey your
> > decision).
>
> This is true.  The point is that there is apparently no sufficient
> manpower to address all these issues.  In particular, I guess the
> current Guile developers work hard to improve Guile itself, at the
> expense of breaking binary compatibility.
>
...and without offering adequate tools for peacefull coexistence of
few GUILE versions. Brilliant decision. Just brilliant.

And this bullshit about lack of manpower is just that. Bullshit. I've
coded working solution in half-hour. It does not handle everything
(libguilereadline still goes to /somewhere/there/lib/, not to
/somewhere/there/lib/guile/1.7), but it's easy enough to fix. TTN
proposed something similar more then year ago. Yet GUILE still does
not have working solution.

> Note, however, that Guile 1.6 was compatible at the source-level with
> Guile 1.4 (and people were greatly encourage to drop the `gh_'
> interface), and Guile 1.7 is source-level compatible with Guile 1.6 (and
> it also encourage users to migrate to the new API when relevant).
>
This is what attracted me in first place, yes. Serious concerns about
binary-compatibility are great but if you are not offereing TOTAL
compatibility will ALL versions then you need some tool to keep few
versions around at the same time.

> Apparently, the C API of Guile 1.7 was designed to me as much
> ``future-proof'' as possible, given the goals that can be envisioned
> today.  The internals are no longer exposed to the C user.  I'm
> confident in the relative stability of this API.
>
Relative is operational word here.

> > I've tried it few years ago and back then it was not really usable:
> > was not able to even work with 10GiB partition. Today... It does not
> > even detect my SATA HDD in my NForce4-based system. May be I've used
> > too old version, of course... or did something wrong. Plus AFAIK even
> > today it's still "not recommended for production use" - after >10
> > years of development and I'm not really interested in OS development
> > (or for that matter GUILE development): I want something that WORKS.
> > NOW. It's Ok if I need to spend some time with tuning/fixing, but not
> > YEARS, sorry.
>
> Why don't you sponsor a few developers, or even just a single one?
>
Why should I ? I'm not univercity, science fund or Google to offer
sponsorship. I'm perfectly happy to offer what few hacks I've
developed/will develop for my own needs but if the only way to
acception is to create "perfect solution" then it's probably better to
try my luck elsewhere.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]