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

Last change on this file since 32518 was 32518, checked in by juergen, 5 years ago

juergen-lorenz and records-and-oop updated

File size: 5.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=== Eggs
10
11==== [[/eggref/4/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
20As an application, macros are provided, which facilitate the writing of
21hygienic procedural macros, in particular a hygienic version of
22define-macro.
23
24==== [[/eggref/4/datatypes|datatypes]]
25
26An implementation of concrete and abstract types, the former beeing
27discriminated variant records, as advocated by Friedman, Wand and Haynes
28in "Essentials of programming languages" and ported to Chicken by Felix
29Winkelmann. The latter are based on the former, but hide the variant
30constructors and export constructor and accessor procedures instead.
31A simple object system is also provided.
32
33==== [[/eggref/4/multi-methods|multi-methods]]
34
35Implements a variant of generic functions, where arguments are checked
36against predicates to choose a matching procedure which is eventually
37invoked. A destinctive feature of this implementation is, that the
38client has complete control over the multi-methods state, a search tree,
39and can decide where to insert a procedure to be eventually invoked, so
40that more specific procedures are found before less specific ones.
41Hence, multi-methods can be used to implement OOP. But note, that
42dispatching is done on all arguments, not only the first one, as in
43traditional OOP-implementations.
44
45==== [[/eggref/4/anaphora|anaphora]]
46
47Anaphoric macros, which are unhygienic by design. Most of them insert
48the special identifier "it" behind the scene.
49
50==== [[/eggref/4/loops|loops]]
51
52Some simple loop macros.
53
54==== [[/eggref/4/tuples|tuples]]
55
56Something like immutable random-access vectors, with empty, couples and
57triples as special cases, and mutable singles as a possible replacement
58of boxes.
59
60==== [[/eggref/4/cells|cells]]
61
62Simple implementation of the cell datatype, a lightweight variant of
63boxes.
64
65==== [[/eggref/4/typed-lists|typed-lists]]
66
67a functor implementation of typed and immutable lists and sets.
68
69==== [[/eggref/4/arrays|arrays]]
70
71An implementation of functional arrays and - as an application - of
72sets.
73
74==== [[/eggref/4/lazy-lists|lazy-lists]]
75
76lazy list implementation based on Moritz Heidkamp's lazy-seq. Contrary
77to Moritz' implementation, the lazy-list's length is stored in the
78datastructure, so that a distinction between finite and infinite lazy
79lists can be made.
80
81==== [[/eggref/4/treaps|treaps]]
82
83A functional interface to Oleg Kiselyov's and Ivan Raikov's treap egg.
84
85==== [[/eggref/4/skiplists|skiplists]]
86
87An alternative to balanced search-trees.
88
89==== [[/eggref/4/random-access-lists|random-access-lists]]
90
91combine the advantages of linked lists (fast insert and remove) and
92vectors (fast access).
93
94==== [[/eggref/4/simple-tests|simple-tests]]
95
96Some simple macros and commands which help debugging and testing.
97
98==== [[/eggref/4/continuations|continuations]]
99
100Syntactic sugar for Marc Feeley's continuation interface providing i.a.
101catch and throw
102
103==== [[/eggref/4/simple-exceptions|simple-exceptions]]
104
105An easy to use exception wrapper around chicken's condition system.
106
107==== [[/eggref/4/options|options]]
108
109A variant of ML's option datatype, implemented as a functor producing
110typed modules and an untyped module.
111
112==== [[/eggref/4/dbc|dbc]]
113
114An implementation of "Design by Contract", coined by Bertrand Meyer for his Eiffel language.
115
116==== [[/eggref/4/yasos|yasos]]
117
118A Chicken port of Kenneth A. Dickey's "Yet another Scheme Object
119System".
120
121=== Obsolete eggs
122
123==== [[/eggref/4/list-bindings|list-bindings]]
124
125Restricting some macros of the bindings egg to nested list expressions
126and supplying define-macro as an application.
127Obsolete, use bindings instead!
128
129==== [[/eggref/4/er-macros|er-macros]]
130
131Explicit renaming macros made easy.
132Obsolete, use bindings instead!
133
134==== [[/eggref/4/ir-macros|ir-macros]]
135
136Implicit renaming macros made even easier.
137Obsolete, use bindings instead!
138
139==== [[/eggref/4/low-level-macros|low-level-macros]]
140
141Low level macros made easy.
142A merger of the two eggs er-macros and ir-macros.
143Obsolete, use bindings instead!
144
145==== [[/eggref/4/contracts|contracts]]
146
147My first implementation of "Design by Contract".
148Now obsolete, use dbc instead.
149
150=== Tutorials
151
152==== [[/explicit-renaming-macros|Explicit (and implicit) renaming macros made easy]]
153
154==== [[/iup-tutor|The Iup GUI toolkit]]
155
156==== [[/design-by-contract|Design by Contract]]
157
158==== [[/records-and-oop| Object Orientation and SRFI-99 records]]
Note: See TracBrowser for help on using the repository browser.