Clipper FAQ
Kathryn Cowtan, University of York, December 2000
- What does CLIPPER stand for?
- A clipper is a fast or prestigious ship.
-
CliPPer = C Plus Plus
cLIpper = LIbrary
clippER = ER, thats enough acronym for now.
- Or if you prefer, "Cross-crystal Likelihood Phase Probability Estimation and Refinement, which is what I hope it will be used for.
- Do I need CCP4?
- No. CCP4 is an optional dependency which is only needed if you want to access CCP4 file formats.
- Why C++?
- This is where I'm supposed to tell you that C++ is a great language. It isn't (at least not for my purposes). A good programming language allows you to think in the language of the problem, not the language of the computer. In C++ you keep having to return to implementational details, such as whether to use a pointer or a reference or a value, a derived class or a template. This is probably unavoidable if good performance is going to be achieved.
But the main reason is a lack of alternatives. Java is (generally) slow, and clumsy in places. Maybe Objective-C, Delphi, or even C# have solved some of these problems, but they are less portable and less widespread than C++.
- Why use references rather than pointers in the public API,
particularly for arguments which are modified?
- The C++
FAQ lite provides the most precise statement of the priciples: No
pointers in the public API, except when returning a pointer which
might be null. The above reference also describes the problem of wrong
attitudes brought over from C.
- Can I use Fortran/C/Python/Visual Basic?
- You can provide SWIG wrappers for the parts of your program you
need to access.
- What is the license?
-
If you get it from here, the code is licensed under the LGPL with an
additional clause allowing for the distribution of binaries without
object files. If you get it from CCP4, it is licensed under the CCP4
library license.
- Why don't you use GNU autoconf or SCONS for building?
-
The short answer is that if you get it from CCP4, it does. If you get
it from me it doesn't, becuase autoconf is unreasonably complex and I
have better things to fill my head with.
The long answer is that when Paul (who is an autoconf guru) and I set
up autoconf for clipper it took us a week, and required sufficient
specialist knowledge that I couldn't really maintain it. By contrast,
when I set it up with SCONS, it took me less than a day and was easily
maintainable, however at that stage SCONS didn't handle other
platforms very well. So I distribute development versions of clipper
with simple build scripts which actually work for me, CCP4 distribute
release versions with autoconf because they have enough experience to
maintain it, and PHENIX distribute it with SCONS because that's what
they use. If you want an autoconf version, use the CCP4 release
(granted its always a bit out of date).
- Why not PHENIX, the Zelinka/Otwinoski libraries, etc?
-
I'm writing this library to solve my own problems, and to help CCP4
developers transition to OO programming. You should find the best tool
for the problem you need to solve, and use that. If Clipper fits the
task, then I am happy to provide advice on implementation and make
changes which do not lose generality.
Having said that, it is certainly possible to use CLipper in
association with CCTBX.