/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
parcel Lucy;
/** Quick-start guide to hacking on Apache Lucy.
*
* The Apache Lucy code base is organized into roughly four layers:
*
* * Charmonizer - compiler and OS configuration probing.
* * Clownfish - header files.
* * C - implementation files.
* * Host - binding language.
*
* Charmonizer is a configuration prober which writes a single header file,
* "charmony.h", describing the build environment and facilitating
* cross-platform development. It's similar to Autoconf or Metaconfig, but
* written in pure C.
*
* The ".cfh" files within the Lucy core are Clownfish header files.
* Clownfish is a purpose-built, declaration-only language which superimposes
* a single-inheritance object model on top of C which is specifically
* designed to co-exist happily with variety of "host" languages and to allow
* limited run-time dynamic subclassing. For more information see the
* Clownfish docs, but if there's one thing you should know about Clownfish OO
* before you start hacking, it's that method calls are differentiated from
* functions by capitalization:
*
* Indexer_Add_Doc <-- Method, typically uses dynamic dispatch.
* Indexer_add_doc <-- Function, always a direct invocation.
*
* The C files within the Lucy core are where most of Lucy's low-level
* functionality lies. They implement the interface defined by the Clownfish
* header files.
*
* The C core is intentionally left incomplete, however; to be usable, it must
* be bound to a "host" language. (In this context, even C is considered a
* "host" which must implement the missing pieces and be "bound" to the core.)
* Some of the binding code is autogenerated by Clownfish on a spec customized
* for each language. Other pieces are hand-coded in either C (using the
* host's C API) or the host language itself.
*/
inert class Lucy::Docs::DevGuide { }