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

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