-
Notifications
You must be signed in to change notification settings - Fork 2
/
changelog.txt
504 lines (370 loc) · 15.7 KB
/
changelog.txt
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
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
CCBI changelog
--------------
2010-05-27, 2.1:
New fingerprints, from Rc/Funge-98:
ARRY
BOOL
FPRT
ICAL
IMTH
LONG
RAND
TRGR
Removed argument: --detect-infinity.
Added argument: --infinite-loop: actually infinite loop instead of erroring
out if an infinite loop is detected.
New statistics:
Maximum number of IPs live
Maximum number of items in a container (stack, deque, stack stack,
semantic stack)
Bugfixes in Funge-Space:
Tight bounds were calculated incorrectly if the hash table was in use.
AABBs that were loaded on top of the hash table did not subsume cells
from the hash table.
Infinite loop error messages pointed to the wrong coordinates if using
the hash table.
Skipping spaces in stringmode would infinite-loop in some cases when the
string crossed over from one AABB to another without any space in
between.
Mapping over ranges in Trefunge mode and contiguous range getting were
subtly broken in some cases, leading to misloaded files and other
strange bugs.
Bugfix in STRN.G:
If the string wrapped around, crossed some unallocated space,
expensive infinite loop detection was enabled, and the string actually
would have terminated, it was pushed incorrectly.
Bugfix in TRDS:
If an IP had stopped time and then jumped into the past, the fact that
it was the time stopper was forgotten.
Bugfixes in tracer:
Non-integer args weren't correctly errored out on.
When stdin was set to a string, the string wasn't owned, leading to it
possibly becoming overwritten later on.
--help and company are now output to stdout, not stderr.
A statically allocated array is now used for Funge-Space around the (0,0)
area: while a micro-optimization, this is a significant speedup for
programs that spend most of their time there (as most programs do).
IPs are now stored in a linked list, which speeds up forking noticeably.
... and other minor fixes and micro-optimizations.
2010-04-06, 2.0:
Unefunge-98, Trefunge-98, and Befunge-93 support.
Both 32-bit and 64-bit cell support.
New AABB-based Funge-Space implementation with massive (one or two orders
of magnitude, or a lot more) speed and memory use improvements.
New deque implementation and using C memory functions for the stack and
deque: more significant speed and memory use improvements.
New tracer with more convenient UI, multiple breakpoints support, etc.
New fingerprints, from Rc/Funge-98:
FING
REXP
New arguments:
--stats: statistics output.
--detect-infinity: detect some kinds of infinite loops.
--sandbox: sandbox mode, for safe execution.
Build system is now CMake-based. Allows versioning away pretty much all
features for which it is sensible to do so.
Rewrote y to make it a lot faster, especially when given a positive
argument.
Bugfix for i:
Initialize vb to va instead of 0 so that it gets set properly even if
the whole file is placed in negative Funge-Space.
Bugfix for k:
0k x executed the x.
Bugfix for y:
The tightest, not the loosest, bounds for Funge-Space are reported.
HRTI now accepts a resolution of zero.
TRDS now sets its earliest time lazily, to when it is first loaded, so that
we don't have to copy the whole Funge-Space for every program at startup.
... and plenty of other optimizations.
... and probably plenty of other fixes I've forgot to mention.
2009-03-28, 1.0.20
FILE's R now reflects on EOF.
Updated for Tango 0.99.8.
2009-01-10, 1.0.19
STRN's D now flushes on a newline.
Updated for DMD 1.0.39 and Tango SVN revision 4240.
2008-11-15, 1.0.18
The error message for OutOfMemoryExceptions is now printed properly, and
the exception type is printed as well.
HRTI now uses the StopWatch structure for timing where possible, resulting
in increased accuracy (on Windows, at least).
2008-09-21, 1.0.17
Fixed regression in TRDS.jump():
IP needs to be moved off the J for internal reasons which are unknown to
me, or problems occur.
Fixed TRDS-related regression:
Don't increment the tick count even once if time is stopped. (Time stop
was not detected until the next iteration, by which time the tick count
had already been incremented due to the 1.0.16 change of doing it after
execution.)
2008-09-16, 1.0.16
Bugfix in TRDS.jump():
Don't do ip.move() without setting needMove = false: would skip next
instruction if doing time jump without space jump.
The tick count is now updated after executing an instruction, not before.
Thus TRDS.max() now also pushes 0.
2008-09-13, 1.0.15
Bugfix in TIME.dayOfYear():
Was off by one: push 0, not 1, for January 1st.
2008-08-28, 1.0.14
Various changes to SOCK:
Bugfix: in accept(), do not overwrite the original socket. The fix in
1.0.11 was bogus.
Bugfix: set a dead socket to null, many instructions depended on this
but after 1.0.12 it was no longer happening.
The socket array size is fully minimized when a socket is killed.
R no longer pushes the received data size if it errored instead.
'o' no longer puts a newline after the last line in binary mode.
Updated fingerprints to current spec:
FRTH - P and L (PICK and ROLL) are now affected by MODE
SUBR - added A and O, general storage offset usage correction
Had accidentally left some debugging output in 3DSP, removed it.
2008-08-19, 1.0.13
New fingerprints, from RC/Funge-98:
3DSP
DATE
Updated fingerprints to current spec:
IMAP - can now map 0-255
INDV - V no longer uses old incorrect RC/Funge-98 vector ordering
Fixed a bug in main():
If an IP changed the next instruction of an IP to be executed later the
same tick to a space or semicolon, it would take one instead of zero
ticks to process.
Fixed a bug in getSysInfo():
y as a pick instruction didn't work correctly.
Added the new D instruction to FILE.
Removed PNTR (the alias of INDV), it wasn't meant to exist at all.
Verified all popVector and pushVector calls so that the storage offset is
correctly applied.
TIME now uses Gregorian.generic instead of toDate everywhere, to avoid
dependence on the OS's precision.
Updated for Tango 0.99.8.
Fix the typeof(type) issues for Posix as well.
2008-08-07, 1.0.12
Fixed a bug in SOCK.kill():
Do not delete the socket, as due to the change in 1.0.11 it may not be
allocated by new. (This segfaulted on Linux.)
2008-07-26, 1.0.11
Fixed a bug in SOCK.accept():
Do not overwrite the original socket.
2008-07-26, 1.0.10
k changes:
It's not meant to skip over its operand, according to the Cats-Eye
Befunge diagnostics as well as Chris Pressey (via Mike Riley).
It is meant to execute the next instruction found after reaching past
spaces and such, according to Chris Pressey (via Arvid Norlander).
2008-07-19, 1.0.9
Fixed a bug in rand_up_to():
Avoid dividing by zero when max is zero.
Fixed a bug in CPLI.cplxDiv():
Push two zeros when dividing by zero.
Fixed a bug in FILE.fopen():
Check for fopen failure before calling rewind, not after.
Fixed a bug in FILE.fgets():
Break out of reading loop on \r.
Fixed a bug in inputDecimal():
Overflow checking should now work properly for all inputs.
Now double the length of the sockets array in SOCK.create() instead of just
appending.
Rewrote half of PERL.eval().
Compiled against a version of Tango which fixes its Ticket 1053, making
PERL.eval() work properly on Windows even with quotes and/or backslashes in
the argument string.
Added note about PERL.eval()'s new behaviour to FINGERPRINT_INFO.
Added sanity checking for FPSP and FPDP unions.
Changed FILE to use a dynamic array for handles as FOPEN_MAX is unreliable.
Rewrote half of TURT, it should actually work now.
Child IPs now copy their loaded fingerprints from their parents, since most
other interpreters appear to do this.
DMD 1.033 support: fix a few typeof(type) issues.
Updated for Tango 0.99.7.
2008-04-02, 1.0.8
Fixed a bug in REFC.dereference():
Reflect on out-of-bounds array access, instead of crash.
2008-03-29, 1.0.7a
Fixed a bug in getSysInfo():
y acting as a pick instruction would clear the rest of the stack due to
unsigned integer overflow.
2008-03-29, 1.0.7
General cleanup here and there.
Fixed a bug in tumbler() in TOYS fingerprint:
^ and v were the wrong way around.
Optimizations:
Some general heap activity avoidance.
.rehash on Funge-Space only slowed things down.
Accessing Buffer.read directly and thus making fewer calls appears
to be faster than using TypedInput in loadIntoFungeSpace.
2008-03-14, 1.0.6b
Optimization:
MurmurHash 2.0 is now used for Funge-Space, which speeds things up
noticeably.
2008-03-14, 1.0.6a
Optimization:
I/O should now be somewhat faster: using a TypedOutput!(ubyte) or
TypedInput!(ubyte) where possible.
2008-03-13, 1.0.6
Output is now properly flushed when the program ends.
Removed the annoying pragma(msg) regarding environment variables.
environment() now returns a char[][], not a char[][char[]].
2008-03-13, 1.0.5
'y' now pushes the command line arguments in such a way that the first is
topmost, not lowest.
'k':
Now works for fingerprint instructions.
The multi-execute optimization is no longer performed for unimplemented
instructions.
Optimization:
A switch statement is used for executing ordinary (non-fingerprint)
instructions, instead of function pointers. This results in an
unfortunate import cycle, but resolving it would require shoving most of
Mini-Funge into the already large enough instructions.d, or something
equally silly.
2008-03-12, 1.0.4a
Optimization:
Fingerprints are now held in dynamic arrays, not associative arrays.
2008-03-12, 1.0.4
The TERM fingerprint is now disabled on Posix, as it never worked properly
and I can't make it work.
Added the --disable-fprints argument.
Optimizations:
Everything possible when fingerprints are disabled, of course.
Input and output are now properly buffered.
Funge-Space is rehashed after being created.
memcpy() is now used in Befunge98Space.copy and IP.copy.
2008-03-11, 1.0.3e
Optimizations:
Instructions are now held in an ordinary static array, not an
associative array.
scope(success) instead of scope(exit) in the code for the 'k'
instruction.
2008-03-10, 1.0.3d
Updated for compatibility with Tango 0.99.5 and x86-64, no functionality
change.
2008-01-22, 1.0.3c
Removed single dependency on tango.core.Array, no functionality change.
2007-12-29, 1.0.3b
Updated for compatibility with Tango 0.99.4. No version number change, as
functionality is the same.
2007-12-02, 1.0.3
Tracing now prints which IPs triggered the global or cell breakpoint, if
there is more than one IP alive.
Changes in Tango's formatting led to bugs in the TURT fingerprint output,
which have been fixed.
Fixed a bug in main:
First command line argument passed to Befunge program was the name of
the interpreter, not the name of the Befunge program.
2007-11-26, 1.0.2
Updated for compatibility with Tango revision 2935.
HRTI now works with microseconds as it should, I think S and G may have
used milliseconds before this.
Now compiling with -I.. so you don't have to mess with the directory
structure or with the -I yourself.
Now compiling with -version=Win32SansUnicode so that the DIRF fingerprint
doesn't require UTF-8 input, but uses the locale, just like everything else
and the spec specifies.
Fixed a bug in getSysInfo:
Null command line argument handling was borked.
2007-09-22, 1.0.1
Helptext now points to correct web site.
Added a note to IMPLEMENTATION about Mini-Funge library format.
Stdout is now flushed prior to emitting a warning to Stderr.
2007-09-20
Public release.
2007-07-22, 1.0.0
Renamed the project to CCBI (Conforming Concurrent Befunge-98 Interpreter).
Implemented '(' and ')' and the following fingerprints:
Official (Cat's-Eye Technologies):
HRTI
MODE
MODU
NULL
ORTH
REFC
ROMA
TOYS
TURT (no display, only saving to file)
RC/Funge-98 extensions:
BASE
CPLI
DIRF
EVAR
FILE
FPDP
FPSP
FRTH
FIXP
IIPC
IMAP
INDV aka PNTR
SOCK
STRN
SUBR
TERM
TIME
TRDS
Jesse van Herk's extensions to RC/Funge-98:
JSTR
NCRS
GLFunge98 extensions:
SCKE
Also added notes to FINGERPRINT_INFO about why FNGR, SGNL, and WIND aren't,
and will very unlikely ever be, implemented.
Implemented dynamic fingerprints (*.fl).
Added the --script argument.
Switched to the Tango library.
Random numbers are now evenly distributed, not just "rand() % range" which may cause
some numbers in range to be more common than others.
'&' and '~' now flush stdout prior to reading stdin: added note to IMPLEMENTATION.
The way '&' eats line breaks added to IMPLEMENTATION.
Note about '#' edge jumping added to IMPLEMENTATION.
Note about 'i' not copying spaces removed from IMPLEMENTATION: it's clearly in the spec.
I/O is no longer in UTF-8/16/32, after I read the spec more carefully: if the system stores characters
in one byte, like all the systems CCBI supports, each individual byte should be its own Funge-Space
cell. I read the spec as speaking of multibyte encodings when it meant multibyte systems.
Thus, input and output are both now character set independent. Removed UTF warnings from IMPLEMENTATION.
Internally, ubyte is used instead of [wd]char, since char is meant for UTF-8 code units.
This unfortunately results in a lot of type casting since all library string functions expect chars.
Changed the way wrapping around works to a more expensive, but spec-conforming method.
Ditto for 'k'.
Spaces and semicolons now execute in zero ticks instead of one.
Changed calls like instructions['>']() to goEast() to remove needless array lookup.
The array property of the stack is now private, and thus only used internally.
Added opApply() methods to take care of the few places where it was actually needed.
Massive re-moduling of the code, and removal of circular dependencies.
Rewrote the simple number pushing instructions: they used to check the value of the cell the IP was on
to figure out which number to push on the stack, which obviously failed when called from iterate().
Changed cell and cellidx from ptrdiff_t to int_fast32_t.
Changes in doTrace:
Tracing is done only once per tick, instead of once per IP per tick.
Since tracing can't be done more than once per tick, spaces and semicolons are no longer traced.
"a[rea]" doesn't append needless spaces to each line.
Added command "(c)break" to break on a given cell value.
Fixed a bug in duplicate():
ip.stack.push(ip.stack.top) doesn't work properly when the stack is empty.
Fixed a bug in main():
fungeArgs didn't contain the name of the program being run.
Fixed a bug in loadIntoFungeSpace():
When not in binary mode, only \n was considered a line break, not \r or \r\n.
Fixed bugs in doTrace():
Concurrent tracing wasn't working: tip could be null, the global breakpoint didn't work, and such.
Fixed a bug in beginBlock(), endBlock(), and stackUnderStack():
The stack's mode field wasn't properly transferred onto the new TOSS in all cases.
2007-01-04, 1.0.0 RC4
Changed for loops to use foreach_reverse where applicable.
Other minor code changes here and there.
2006-11-04, 1.0.0 RC3
Changed most imports to the new import types of DMD 0.163. Removed explicit private.
Fixed bugs in outputFile():
"Sub-rows" (see comment in dcbefunge.d) were not considered.
Addition to outputFile():
Line breaks are converted to the system's line separator.
Added notes about 'o' behaviour to the IMPLEMENTATION string.
2006-11-03, 1.0.0 RC2
Some changes to make it compile in DMD 0.172 under Linux.
Fixed a bug in myOpen():
New files couldn't be created, since it was checking for their existence even when writing.
Fixed bugs in outputFile():
Line breaks were "\r", "\n", or "\n\r". The last should have been "\r\n".
2006-06-12, 1.0.0 RC1
First changelog-worthy version.
Everything should work.