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
;;
Dave Cooper's avatar
Dave Cooper committed
7
8
9
10
;; Gendl 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.
11
12
13
14
15
16
17
18
19
20
21
22
;; 
;; 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