The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
/* 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 { }