;;; ;; Copyright 2013 Genworks International ;; ;; This file is part of the General-purpose Declarative ;; Language project (Gendl). ;; ;; This file is free software: you can redistribute it ;; and/or modify it under the terms of the GNU Affero General Public ;; License as published by the Free Software Foundation, either ;; version 3 of the License, or (at your option) any later version. ;; ;; This source file is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ;; Affero General Public License for more details. ;; ;; You should have received a copy of the GNU Affero General Public ;; License along with this source file. If not, see ;; . ;; Welcome to the General-purpose Declarative Language ("Gendl"). What is this? ============= Gendl is a Generative Programming and Knowledge Based Engineering framework, building on concepts dating back to the 1980s. It allows for high-level declarative, object-oriented problem solving and application development, including but not limited to the ability to generate and manipulate 3D geometry. To solve a problem in Gendl, you formulate it using the "define-object" operator, which allows you to specify inputs, outputs (computed slots), and child objects, which then gives the ability to generate a "tree" of objects, useful for decomposing complexity. A graphical web-based interface, tasty, is available for interacting with your system as you develop it. The web-based GUI framework used to make tasty (GWL) is also available for creating your own custom web-based user interfaces. Gendl provides the fundamental KBE features of: o Declarative (non-procedural) Syntax o Object and value caching (i.e. runtime memorization) o Dependency-tracking (cached values get recomputed when needed) Optionally there is available a set of surface- and solid-modeling primitives which currently depend on SMLib, a commercial geometry kernel available from Solid Modeling Solutions, Inc. The Surface (:surf) package (in the surf/ folder) contains all the high-level Surface and Solid modeling primitives and is available under the AGPL with the Gendl project. These primitives provide a protocol for what the objects should be able to do (i.e. what messages they should answer), but without the SMLib library and associated middleware available, they will not be able to return any results. The SMLib kernel and associated middleware are available as part of the commercial Genworks GDL product Genworks International (http://genworks.com). If you have a different favorite solid modeling kernel (e.g. OpenCascade, Parasolid, Geometros sgCore), then it may be possible to interface the existing Surface package to that kernel, by implementing the methods in surf/source/methods.lisp. Gendl is distributed under AGPL, which has the requirement that you release your updates and any applications compiled with Gendl under AGPL-compatible license (if distributed at all). For Proprietary (closed-source) development and distribution, the commercial Genworks GDL system is available from http://genworks.com. Current Requirements: 1. Common Lisp: Allegro CL 9.0, LispWorks 6.x, SBCL, or CCL (Clozure CL). Without web interface, initial ports to ECL, ABCL, and CLISP have also been completed. 2. Quicklisp (available from http://www.quicklisp.org) To load the entire system, you can do it with: (ql:quickload :gendl) (gdl:initialize) Now you can do a quick sanity test by visiting: localhost:9000/tasty in your browser and trying to instantiate the default assembly tree (robot). Slime (Emacs Editor integration) is recommended for editing GDL applications with Emacs. Slime is available with: (ql:quickload :quicklisp-slime-helper) Documentation is in documentation/tutorial/pdf/tutorial.pdf and this very much an active work in progress. Training tutorials and videos are also in progress and in their current state are available in the Documentation section on http://genworks.com. To help in understanding the role of each module, the overall Gendl source architecture is partially described below. Gendl source code Architecture: ============================= Gendl is separated into layered components, some of which depend on others. Some components also depend on third-party external libraries, which are currently handled with the Quicklisp system. At the core "kernel" is the :gdl package, implemented with files in the folder gdl/base/. This includes the compiler/expanders for "define-object" and related macros as well as core primitives such as vanilla-mixin. Including gdl-base, there are eight modules supported with Gendl: :gdl-base - (gdl/base/) Gendl language kernel. :gdl-cl-lite - (gdl/cl-lite/) Gendl system definitions and loading facility. Supplements our use of asdf and quicklisp. :gdl-regression - (gdl/regression) regression test utilities. :gdl-geom-base - (gdl/geom-base/) Built-in Gendl wireframe primtives and basic geometry/vector manipulation functions. :gdl-gwl - (gdl/gwl/) Generative Web Language, represent web pages using GDL objects, includes Ajax-based web interaction with your model. :gdl-gwl-graphics - (gdl/gwl-graphics/) include graphics rendered from geometry object in GWL web pages. :gdl-surf - (gdl/surf/) surface primitives without underlying geometry kernel middleware or implementation. :gdl-yadd - (gdl/apps/yadd/) self auto-documentation.