/* 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 { }