forked from bonzini/smalltalk
/
NEWS
2818 lines (1856 loc) · 104 KB
/
NEWS
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
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
List of user-visible changes in GNU Smalltalk
NEWS FROM 3.1 TO 3.1.1
o Fixes in garbage collection heuristics provide improved performance on
programs allocating many long-lived objects. Contributed by Derek Zhou.
o New FilePath methods #owner:, #group:, #owner:group: allow setting
a file's owner and group.
o New ProfilerTools package for callgraph profiling of Smalltalk programs.
A companion gst-profile tool will create profiles in callgrind-compatible
format. Contributed by Derek Zhou.
o Process-local variables are now stored in an IdentityDictionary rather
than a LookupTable.
o Sending mode, file time and owner setters to a recursive directory
decorator (such as `Directory working all') sets the mode/time/owner
on all files under the path.
o The Continuations package provides delimited continuations via
BlockClosure>>#shift and BlockClosure>>#reset. Both methods accept
a block (1-arg for shift, 0-arg for reset).
o The semantics of recursive directory descent were adjusted as follows:
1) the '.' and '..' directory entries are not passed; 2) for #do:, the
file is passed directly (3.1 used to pass another recursive decorator);
3) before the descent starts, the directory itself is passed to the block.
-----------------------------------------------------------------------------
NEWS FROM 3.0.5 TO 3.1
o BlockClosure methods #cull:, #cull:cull:, #cull:cull:cull:
evaluate blocks removing parameters that are not accepted by
the block. Thanks to this new functionality, the parameter to
#on:do: and #ifNotNil: can be omitted.
o Collections and Streams have a common superclass, Iterable. The
user-visible aspect of this is that Streams now enjoy a wider
range of iteration methods, such as #anySatisfy:, #detect:
and #count:.
o CObjects can be backed with garbage-collected (as opposed to
heap-allocated) storage. Using this is not always possible, for
example for CObjects stored by external libraries or passed to
functions that call back to Smalltalk or otherwise may cause garbage
collections. If it is, however, it is easier to use, faster and
more predictable than finalization. As an added benefit,
garbage-collected CObjects accesses are bounds-checked.
Garbage-collected CObjects are created by sending #gcNew instead
of #new.
o Error backtraces include line numbers and filenames.
o FileDescriptor and FileStream raise an exception if #next: cannot
return the given number of bytes.
o FileDescriptor is now a subclass of Stream.
o Functions gst_async_signal and gst_async_signal_and_unregister are
now thread-safe, *not* async-signal-safe. To trap signals from
Smalltalk, you have to use ProcessorScheduler>>#signal:onInterrupt:.
o Halt is now a subclass of Exception (rather than Error).
o If possible, the installation is made relocatable. To this end,
the following conditions should be satisfied: 1) the exec-prefix
and prefix should be identical; 2) the installation should reside
entirely within the prefix; 3) on Windows, the bindir and libdir
should be the same or shared libraries should be disabled; 4) if
neither on Windows nor under a glibc-based system, shared libraries
should be disabled.
If the above conditions are satisfied, and you want a relocatable
install, it is suggested that you configure with a non-existent
prefix such as "--prefix=/nonexistent". To move the installation,
you can install into a staging area and move it from there.
./configure --prefix=/nonexistent
make
make install DESTDIR=`pwd`
(cd nonexistent && tar cvf - .) | (cd $HOME && tar xvf -)
(cd nonexistent && tar cvf - .) | (cd /usr/local && tar xvf -)
In order to support relocatable installation, libgst clients should
call gst_set_executable_path *before* gst_initialize. Failure to
do so won't cause any problem, except that relocatable installation
will be disabled and the program will look for its files only in
the configured prefix.
o It is possible to create C call-outs that are not attached
to a function that the VM knows about, using the method
CCallable class>>#for:returning:withArgs:. The returned object
can then be used to create CompiledMethods using
CompiledMethod class>>#cCall:numArgs:attributes:.
The address however is reset to NULL on image restart and it is up to
the user to reinitialize it. You can also subclass CCallable and
override the #link method (the existing CFunctionDescriptor class
is now implemented on top of this).
o ObjectDumper now accepts normal String streams. The class ByteStream
has been removed.
o ObjectMemory>>#snapshot and ObjectMemory>>#snapshot: return false in
the instance of GNU Smalltalk that produced the snapshot, and
true in the instance of GNU Smalltalk that was restored from the
snapshot. Note that this does not apply to CallinProcesses, since
those are stopped in saved images.
o RegexResults method #ifMatched:ifNotMatched:, and the similar methods,
accept either zero or one-argument blocks. In 3.0, #ifMatched: accepted
a one-argument block, while #ifNotMatched: accepted a zero-argument block.
o Streams have a set of new methods that allow to eliminate useless copies
when moving data from stream to stream, as well as to eliminate useless
creation of collections to store the data read from a stream. Besides
the standard methods #next, #nextPut: and #atEnd, two more methods can be
implemented by Stream subclasses in order to achieve better performance
on block transfers, namely #nextAvailable:into:startingAt:,
#nextAvailable:putAllOn: and #next:putAll:startingAt:.
Another set of methods is placed in Stream; they all use the above
three methods and you should not need to override them. These are
#next:into:startingAt:, #next:putAllOn:, #nextAvailable:,
#nextAvailable:putAllOn:, #nextAvailablePutAllOn:.
In addition, #nextHunk was removed. Applications can use #nextAvailable:
or, better, should be rewritten to use new stream-to-stream protocol
such as #nextAvailablePutAllOn:.
o The VFS subsystem was rewritten. Virtual filesystems are now
accessible via special methods on File (such as File>>#zip,
for example "(File name: 'abc.zip') zip") and not anymore with
special filenames that could conflict with real files.
This caused a few incompatible changes. The most important are:
1) methods like `File image' and `Directory kernel' return a File
object, not a String; 2) Directory objects are not created anymore
and instead File objects also support the Directory protocol;
3) Directory>>#do: passes File objects rather than file names to the
block; 4) Directory>>#contents is now called Directory>>#entryNames.
o The order for searching pool dictionaries changed. The new order,
codenamed "TwistedPools", builds on three ideas: 1) the environment
of a class always has lower priority than the imports, so the
environment is always excluded from the imports if the environment
is a superspace of the imports; 2) apart from this, the imports are
visited in topological order, so that if two imports have a superspace
in common, the imports are always visited before the superspace; 3)
each class in the inheritance order is visited separately, so the
imports of a superclass have lower priority than the environment of
the subclass.
At the same time, support for imports were added to namespaces (via the
<import: ...> pragma, as for classes). Unlike the superspace, imports
are not made visible through #at:.
o The semantics of #on:do: were changed: executing off the end of an
exception handler will always return from the associated #on:do:.
Older versions of GNU Smalltalk either returned or resumed depending
on the resumability of the exception.
o The source code for methods loaded from Streams that are not FileStreams
is stored directly in the image.
o New tool gst-remote allows remote control of a GNU Smalltalk VM
via a TCP socket.
o Processes support thread-local variables, which are accessed through
a special dictionary returned by ProcessorScheduler>>#processEnvironment.
o Packages can specify start/stop scripts. Start scripts can be activated
with gst-load, while both start and stop scripts are supported by
gst-remote.
o The sockets package (and the namespace it is installed in) was renamed
from TCP to Sockets. While the old namespace is still available
for backwards compatibility, it is suggested to use the Sockets
namespace instead.
o Unbuffered sockets available from class Sockets.StreamSocket.
New goodies:
o IPv6 and AF_UNIX sockets (in the Sockets package).
o Bindings to Cairo and LibSDL provided by Michael Bridgen, Tony
Garnock-Jones and Brad Watson.
o Bindings to OpenGL and GLUT contributed by Olivier Blanc.
o DBI supports querying tables for schema information, and is integrated
with the "ROE" (Relational Object Expression) package. ROE support is
present for all back-ends (MySQL, PostgreSQL, SQLite).
o Magritte object-model description framework.
o Seaside application server/web framework.
o Swazoo web server.
-----------------------------------------------------------------------------
NEWS FROM 3.0.4 TO 3.0.5
o Added the following methods
Character class>>#ff
CObject>>#isNull
Collection>>#includesAnyOf:
Duration>>#readFrom:
Number>>#readFrom:radix:
Object>>#isCObject
Package>>#/
SequenceableCollection>>#copyWithFirst:
SequenceableCollection>>#swap:with:
UndefinedObject>>#isNull
WeakArray class>>#new
o Bugfixes for gst-convert.
o CallinProcesses can be terminated with Process>>#terminate.
o DBI connection strings accept db/dbname/database, and host/hostname,
as synonyms.
o Fixed rare garbage collection bugs.
o Fixed rounding error in Float>>#floorLog: and Float>>#ceilingLog:.
o gst-doc implements a -F option to choose output format. HTML and
Texinfo are supported (contributed by Thomas Girard).
o GTK+ bindings updated to support changes in 2.12.
o #storeOn: fixed for classes in namespaces other than Smalltalk.
-------------------------------------------------------------------------------
NEWS FROM 3.0.3 TO 3.0.4
o A few operations on collections have been sped up.
o Code without a space between a binary minus and a number, such as "a-2",
is parsed correctly. As a side effect of this change, the sign of a number
with an explicit radix (such as "16r10") can be placed before the radix
too: both -16r10 and 16r-10 are accepted.
o Fixed bug that caused some children not to be reaped.
o Fixed bug when reading from a FIFO file and the writing side closed the
FIFO before GNU Smalltalk started reading it.
o Fixed CByte to actually work.
o Fixed corner case of nested exception handlers.
o Fixed directory navigation on ZIP archives (when using the VFSAddOns
package).
o Fixed HTTP GETs that caused a redirect and had a query.
o Fixed leakage of file descriptors on ZIP archives (when *not* using the
VFSAddOns package).
o Fixed MappedCollection>>#keysDo:.
o Fixed rare bug in the bytecode optimizer that caused invalid
(non-verifiable) or even incorrect bytecode to be generated.
o Fixed Stream>>#do: and Stream>>#linesDo:, which would terminate in
advance if *another* stream was read past its end during the argument
block's execution.
o Fixed the tools to work on Windows even if invoked with an explicit
extension for the executable.
o gst-convert is now really quiet if invoked with --quiet.
o Moved SequenceableCollection>>#join to Collection.
o Removed bashisms from installed shell scripts.
o Sockets use the close-on-exec option (see fcntl(2) for more information).
o Sport fixes: fixed SpFilename>>#fail (did not work) and
SpSocket>>#readInto:startingAt:for: (should only do one I/O operation,
possibly returning a partially filled buffer).
o UNC paths are parsed correctly by File.
-----------------------------------------------------------------------------
NEWS FROM 3.0.2 TO 3.0.3
o File>>#withReadStreamDo: and File>>#withWriteStreamDo: now return
the result of evaluating their argument, instead of returning the
File object.
o Fixed command-line option -S to actually work.
o Fixed GC bugs in SQLite bindings. Also, the bindings could sometimes
call sqlite3_finalize twice.
o Fixed rare finalization bug.
o Fixes to the JIT compiler.
o Generational GC is now disabled on Alpha.
o More fixes for MinGW.
o New command-line option -i (--rebuild-image) for gst-load.
o New methods:
Number>>#asCNumber
String>>allOccurrencesOfRegex:do:
String>>allOccurrencesOfRegex:from:to:do:
TCP.AbstractSocket>>#canRead
TCP.AbstractSocket>>#canWrite
TCP.AbstractSocket>>#ensureReadable
TCP.AbstractSocket>>#ensureWriteable
o The callback for the #returnFromSnapshot event is executed as a
high-priority process. While relatively invasive, this change was
needed to fix crashes when reloading images that used C bindings
extensively.
o A system-installed libffi can be used. The included libffi has been
upgraded to version 3.0.4.
o URLs can be passed to FileDescriptor class>>#open:mode:ifFail:.
Thanks to everyone who reported bugs and/or provided fixes that went
into this release, including Stephen Compall, Thomas Girard, Tim Kack,
Cesar Rabak.
-----------------------------------------------------------------------------
NEWS FROM 3.0.1 TO 3.0.2
o Fixed bugs in floating-point I/O.
o Fixed bugs in comparisons between ScaledDecimals and Integers.
o Fixes for MinGW.
o Fixes to the Emacs modes.
o Improved GNUPlot bindings (support for histograms).
o Improved SqueakParser.
o Number>>#readFrom: will return floating-point numbers, not fractions.
o New methods:
AbstractSocket>>#isPeerAlive
CharacterArray>>#endsWith:
Collection>>#count:
Collection>>#gather:
Collection>>#noneSatisfy:
Date>>#-
DateTime>>#date:time:
DateTime>>#date:time:offset:
Dictionary>>#associations
Message>>#selector:argument:
Number>>#to:collect:
Number>>#to:by:collect:
SequenceableCollection>>#copyAfter:
SequenceableCollection>>#copyAfterLast:
SequenceableCollection>>#copyUpToLast:
SequenceableCollection>>#identityIndexOfLast:ifAbsent:
SequenceableCollection>>#indexOfLast:ifAbsent:
SequenceableCollection>>#sort
SequenceableCollection>>#sortBy:
SequenceableCollection>>#with: (also #with:#with: etc.)
Stream>>#with: (also #with:#with: etc.)
Time>>#addSeconds:
Time>>#midnight
o Regex is now a subclass of Object.
o SQLite bindings return a different Row object for each #next call
to a ResultSet.
-----------------------------------------------------------------------------
NEWS FROM 3.0 TO 3.0.1
o `gst-package --list-files' emits file paths relative from the current
directory. The --destdir and -t options are rejected. --list-files
supports options --load and --test.
o The documentation for a package can now be built even if the corresponding
.star file is not installed. Since documentation is part of the tarball,
this problem with 3.0 was actually only visible if you modified packages
for which you lacked the support libraries in /usr/lib (e.g. Tcl/Tk for
package BloxTK).
o Added SequenceableCollection>>#atRandom and String>>#allOccurrencesOfRegex:
o Eliminated possible infinite loop in CompiledCode>>#hash.
o Fixed crash on LargeInteger>>#divExact: for huge numerator and small
denominator.
o Fixed ping-pong between two sizes (continuously growing and shrinking) in
OrderedCollection.
o Fixed undeclared variable PackageNotAvailable in the default image.
o Fixed Symbol>>#numArgs for methods starting with an underscore.
o Fixed problems with substitution of regexes that match the empty string.
o Fixed problems with very short delays.
o Fixed segmentation violation when gethostbyname returned NULL.
o Test floatmath.st is XFAILed on alpha due to kernel bug 9751.
-----------------------------------------------------------------------------
NEWS FROM 2.3.6 TO 3.0
Important changes:
o A completely new syntax for defining classes is now present. This is
detailed in the manual (see the tutorial section) and the entire
source code of the system uses the new syntax.
o A different startup sequence is used which improves the possibility to
customize GNU Smalltalk, both site-wide and per-user. The details are
in the manual, the main changes are these: the `~/.stinit' and `~/.stpre'
files are now named `~/.st/init.st' and `~/.st/pre.st'; files requested
with the `-K' command-line option are sought for in the `~/.st' directory
too; kernel files may be overridden by placing them in
`~/.st/kernel'; a site-wide customization file can be placed in
`/usr/local/share/smalltalk/site-pre.st'.
The kernel path is stored in the image and not changed when the image
is loaded. In addition, `Directory systemKernel' and `Directory
localKernel' are not used anymore, and just return the same as
`Directory kernel'.
Finally, Smalltalk programs have access to the aforementioned `~`/.st'
directory as `Directory userKernel' (name subject to change). A
`packages.xml' file, as well as `.star' files (see later) can be put
there.
o Several classes not meant to be accessed by the user have been moved to
an internal Kernel namespace. This also removes them from the automatically
generated documentation.
o GNU Smalltalk now needs InfoZIP to be installed on the machine where
it is compiled, in order to use the new single-file package facility.
In the future, this dependency may be removed.
o The tool for automatic documentation generator, that has been used by
the GNU Smalltalk distribution for a long time, is now installed as gst-doc.
Backwards-incompatible changes:
o If you want to return a specific CObject class from a C call-out,
it is suggested that you stop using "returning: ClassName type", as in
<cCall: 'dupwin' returning: NCWindow type args: #(#self )>!
and instead use
<cCall: 'dupwin' returning: #{NCWindow} args: #(#self )>!
^^^^^^^^^^^
The source code conversion tool might silently produce an incorrect
output if you use the former syntax.
o The ABI for external usage has changed. libgst.a does not know anymore
how to parse options, but exports functions to achieve the same effect
as options.
o The #writeStream and #streamContents: method were moved down from
SequenceableCollection to ArrayedCollection, since they did not really
work on variable-sized collections such as OrderedCollections.
o The database access library has been replaced by a new DBI-like library,
contributed by Mike Anderson, with bindings to PostgreSQL (also contributed
by Mike), SQLite (by Daniele Sciascia) and MySQL.
o In general, GNU Smalltalk is able to load files with the old syntax.
In some cases, however, it will be necessary to either convert them
using the gst-convert tool, or load the Parser package before them.
This is the case if you get a "not yet implemented" error while loading
the files.
Packages improvements:
o All packages in the distribution are now installed in the new ".star"
format (for SmallTalk ARchive).
".star" files include at the top a package.xml file (whose format
is the same as the <package> tag of packages.xml). The name of
".star" file should be the same as the name of the package if the
package.xml file has a <name> tag.
o In install mode, gst-package automatically creates a ".star" file.
gst-package also accepts ".star" files on the command line; in this case,
install mode will simply copy the file instead of rebuilding it from
scratch.
o gst-package supports preparing a standard skeleton for package tarballs,
using the --prepare option.
o Packages can specify a "testing-only" subpackage that is loaded when
running tests (e.g. with "gst-load --test" or "gst-sunit --package"),
but not when loading the package normally. This is done with a <test>
tag nested into <package>.
Other major changes:
o Added #from: to Collection, which constructs an instance of the class
based on a conveniently specified Array. This allows one to construct
Dictionaries or LookupTables using
Dictionary from: { 1->2. 3->4 }
Another methods meant to be used with the { ... } syntax is #join.
For example
{ 'hello'. a. '!' } join
returns a string and is the same as using #, repeatedly, but is more
efficient.
o All collection classes support #readStream, though the default
implementation (which uses generators) could be slow.
o Continuations and generators have moved to the base image. More complex
examples of continuations still reside in the Continuations package.
o Directory entries are passed to #allFilesMatching:do:'s block argument
if they match aPattern. As before, the function descends in all the
directories, even those that do not match aPattern.
o Evaluated code now puts undeclared variables in a private namespace (so
that you do not have to declare temporaries) and defers the resolution
of undefined variable bindings until the time of their first access.
Unfortunately, this slows down evaluated code noticeably; you can get
back the performance by putting code in a method or an Eval (in the
latter case, you will have to declare temporaries explicitly, or the
code will still use the slower deferred variable binding).
o Flushing a socket tries to push data all the way down to the network.
This usually removes the need for TCP_NODELAY option. If you have
applications that want to use #flush to send data to the OS, but
not to the network, we're all ears.
o Image load uses copy-on-write memory mapped files. This means that, as
long as a loaded object is not touched, the operating system will map
it to the same physical memory, for different copies of the GNU Smalltalk
virtual machine that loaded the same image.
o Processes that are garbage collected before they terminate execution (e.g.
because they are waiting on a semaphore that is also garbage collected)
are appropriately terminated.
o Saving the image breaks hard links. This was done to work around a
Linux kernel bug, and might change in future versions.
o Since they are not portable outside Unix systems, the `archive' virtual
filesystems (deb, lslR, mailfs, patchfs, uar, urar, uzoo, ulha, ucpio, utar)
are now available only if the VFSAddOns package is loaded. Without the
package, only #uzip is available and it will only support extracting from
ZIP files.
o Startup time and quit time were improved widely (the time for running
a simple "Hello, World" program is about one fifth of 2.3.x).
o SUnit scripts can declare variables (using a "variable=value" syntax)
that can be accessed from within a testsuite.
o The "<category: 'bar'>" pragma can be used to set the category
of a method.
o The graphical browser can now be started just by typing "gst-blox".
o The image is now installed in /usr/local/var/lib/smalltalk (which in
most distributions will map to /var/lib/smalltalk).
o The MySQL driver was updated to support MySQL 4.x authentication.
Tests can be run by configuring with --enable-mysql-tests=USER:PASSWORD:DB
(the given user, password and database should already exists when
`make check' is run; the default is "root:root:test").
o The XML package has been split in five smaller packages, XML-SAXDriver,
XML-DOM, XML-SAXParser, XML-NodeBuilder and XML-XMLParser. The previous
name XML can still be used. In the future it may load a different but
compatible (e.g. Expat-based) parser.
o When declaring a C function, the #returning: argument now supports
specifying CPtr and CArray types, the same way it is done in CStruct
and CUnion declarations. For example, since you can specify an "int *"
as "#{CInt}", an "int **" (pointer to pointer to Integer, i.e. pointer
to CInt) would be written "#(#ptr #{CInt})".
Conversion from Array to CType is generally available using the
CType class>>#from: method.
o The zlib bindings' WriteStream decorator supports partial flushing.
Class PipeStream is distributed independently as it is not used anymore
by the zlib bindings.
New goodies:
o A new package DebugTools provides a generic Debugger class that can
be used to control an inferior Smalltalk process. It is used by the
textual MiniDebugger as well as the debugger that is part of the GUI.
o Complex numbers support added (package Complex).
o GNUPlot bindings
o JSON reader/writer contributed by Robin Redeker.
o MD5 packages renamed to Digest, SHA1 support added.
o New DBI-like library replacing the old one, contributed by Mike Anderson.
-----------------------------------------------------------------------------
NEWS FROM 2.3.5 TO 2.3.6
o Added #% as a shortcut for CharacterArray>>#bindWithArguments:.
o Added #allButFirst, #allButFirst:, #allButLast, #allButLast:, #atAll:,
#removeAllSuchThat: to Collection.
o Added #join to SequenceableCollection.
o Added symbolic link creation to File.
o A race condition was fixed where a file handler was resurrected and
another object inside it had already been finalized.
o Pipes use OS pipes or socketpairs instead of a pseudo-tty.
o Fixed bitrot in the debugger.
o Fixed bug where ~= was computed incorrectly as = (e.g. 3 ~= 3.0e).
o Fixed bug with growing of the Undeclared dictionary.
o Fixed many minor bugs.
o Fixed GC bug that could cause crashes if two GCs happened at particularly
unlucky spots.
o Fixes to File and Directory for Windows.
o Fixes to MIME message parsing, UTF-7 encoding and XPath.
o VariableBinding objects were made read-only when used as literals.
-----------------------------------------------------------------------------
NEWS FROM 2.3.4 TO 2.3.5
o Added more examples of continuations.
o Fixed a floating-point accuracy problem in the test suite.
o Fixed a 64-bit cleanliness problem in the GDBM bindings.
o Generational GC enabled on x86_64.
o Support for writing a block with arguments and no statements
as [ :a :b ] in addition to [ :a :b | ].
o The StreamFilter.st example, which provided lookahead, filtering,
concatenation and other kinds of manipulation for Streams, has been
promoted into the default image.
-----------------------------------------------------------------------------
NEWS FROM 2.3.3 TO 2.3.4
o Fixed bug in LargeInteger division on systems not equipped with GMP.
o Fixed bug in socket #nextHunk implementation, which lost the first
or second byte in the input buffer.
o Fixed paths in the image when "make DESTDIR" was used.
o Fixed implementation of Dictionary>>#addAll:, and fixed Integer>>#binomial:
when the argument is 0 or self.
o Fixed various minor bugs and imprecisions in the documentation.
o Improvements to the ancillary scripts gst-load and gst-sunit. In
particular, a package can describe the classes that constitute its
testsuite, and gst-sunit allows to quickly run the testsuite for a
package.
o Improvements to the test suite. Several of the modules included with
GNU Smalltalk are tested. The testsuite is now written using Autotest.
o Installed binaries do not require the Bourne shell anymore.
o Some libffi files (for IA64 and PA) were missing from the distribution.
o Upgraded libsigsegv, for improved Mac OS X on Intel support
o zlib bindings provided in package ZLib.
-----------------------------------------------------------------------------
NEWS FROM 2.3.2 TO 2.3.3
o Introduced the --with-imagedir configure option to specify the directory
used for the image.
o The manual was not properly generated in version 2.3.2.
o Removed text relocations from the virtual machine's shared library.
-----------------------------------------------------------------------------
NEWS FROM 2.3.1 TO 2.3.2
o #copyFrom:to: is uniformly 0-based for all Streams (unlike in Collections),
because a Stream has 0-based #position and #position: methods.
o Fixed many floating point rounding bugs in LargeIntegers and Fractions,
thanks to Nicolas Cellier.
-----------------------------------------------------------------------------
NEWS FROM 2.3 TO 2.3.1
o configure does not lock up when the system emacs is XEmacs and does not
include both the comint package and the package's source code.
o Fixed a garbage collection bug that typically occurred when installing
GNU Smalltalk, or when launching the installed image.
o gst-package honors the INSTALL command found by configure.
o gst-config does not "forget" to prefix the library directories with -L.
o Segmentation violations on large integer operations (on 64-bit hosts)
were fixed.
-----------------------------------------------------------------------------
NEWS FROM 2.2 TO 2.3
IMPORTANT: GNU Smalltalk now adds an explicit exception to the GNU GPL
license, allowing the programs running under the virtual machine to use
a GPL-incompatible license. This exception is used both by the
virtual machine and by the library bindings included in GNU Smalltalk.
This clears gray areas when a Smalltalk program is using functions
in the external library bindings via dynamic linking and the foreign
function call interface (C call-outs).
o C call-outs returning #void now return self rather than nil.
Performance of code heavily using C call-outs has improved.
o FileStreams can now use pwrite for more efficient operation on files
opened for read/write, and will do many less gratuitous lseek
operations. pread will also be used by FileStream>>#copyFrom:to:.
The number of system calls issued when generating the documentation,
for example, is reduced by a third.
o Fixed bug in methods containing both -0.0 and 0.0 (positive and negative
floating-point zero).
o Fixed bug in Directory class>>#create:, that could not create a
directory relative to the current directory.
o Fixed bug in File>>#touch, which did not work really. There are also
methods to modify a file's atime and mtime.
o Fixed bug in SortedCollection. After #removeAtIndex:, adds would leave
the collection unordered.
o Fixed many more bugs.
o Introduced a method to efficiently convert a WriteStream into a ReadStream.
It is called #readStream and makes WriteStream more polymorphic with String.
o Introduced two more class shapes, #character and #utf32, that can be used
for String and UnicodeString.
o More reliable detection of at-end-of-file condition for pipes, TTYs,
and so on (especially on Mac OS X), and of sockets closed by the peer.
Due to incompatibilities between various OSes, you are advised to test
end-of-stream conditions *before* rather than after reading a character
from stdin. In 2.2, either way would work, but serious bugs were
found on Mac OS X unless stdin was redirected from a file.
o Moved gdk_draw_ functions to GdkDrawable.
o New goodie to parse the command line. Look at the documentation for
the Getopt class and for SystemDictionary>>#arguments:do:.
o New example, lazy collections. When loaded, #select:, #reject: and
#collect: do not create a new collection unless necessary. Idioms like
(a select: [ :each | ... ]) do: [ : each | ... ]
or
a := a select: [ :each | ... ].
a := a reject: [ :each | ... ].
a := a select: [ :each | ... ].
^a size
can be much faster when this example is loaded.
o Regular expressions are now included in the default image. The interface
is now definitive and is similar to 2.2. The concrete classes for
RegexResults are in a private namespace (since the user need not
instantiate them anyway). Right now, regular expressions are only
usable for String objects (see Unicode support below). This may
change in the future.
o The backtraces now omit again the internal methods in the exception
handling system.
o The class above which super-send bytecodes start searching is now embedded
in the bytecode stream. This provides the infrastructure to implement
'here' as in Smalltalk/X or 'self.Foo b' to execute the Foo>>#b method
(these possible extensions have not been implemented).
o The header files compile cleanly with a C++ compiler. For the occasion,
the preferred name of the old `mst_Object' has changed to `gst_object'.
o Various speedups.
Unicode support:
o Characters above 127 are no longer used to represent extended ASCII
characters. Instead, they are only used to represent a byte in
the encoding of the Unicode characters from 128 on. To create
them use the Blue Book method Character class>>#value:.
To represent Unicode characters above 127 use the (ANSI Smalltalk)
Character class>>#codePoint: method. Note that these characters
*cannot* be shown on a stream with #nextPut: (use #display: instead)
nor compared with #== (use #= instead).
Character literals like $+ or $A are guaranteed to create normal
"Character" objects, for which you can safely use #nextPut:. Right
now, these are valid only for characters between 0 and 127. To create
Character literals for unicode characters, use the new syntax to
express characters using their Unicode code point. This may be
extended in the future to support Unicode character literals.
A ``safe'' way to obtain the character whose encoding is between
128 and 255 is this (which requires the Iconv module to be loaded):
##('<your character>' asUnicodeString first)
(This snippet has no shortcut by design because, in general, converting
a Character to a UnicodeCharacter is not a well-defined operation).
o New UnicodeCharacter and UnicodeString classes. These new classes
can also be passed to and received from C functions. See the
manual for more information.
o New syntax $<13> to express characters using their Unicode code point.
As anticipated, this syntax will create instances of the new UnicodeCharacter
class when the number is > 127.
o Part of the I18N module was separated into the Iconv module, which
provides support for printing Unicode characters and strings correctly.
Other goodies:
o NCurses bindings, contributed by Brad Watson.
-----------------------------------------------------------------------------
NEWS FROM 2.1.12 TO 2.2
Scripting improvements:
o A sharp-bang sequence at the beginning of a file is parsed as a
one-line comment.
o Provides an "-f" option (long option "--file") to be used in a #! line,
as in "#! /usr/bin/env gst -f", which has the same effect of -Q,
processing the file indicated by the option's argument, and passing
the rest of the command line to GNU Smalltalk. In other words, the
two invocations that follow are equivalent:
gst -f script.st ARG1 ARG2
gst script.st -Qa ARG1 ARG2
o Load.st installed as gst-load, Reload.st installed as gst-reload,
Test.st installed as gst-sunit.
VM changes:
o Can define subclasses of CompiledMethod and have a method invoked on
the instances whenever the method is called.
o Can pass a "void **" to C using the #cObjectPtr parameter specifier
(previously undocumented and broken).
o The #class method can be overridden. This is useful for example
for debuggers and proxies.
o Code for decoding/interpreting the bytecode set is for the most part
automatically generated. Take a look at the ``genbc'' and ``genvm''
programs if you are going to write an high performance interpreter, and
write to the mailing list for any information on them or on the other
program ``superops'' (this one is much more specialized).
o CompiledBlocks and CompiledMethods are read-only.
o Dollars are allowed in the middle of identifiers and method names.
This is unportable, so do not abuse it. As with underscores, it is not
possible to use them at the beginning of an identifier or method name.
o Fixed bug that caused the compiler to accept duplicate argument or
temporary names.
o GCC needed to compile GNU Smalltalk.
o gst_smalltalk_args accepts a const char **.
o Improved clarity and portability using intptr_t, size_t and ptrdiff_t
more widely and wisely.
o Indexed instance variables can be 8-bit and 16-bit, signed and unsigned
integers; or they can be 32-bit and 64-bit, signed integers and unsigned
integers and floating point values; or objects of course. Previously
the only three possibilities were objects, 8-bit unsigned ints, and
pointer-sized unsigned ints.
o Instance variables are scanned backwards: if a subclass declares an
instance variable with the same name of the superclass, it wins when
compiling code in the subclass (fixes the so-called "fragile subclass"
problem).
o Keywords and parameters need not be separated by a space (as in
`self x: y z:w').
o New bytecode set. This is a significant departure from the Blue Book's
instruction set, and it improves performance by ~20%. Over 150 common
bytecode sequences are optimized, saving on dispatching overhead and
minimizing the cost of decoding arguments.
o Options -l and -L (--log-changes and --log-file) are no more. The
change log is not useful outside the GUI, while inside the GUI it
ought to be maintained by the GUI itself.
o Option -s is no more. It was made the default in 2.1.5.
o Passing floating-point arguments to C works.
o Prefetching instructions are used wherever supported (Alpha, SPARC,
PPC, AMD K6 or newer, Intel PIII or newer, all with GCC 3.2). This
speeds up the startup by up to 20%.
o Instances of subclasses of CompiledBlock and CompiledMethod can be
created using the same primitive that creates CompiledBlocks and
CompiledMethods, but sent to the subclass.
o Several important bug fixes in event handling and asynchronous file
input/output.
o Subclasses of MethodInfo can be used as the descriptors for CompiledMethod
objects.
o Two-character binary messages ending with a minus are scanned differently
if followed by a number: "1+-2" is now read as "1 + -2", not "1 +- 2".
This is what you would usually expect; however, including spaces explicitly
is recommended.
o When GCC 3.3 or later is used, a shared library is also built. The
code has been to some extent optimized to make this less expensive, but
the shared library still has a 5-10% performance hit. Note that the x86