source: project/wiki/users/juergen-lorenz @ 37409

Last change on this file since 37409 was 37409, checked in by juergen, 17 months ago

juergen-lorenz updated

File size: 8.5 KB
Line 
1== Juergen Lorenz
2
3{{ju (at) jugilo (dot) de}}
4
5I am a mathematician and a member of the "small is beautiful" crowd. And R5RS-Scheme is the definite example, that a small language is possible which allows one to do almost everything with it. And that in a clear syntax -- or should I better say -- with almost no syntax at all? And it is a programmable programming language! You can always add new syntax to it.
6
7In my mind, Chicken is the best Scheme implementation. Its compiler compiles to C in the most ingenious way, it has the simplest interface to C, and it has a beautiful infrastructure, the eggs system, a helpful community and, and, and ...
8
9=== Chicken 5 Eggs
10
11==== [[/eggref/5/biglists|biglists]]
12
13an attempt to unify access to lists and lazy-lists, either finite or
14infinite.
15
16==== [[/eggref/5/bindings|bindings]]
17
18A light-weight alternative to the matchable egg, with many enhancements.
19
20A number of binding macros is provided, which can destructure arbitrary
21mixtures of lists, pseudolists, vectors and strings, as well as
22arbitrary sequence types, the client may add later. The most important
23one is bind, a variant of Common Lisp's destructuring-bind.
24
25==== [[/eggref/5/checks|checks]]
26
27Procedures and macros that help to check pre- and postconditions
28
29==== [[/eggref/5/continuations|continuations]]
30
31some additional interfaces to continuations
32
33==== [[/eggref/5/holes|holes]]
34
35Transform expressions with holes into procedures with the holes as
36argument names. Here, a hole is symbol, consisting of zero or more
37digits enclosed in bangs.
38
39==== [[/eggref/5/list-comprehensions|list-comprehensions]]
40
41Some list creating procedures, in particular a variant of
42Clojure's for macro
43
44==== [[/eggref/5/messages|messages]]
45
46An implementation of algebraic-types, abstract-types and object-types,
47based on messages, which are (functional) vectors tagged with a type
48keyword and a variant keyword.
49
50==== [[/eggref/5/simple-cells|simple-cells]]
51
52Another simple implementation of the cell datatype, a lightweight variant of
53boxes.
54
55==== [[/eggref/5/simple-exceptions|simple-exceptions]]
56
57An easy to use exception wrapper around chicken's condition system.
58
59==== [[/eggref/5/simple-loops|simple-loops]]
60
61some simple loop macros.
62
63==== [[/eggref/5/simple-tests|simple-tests]]
64
65Some simple macros and commands which help debugging and testing.
66
67=== Chicken 4 Eggs
68
69These eggs will no longer be maintained.
70Most of them will be ported to Chicken 5.
71
72==== [[/eggref/4/basic-macros|basic-macros]]
73
74Some macros which help to write procedural macros. For example,
75define-er-macro does the renaming and bind the destructuring
76automatically. bind and bind-case are simplyfied versions of the equally
77named macros in the bindings egg, which are sufficient for
78macro-writing.
79
80==== [[/eggref/4/procedural-macros|procedural-macros]]
81
82Some macros which help to write procedural macros. For example, a
83hygienic version of define-macro and a procedural variant of
84syntax-rules, called macro-rules, which is as easy to use as the latter
85but much more powerfull.
86
87==== [[/eggref/4/bindings|bindings]]
88
89A light-weight alternative to the matchable egg, with many enhancements.
90
91A number of binding macros is provided, which can destructure arbitrary
92mixtures of lists, pseudolists, vectors and strings, as well as
93arbitrary sequence types, the client may add later. The most important
94one is bind, a variant of Common Lisp's destructuring-bind.
95
96==== [[/eggref/4/datatypes|datatypes]]
97
98An implementation of concrete and abstract types, the former beeing
99discriminated variant records, as advocated by Friedman, Wand and Haynes
100in "Essentials of programming languages" and ported to Chicken by Felix
101Winkelmann. The latter are based on the former, but hide the variant
102constructors and export constructor and accessor procedures instead.
103A simple object system is also provided.
104
105==== [[/eggref/4/locals|locals]]
106
107Implementation of a local macro inspired by the equally named operation
108in ML.
109
110==== [[/eggref/4/holes|holes]]
111
112Transform expressions with holes into procedures with the holes as
113argument names. Here, a hole is symbol, consisting of zero or more
114digits enclosed in bangs.
115
116==== [[/eggref/4/list-comprehensions|list-comprehensions]]
117
118Some list creating procedures, in particular for and for*
119
120==== [[/eggref/4/anaphora|anaphora]]
121
122Anaphoric macros, which are unhygienic by design. Most of them insert
123the special identifier "it" behind the scene.
124
125==== [[/eggref/4/loops|loops]]
126
127Some simple loop macros.
128
129==== [[/eggref/4/tuples|tuples]]
130
131Something like immutable random-access vectors, with empty, couples and
132triples as special cases, and mutable singles as a possible replacement
133of boxes.
134
135==== [[/eggref/4/simple-cells|simple-cells]]
136
137Another simple implementation of the cell datatype, a lightweight variant of
138boxes.
139
140==== [[/eggref/4/typed-lists|typed-lists]]
141
142a functor implementation of typed and immutable lists and sets.
143
144==== [[/eggref/4/arrays|arrays]]
145
146An implementation of functional arrays and - as an application - of
147sets.
148
149==== [[/eggref/4/basic-sequences|basic-sequences]]
150
151basic sequence-routines, which are used in bindings and can be used for
152a full-flegded sequence package
153
154==== [[/eggref/4/generics|generics]]
155
156an implementation of generic functions, using selectors for dispatching
157and insertion.
158
159==== [[/eggref/4/messages|messages]]
160
161implements messages as specialized generic functions of arity one,
162possibly parametrized.
163
164==== [[/eggref/4/lazy-lists|lazy-lists]]
165
166lazy list implementation based on Moritz Heidkamp's lazy-seq. Contrary
167to Moritz' implementation, the lazy-list's length is stored in the
168datastructure, so that a distinction between finite and infinite lazy
169lists can be made.
170
171==== [[/eggref/4/treaps|treaps]]
172
173A functional interface to Oleg Kiselyov's and Ivan Raikov's treap egg.
174
175==== [[/eggref/4/skiplists|skiplists]]
176
177An alternative to balanced search-trees.
178
179==== [[/eggref/4/random-access-lists|random-access-lists]]
180
181combine the advantages of linked lists (fast insert and remove) and
182vectors (fast access).
183
184==== [[/eggref/4/simple-tests|simple-tests]]
185
186Some simple macros and commands which help debugging and testing.
187
188==== [[/eggref/4/continuations|continuations]]
189
190Syntactic sugar for Marc Feeley's continuation interface providing i.a.
191catch and throw
192
193==== [[/eggref/4/simple-exceptions|simple-exceptions]]
194
195An easy to use exception wrapper around chicken's condition system.
196
197==== [[/eggref/4/options|options]]
198
199A variant of ML's option datatype, implemented as a functor producing
200typed modules and an untyped module.
201
202==== [[/eggref/4/simple-contracts|simple-contracts]]
203
204Design by contract for procedures
205
206==== [[/eggref/4/yasos|yasos]]
207
208A Chicken port of Kenneth A. Dickey's "Yet another Scheme Object
209System".
210
211=== Obsolete eggs
212
213==== [[/eggref/4/multi-methods|multi-methods]]
214
215Implements a variant of generic functions, where arguments are checked
216against predicates to choose a matching procedure which is eventually
217invoked. A destinctive feature of this implementation is, that the
218client has complete control over the multi-methods state, a search tree,
219and can decide where to insert a procedure to be eventually invoked, so
220that more specific procedures are found before less specific ones.
221Hence, multi-methods can be used to implement OOP. But note, that
222dispatching is done on all arguments, not only the first one, as in
223traditional OOP-implementations.
224Deprecated, use generics instead.
225
226==== [[/eggref/4/cells|cells]]
227
228Simple implementation of the cell datatype, a lightweight variant of
229boxes.
230Deprecated, use simple-cells instead
231
232==== [[/eggref/4/list-bindings|list-bindings]]
233
234Restricting some macros of the bindings egg to nested list expressions
235and supplying define-macro as an application.
236Obsolete, use bindings instead!
237
238==== [[/eggref/4/er-macros|er-macros]]
239
240Explicit renaming macros made easy.
241Obsolete, use bindings instead!
242
243==== [[/eggref/4/ir-macros|ir-macros]]
244
245Implicit renaming macros made even easier.
246Obsolete, use bindings instead!
247
248==== [[/eggref/4/low-level-macros|low-level-macros]]
249
250Low level macros made easy.
251A merger of the two eggs er-macros and ir-macros.
252Obsolete, use bindings instead!
253
254==== [[/eggref/4/dbc|dbc]]
255
256An implementation of "Design by Contract", coined by Bertrand Meyer for his Eiffel language.
257Now obsolete, use simple-contracts instead
258
259==== [[/eggref/4/contracts|contracts]]
260
261My first implementation of "Design by Contract".
262Now obsolete, use dbc instead.
263
264=== Tutorials
265
266==== [[/explicit-renaming-macros|Explicit (and implicit) renaming macros made easy]]
267
268==== [[/iup-tutor|The Iup GUI toolkit]]
269
270==== [[/design-by-contract|Design by Contract]]
271
272==== [[/records-and-oop| Object Orientation and SRFI-99 records]]
Note: See TracBrowser for help on using the repository browser.