README 5.66 KB
Newer Older
1
;;;
2
;; Copyright 2013 Genworks International
3 4
;;
;; This file is part of the General-purpose Declarative
Dave Cooper's avatar
Dave Cooper committed
5
;; Language project (Gendl).
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
;;
;; 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
;; <http://www.gnu.org/licenses/>.
;; 


23 24
Welcome to the General-purpose Declarative Language ("Gendl").

Dave Cooper's avatar
Dave Cooper committed
25 26 27 28

What is this? 
=============

29 30
Gendl is a Generative Programming and Knowledge Based Engineering
framework, building on concepts dating back to the 1980s. It allows
Dave Cooper's avatar
Dave Cooper committed
31 32 33 34
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
35 36 37 38 39 40 41 42 43
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. 
Dave Cooper's avatar
Dave Cooper committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62

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.
63 64 65
The SMLib kernel and associated middleware are available as part of
the commercial Genworks GDL product Genworks International
(http://genworks.com).
Dave Cooper's avatar
Dave Cooper committed
66 67 68 69 70

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. 
71

Dave Cooper's avatar
Dave Cooper committed
72 73
Gendl is distributed under AGPL, which has the requirement that you
release your updates and any applications compiled with Gendl under
74
AGPL-compatible license (if distributed at all). 
75

76 77
For Proprietary (closed-source) development and distribution, the
commercial Genworks GDL system is available from http://genworks.com.
78

79 80 81

Current Requirements:

Dave Cooper's avatar
Dave Cooper committed
82
 1. Common Lisp: Allegro CL 9.0, LispWorks 6.x, SBCL, or CCL (Clozure
83 84
    CL). Without web interface, initial ports to ECL, ABCL, and CLISP
    have also been completed. 
Dave Cooper's avatar
Dave Cooper committed
85

Dave Cooper's avatar
Dave Cooper committed
86
 2. Quicklisp (available from http://www.quicklisp.org)
87

88 89
 To load the entire system, you can do it with:

90 91
  (ql:quickload :gendl)
  (gdl:initialize)
92 93


94 95 96 97 98 99 100
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).

Dave Cooper's avatar
Dave Cooper committed
101
Slime (Emacs Editor integration) is recommended for editing GDL
102
applications with Emacs.  Slime is available with:
103

Dave Cooper's avatar
Dave Cooper committed
104
   (ql:quickload :quicklisp-slime-helper)
105

Dave Cooper's avatar
Dave Cooper committed
106 107 108 109
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.
110 111


112
To help in understanding the role of each module, the overall Gendl
Dave Cooper's avatar
Dave Cooper committed
113
source architecture is partially described below.
114 115


116
Gendl source code Architecture:
117 118
=============================

119
Gendl is separated into layered components, some of which depend on
120
others. Some components also depend on third-party external libraries,
Dave Cooper's avatar
Dave Cooper committed
121
which are currently handled with the Quicklisp system.
122 123 124 125 126 127

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.

128
Including gdl-base, there are eight modules supported with Gendl:
129 130


Dave Cooper's avatar
Dave Cooper committed
131
 :gdl-base - (gdl/base/) Gendl language kernel.
132 133


Dave Cooper's avatar
Dave Cooper committed
134 135
 :gdl-cl-lite - (gdl/cl-lite/) Gendl system definitions and loading
      facility. Supplements our use of asdf and quicklisp.
136 137


Dave Cooper's avatar
Dave Cooper committed
138
 :gdl-regression - (gdl/regression) regression test utilities.
139 140


Dave Cooper's avatar
Dave Cooper committed
141 142
 :gdl-geom-base - (gdl/geom-base/) Built-in Gendl wireframe primtives
      and basic geometry/vector manipulation functions.
143 144


Dave Cooper's avatar
Dave Cooper committed
145 146 147
 :gdl-gwl - (gdl/gwl/) Generative Web Language, represent web pages
       using GDL objects, includes Ajax-based web interaction with
       your model.
148 149


Dave Cooper's avatar
Dave Cooper committed
150 151
 :gdl-gwl-graphics - (gdl/gwl-graphics/) include graphics rendered
      from geometry object in GWL web pages.
152 153


Dave Cooper's avatar
Dave Cooper committed
154 155
 :gdl-surf - (gdl/surf/) surface primitives without underlying
      geometry kernel middleware or implementation.
156 157


Dave Cooper's avatar
Dave Cooper committed
158
 :gdl-yadd - (gdl/apps/yadd/) self auto-documentation.
159 160 161 162