InteLib is a library of C++ classes which lets you do Lisp programming (or Scheme programming, if you prefer so) within your C++ program even without any additional preprocessing, without all those calling conventions etc. You can write a C++ code (that is, a code which is accepted by your C++ compiler) thinking in a "Lisp mode" and the code you write will look much like Lisp code altough it will be pure C++.
The name InteLib stands for Intelligence Library. It is because the library was primarily intended to make some use out of so-called artificial intelligence programming languages such as Lisp, Prolog etc.
In almost every serious project there are little annoying subtasks which you could implement in minutes using another programming language, but you've got to waste hours, days or even weeks to implement them within the project's only language (typically C++). Suppose for example you've got an equotion and you need to differentiate it. The task is solved in at maximum two or three hours if you program in Lisp or Scheme. It takes no less than a day if you're using pure C++.
With InteLib, you can do it in C++ just as if you were coding in Lisp. And you actually don't need any Lisp for it. It's all C++.
InteLib will be useful for you if you work with C++ and you know Lisp. It is primarily intended for people who are able to see that something is better to be implemented in one of the alternative languages than in pure C++. And you only can do such a conclusion if you know what Lisp or Prolog or whatever is and what can it do.
The simple (and incomplete) answer is -- yes, but only if your
project obeys certain rules.
The library is distributed freely under the terms and conditions of
GNU General Public License v.2, and
the library part itself (that is, the
directories) is also available under
GNU Lesser General Public License v.2.1.
Please note this does not mean it is in public domain, nor does it mean
you can use it in whatever manner you want. Only if you develop free
software (as defined by FSF) there's nothing to worry about; if you
develop anything else, there are certain (and strict) rules you must
See the licensing information for details.
If you really wish non-GPL license,
read this also.
Yes, you can. There are translators ILL (stands for InteLib Lisp) and ILS (for InteLib Scheme), that come with the library. They translate a file written in traditional Lisp/Scheme syntax into a C++ module that consists of the header and the implementation file. The translators are useful ONLY in case you need to write a whole module in Lisp or Scheme. There's no use for them if the Lisp-like code is to be mixed up with traditional C++ within the same module.
There are actually two Lisp dialects supported by the library, the InteLib Lisp and the InteLib Scheme. Both are not standard-compliant. It is possible that InteLib Scheme will be r5rs-compliant one day (but not r6rs, and don't expect that from us). This is not guranteed however. As of Common Lisp, that monster is definitely will never be implemented in InteLib. The InteLib Lisp dialect looks more like Common Lisp than like Scheme, but I'd say it is farer from Common Lisp than even from Scheme, if we take into account the number of missing features.
By the way, there are some extensions in both dialects, such as
SETF! syntax in InteLib Scheme, and
in InteLib Lisp.
First of all, it wasn't the primary goal of the project. I realize it could be useful to be compatible with one of the standard dialects, but there are more important things.
Furthermore, Common Lisp is way too complicated to clone, so there was no chance for InteLib Lisp to grow to it, and not only because it would took too much effort, but also because there are lots of things in Common Lisp which are unwanted in InteLib (such as huge number of symbol objects used as labels, which Intelib would have to implement as global variables).
As about Scheme, it only made some sence to speak about it when the InteLib 0.5.83 got released, as it was the first time InteLib contained any Scheme. The sad thing is that it was perfectly realized that R5RS is simple enough to try to comply it with InteLib Scheme, but these days the ratification process of R6RS was already started. It is unlikely we ever want to be R6RS compliant. I'd rather write a paper titled, say, Standardisation activity as a kind of terrorism.
Last updated April 07, 2008