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

Last change on this file since 37293 was 37293, checked in by juergen, 3 years ago

juergen-lorenz updated

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