The reason for me to seek a C/C++ alternative for Lucene very simple: 
performance (especially memory) and dependencies (no Java on many embedded 
systems).

This sounds like problem you need to solve anyway first, if you want people to 
write bindings for other languages.
Unless there is a complete C API, I personally would rather stick to swig 
bindings of clucene.

And it behooves me to say that Lucy is trying to solve other problems (a 
toy-swig project which you expect people to learn to use in order to wrap your 
one, single library) that it's rather supposed to solve in the first place.
Here's an excerpt from Lucy FAQ:

Why don't you use Swig?
A major design goal of Lucy is to present bindings which are as idiomatic as 
possible so that our users feel as though they are programming in their native 
language and not in C. Swig is a great tool, but it does not offer support for 
many of the features which make Lucy so user friendly: subclassing, named 
parameters, default argument values, etc.
These excuses downright wrong. Surely SWIG handles inheritance, default 
arguments, and named parameters (docstring features for python) for languages 
that support them. If your favorite, killer feature X is missing for your 
apparently-favorite-language Perl, why don't you just send a patch to Swig 
instead of re-inventing the wheel? And I should and add Swig is a BIG wheel.
And mind you, not many languages support those features.

And okay, I get that you love Perl, and you probably don't want to dig into the 
giant called Swig just to implement a single feature you like. But please 
understand that Perl is obsolete to many people today, and by not implementing 
a complete C API, you're not letting people to use Swig (or whatever tool the 
language X supports for wrapping C code) at their option.

Last but not least, "loose C port" implies it can be used via C, which led me 
to this project. In it's current form, Lucy mainly looks like a Perl port of 
Lucene, boosted with some C code.

Lucy is a project at it's infancy, so I expect many things to change in the 
future.
But for now, I'm going with clucene+swig.


----- Original Message -----
From: Nathan Kurz <[email protected]>
To: [email protected]; Rayne Olivetti <[email protected]>
Cc: 
Sent: Friday, November 23, 2012 2:33 AM
Subject: Re: [lucy-user] Using Lucy directly from C

On Thu, Nov 22, 2012 at 4:35 AM, Rayne Olivetti <[email protected]> wrote:
> I'm well aware of the purpose of Lucy, but is it not possible to use it 
> directly from C? I can't find any documents regarding this, and the INSTALL 
> file says "Currently it is available via Perl bindings.", which almost 
> suggests "you're on your own if you're going to use Lucy from C" (and this 
> sounds quite awkward for a C library).
>
> I'm also trying to write Go bindings (which is normally done via cgo, which 
> allows Go code to directly call C functions), and using cgo doesn't require 
> any of the binding magics that ships with Lucy --it works best with a plain, 
> old C API.

There is not yet a published C API.   There is a strong desire to have
one, but it's yet to be a top priority.  It will probably stay that
way until someone shows up on the mailing list with a clear need and
the willingness and ability to help work on it. :)

The difficulty is that host languages are integral to the way Lucy
works, and some small but crucial pieces are implemented only in the
host language.  There's been considerable interest in other languages,
but right now Perl is the only one fully supported.

Here's a little more background:
http://lucene.472066.n3.nabble.com/Release-date-and-language-bindings-td676033.html

--nate

Reply via email to