-
Notifications
You must be signed in to change notification settings - Fork 2
/
HISTORY
356 lines (227 loc) · 10.3 KB
/
HISTORY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
2018-12-05
Fix: APPLYing a function to more than CHUNK_SIZE (1024) arguments
would result in a core dump. (Not that doing this is a good idea,
but it should work none the less). The fix is SLOW. Be warned!
2018-11-24
Fix: DISPLAY, WRITE, and REPL output could not be interrupted
by pressing INTR. (s9.c)
2018-11-19
Exported tag() macro of S9core. (s9import.h)
Removed unused "Error" variable and misc. cosmetic changes.
(s9core.h)
2018-11-15
Removed 16-bit support. It was mostly a lie anyway. (s9core.h)
Applied various fixes to TROFF mode in EDOC. (prog/)
2018-11-14
Fix: EDOC generated index commands that were not contained in
separate lines in TROFF mode. (prog/)
Fix: C2HTML created spurious \fP in TROFF mode. (contrib/)
Fix: ptrdiff_t should be vlong on 64-bit Plan 9. (s9core.h)
2018-11-13
Fix: LOCATE-FILE did not decode leading ~ in path names properly.
(s9.scm)
Misc. code clean-up. (s9.c, s9core.*)
2018-11-12
Added S9core self-test to Plan 9 tests. (mkfile)
Fixed some minor bugs that kept S9 from compiling on Plan 9.
(s9core.h)
2018-11-11
Updated TROFF macro package for EDOC. (prog/)
Corrected LOCATE-FILE help page. (help/)
Fix: REVERSE! can no longer reverse immutable lists. (s9.c)
Removed left-over help page. (help/)
Added S9core self-test to tests. (Makefile)
S9core: adjusted size of internal GC protection stack, because
real_power() can recurse frequently. (Note: real_power() is not
used by S9fES). (s9core.c)
2018-11-09
Merged Linux/POSIX patches from Barak Pearlmutter's
downstream repository (http://github.com/barak/scheme9).
Thanks!
Disabled some system extension tests that failed on
some platforms, probably due to wrong use of SYS:FORK.
To be investigated! (util/systest.scm)
2018-11-08
Added TROFF output mode to EDOC. (prog/)
2018-11-06
Added TROFFIFY-CHAR function for escaping dangerous chars in
TROFF. (lib/)
2018-11-05
EVAL context is now saved per file in LOAD, instead of per
expression. (s9.c)
2018-11-04
S9core uses a more efficient way to GC-protect internal nodes
now, resulting in a 20% to 30% increase in real and bignum
performance. (s9core.c)
STRING-APPEND and VECTOR-APPEND now allocate only one single
fresh vector when appending multiple arguments. They basically
folded over their arguments before. (s9.c)
2018-11-03
The / procedure signals an error now when the divisor is 0.
Use CATCH-ERRORS to intercept this condition and deliver
some value. (s9.c)
(Expt 0 0.0) and (log x) for non-positive x now signal a range
error. (s9.scm)
Fixed some type mismatches in the 64-bit build.
Removed 64-bit build option from Makefile and README.
*** Note: S9 will still build on 64-bit systems, but will use
*** 32-bit structures internally. This should not make any
*** difference to anybody. If it does, let me know!
2018-11-02
Factored out MAKE-HELP-INDEX procedure. (lib/)
LIST->SET now uses a hash table when its argument exceeds
a certain size.
Misc. small changes to S9core. (s9core.*, s9import.h)
2018-11-01
Cleaned up help directory: removed left-over pages, linked
missing pages. Reorganized the help system structure so that
no links, symlinks, or duplicate files are needed. INDEX
files are now local to subdirectories of help/.
Retired FIND-HELP-PATH and FIND-HELP procedures from the
SYS-UNIX extension.
Retired S9SYMBOLS command. (prog/)
Added FIND-HELP-PAGE procedure, which returns the full path
of the help file describing a given syntactic keyword or
procedure (or #F if no such page exists). (lib/)
Added SCAN-HELP-PAGES procedure, which searches all help pages
for a given keyword. This procedure replaces FIND-HELP. Unlike
FIND-HELP it does not require the SYS-UNIX extension. (lib/)
Updated S9HELP command and added -c (check database) option.
(prog/)
-------------------------------------------------------------------------------
Major Change: argument passing to extension procedures
-------------------------------------------------------------------------------
2018-10-31
As of this release, arguments to extension procedures (extprocs)
are passed on the stack. In functions implementing extprocs, the
n'th argument is now retrieved by calling parg(n). The number
of arguments is returned by narg(). The extproc handler type
was changed from cell (*f)(cell x) to cell (*f)(void).
All extproc handlers need to be adapted to use the new calling
conventions. The csv, curses, and sys-unix extensions already
have been modified accordingly.
Rationale:
In previous versions of S9fES arguments were passed as lists.
This method was still used in S9 Reimagined when applying
extension procecures. However, this approach required to
convert arguments on the stack to lists before passing them
to extension procedures. This caused unnecessary consing.
2018-10-30
Retired Plan 9 system extension (ext/sys-plan9). Please see
https://github.com/bakul/s9fes for a more up to date version.
Note that S9fES will continue to compile and run on Plan 9,
but the stock version will no longer provide functions like
SYS:OPEN, SYS:BIND, etc. Use Bakul's version if you need
those!
Replaced symlinks in help/ with links (which will hopefully
extract to copies on non-Unix systems).
2018-10-29
Added bytecode disassembler. (lib/disassemble.scm)
Fixed a bug in the library test suite ("make libtest") that
would report a failed image load when upgrading to a new
version. (util/)
2018-10-28
Added system() function for Plan 9 to S9core. Thanks, Bakul!
Fix: PROCEDURE? returned #F for extension procedures. (s9.c)
Retired lib/catch.scm (moved from lib/ to attic/).
2018-10-27
Removed symbolic links from help/ directory, because some
operating systems do not have symlinks and tar(1) may report
errors in this case. The symlinks will be rebuild (or files
copied) during the build process. (help/)
Thanks, Bakul, for the suggestion!
Added S9:BYTECODE operator for accessing the bytecode of a
procedure. (s9.c)
Fix: aborting interpreter start-up when an image load fails.
2018-10-26
Installed patches for the Plan 9 build submitted by Bakul Shah
and McKay Marston. Thank you very much! (If it still does not
work, it's my fault alone!)
Fix: reference trace was in wrong order in error messages. (s9.c)
Fix: GC leak in the compiler. (s9.c)
Added CATCH-ERRORS form. (s9.c, s9.scm)
2018-10-25
Added CATCH and THROW procedures. (s9.c)
Error messages are now printed to stdout unless the interpreter
is run in quiet mode (which is implied when running programs in
batch mode). (s9.c)
Fix: SIGINT was caught in quiet mode. (s9.c)
Longjmp'ing out of a signal handler may cause portability issues,
even if POSIX allows it. Worked around it. (s9.c)
Thanks, Bakul Shah, for pointing this out!
util/fix-help-links is now called util/fix-links.sh (for Unix)
and util/fix-links.rc (for Plan 9). (util/)
2018-10-24
Forgot:
Policy change: image files are now loaded from the directory
specified in the S9FES_IMAGE_DIR environment variable or from
*one* directory specified in IMAGE_DIR (s9.c). When no image
can be found there, "./s9.image" will be tried. When this fails,
too, the interpreter will not start.
To load the library source code, "s9 -i -" *must* be used; this
is no longer a fallback.
Added S9FES-REIMAGINED and SCHEME-9-FROM-EMPTY-SPACE-REIMAGINED
feature ID's to COND-EXPAND, so you can distinguish between the
old and new S9 version. (lib/)
Added the *RELEASE-DATE* top-level variable that is bound to a
copy of the compiled-in RELEASE_DATE of the interpreter. (lib/)
Thanks for the idea, Peter!
-------------------------------------------------------------------------------
SCHEME 9 FROM EMPTY SPACE (REIMAGINED)
-------------------------------------------------------------------------------
2018-10-22
This is a complete rewrite of most of the S9fES interpreter
with the following highlights:
- the S9 system now uses a bytecode compiler and abstract
machine (earlier versions used a tree walker)
- the S9 interpreter now uses shallow binding instead of
deep binding. This means that
- symbol lookup is now O(1) (was O(n log n))
- closure creation is now O(n) (small n, was O(1))
- the compiler inlines most standard Scheme procedures and
lambda-lifts functions when called immediately. That is,
((lambda (x) y) z) will not create a closure (unless Y
uses SET!).
- the table of interned symbols is a hash table now instead
of a list.
- Lots of bugs were fixed in SYNTAX-RULES, but it is still
not fully hygienic and a second-class member of S9. Use
low-level macros instead!
New syntax:
- The IF* syntax is similar to IF:
(IF* <true-value> <alternative>) ==> <true-value>
(IF* #f <alternative>) ==> <alternative>
(IF* X Y) can be thought of as a very efficient version of
(let ((t x)) (if t t y))
It is used internally to implement (COND (X)) and OR.
New procedures:
- DUMP-IMAGE creates an image file
- QUIT exits the interpreter
- CURRENT-ERROR-PORT returns a port that is connected to stderr
- OPEN-APPEND-FILE is like OPEN-OUTPUT-FILE, but appends output
to the given file
- COMMAND-LINE returns the command line arguments passed to a
program (was: ARGV, still available).
- ENVIRONMENT-VARIABLE looks up an environment variable
(was: ENVIRON, still available)
- SYSTEM-COMMAND runs a shell commend (was: SYSTEM, still
available)
Minor changes:
- the "-f file" command line option is deprecated; use "file"
- strings can now contain \n (newline) escape sequences
- CALL/CC is working properly and passes all Petrofsky tests.
It is rather expensive, though!
- *LIBRARY-PATH* is now in list format (was a Unix PATH-style
string).
- *IMAGE-FILE* names the image file in use (or is set to #f).
- the initial image file is loaded from the directory specified
in the S9_IMAGE_DIR environment variable
- EVAL is now a single-argument function.
- GENSYM is now a function of no arguments.
- the STATS function no longer counts reduction steps, but does
count allocated vector cells.
- the BIT-OP function signals an error in case of an overflow or
wrong opcode instead of returning #F.
-------------------------------------------------------------------------------
The change log of S9fES (Reimagined) ends here.
For previous changes, see the file PREHISTORY.