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

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