Update suitable examples and tests to use blank mode
[shapes.git] / VERSION
blob4091cf272a9881befa6368a14c5b2b001ac46204
1 0.6.0.3
2 The first line of this file shall be the last tagged version string.  The version history may be filled in at any time, but when a version is tagged, the current date shall be added on the first line of the release notes for the version being tagged.
4   Version history
5 ===================
7 ====( 0.7.0 )====
8 FILL-IN-DATE
10 This release is mainy about namespaces and new and redesigned container types.  Because of several backward incompatible changes, the version number was bumped from 0.6.x to 0.7.0.
12 Introducing namespaces.  Namespaces are used for organizing source code and avoid naming conflicts.  Mapping of namespaces to file system directory hierarchy simplifies organization and loading of a growing number of Shapes extensions.  Namespaces also bring a major reorganization of the Shapes documentation, which is now follows the logical grouping of related things, instead of the old division into value bindings, dynamic variables, and state bindings.  The transition to new namespace organization has come a long way, but is not yet fully settled; more experience is needed before it is clear how to deal with some of the old functions with cases spanning over domains that now belong to different namespaces.
14 Blank mode operation, allowing Shapes programs that don't produce any graphical output.
16 The new graph container provides a clean solution for modeling graph-like data.  A graph container consists of nodes and edges, where the edges describe how nodes refer to one another.  Modeling this type of data does not really match the funcitonal paradigm (imperative languages may use some pointer-like mechanism to connect the nodes), so defining a standard way of doing this is important both for convenience and code reuse.
18 The documentation has been reorganized to become more accessible, by shortening the main tutorial and introducing guide chapters for tutorial-style content that is not essential enough or too lengthy to fit in the main tutorial.
20 Several backward incompatible changes related to singly linked lists.  Users are no longer exposed to the difference between the efficient singly linked lists used in the kernel, and less efficient lists built from lazy cons pairs.  The terminology singly linked list has been replaced by sequence that better describes what the interface is all about.  The extension conssupport has been removed, and a new extension seq-support has been added.  The arguments passed to the operation in a right fold have been reversed to match right folds in other languages.
22 Named angular units, including "rad" and "deg".  For example 1.5rad is simply the number 1.5 written to make it clear that it denotes an angle, and 90deg is the angle of a quarter of a turn.
24 Bugfixes include:
25 -  No longer forces the result of all immediate expressions.
28 ====( 0.6.0.3 )====
29 2014-01-30
31 Maintenance release.
33 Brings changes (some of which were bugfixes) for improved compatibility with modern tools: Automake, Autoconf, ImageMagick, libpng, and Clang.
35 With the new optional build dependency OpenSSL, the generated PDF files will have file identity information, bringing them closer to PDF/A conformance.
37 Bugfixes include:
38 -  PDF generation (addressing a GhostScript warning).
39 -  A use after free detected by AddressSanitizer.
42 ====( 0.6.0.2 )====
43 2010-10-02
45 Important maintenance release.
47 Bugfixes include:
48 -  The man page and HTML documentation are now installed when building from distribution even if Saxon is not present.
49 -  Fixes problems with 'make clean' aborting due to failing include directives.
50 -  Fixes compilation error when building without libpng.
53 ====( 0.6.0.1 )====
54 2010-10-01
56 Maintenance release.
58 Bugfixes include:
59 -  Compatibility with modern TeX distributions that generate PDF 1.5 output.
60 -  Fixes compilation when the FreeType library version is at least 7.0.1 but less than 10.0.0.
63 ====( 0.6.0 )====
64 2010-06-02
66 Bringing in FreeType and fontconfig.  So far, the only supported font format is TrueType, and the support of this format is in no way complete.  Still, this version marks the start of a more serious treatment of text and fonts in Shapes.  Currently supported features include access to glyph outlines and painting (as well as clipping with respect to) text using both embedded and outlines fonts.  Better font support and more features related to text formatting are expected in the future.
68 Backwards incompatible change: "TeX" is no longer the keyword of a special form.  It now behaves as an ordinary function, although the implementation still detects calls with a literal string argument during program analysis.  Expressions like (TeX ("$x^{2}$")) are deprecated and shall be replaced by [TeX ("$x^{2}$")].  The old special form will still be allowed for some (not very long) time, but a warning message will inform the user about the need to switch to a function call.
70 Other new features include:  Wider support for folds, and a new efficient implementation of ranges.  New syntax %last refers to last position in a container.  New syntax allows mutators to be called as part of an insertion sequence.  New atomic data type for characters.  New state type for one-dimensional arrays.  The new dynamic variable @spot is an alternative to [spot (0m,0m)].  Shapes now ship with shapes-mode, which comes with some new features and bugfixes, and is now described in the Shapes on-line documentation.
72 Bugfixes include:
73 -  Workaround for Flex not being compatible with modern C++ compilers.
74 -  A configuration bug caused errors when libpng was present, but not libjpeg.
75 -  Miter limit is a float, and values less than 1 are not allowed.
76 -  Default value for @text_knockout was wrong.
79 ====( 0.5.2 )====
80 2009-12-14
82 Now supporting native include of some raster image formats, namely PNG and JPEG.  JPEG file inclusion is supported by means of the JPEG facilities defined in the PDF standard, while parts of the feature-rich PNG format are supported with help from the libpng library.  Compared to using \includegraphics in a TeX label, including images directly in Shapes is more reliable since there is no need to detect when a TeX label needs to be rebuilt.
84 Command line option --iteration=false prevents reuse of stored labels (in addition to preventing the label database file from being written).  This feature would have been of greater value before the release of this version, since problems with raster images not being updated was the main reason behind it.
86 The shapes-mode for Emacs is now using a new technique for indentation.
88 Bugfixes include:
89 -  Configuration of Saxon after they changed their naming scheme.
92 ====( 0.5.1.2 )====
93 2009-11-02
95 This is a bugfix release.
97 Bugfix:
98 -  The man page silently failed to build, and an empty man page was installed.
101 ====( 0.5.1.1 )====
102 2009-08-22
104 This is a bugfix release.
106 Bugfix:
107 -  Fixed C++ conformity issue causing build failure with modern C++ compiler.
110 ====( 0.5.1 )====
111 2009-08-19
113 A minor version increment with important new features, one remarkable removal of a bad feature, changed syntax, and more.
115 The two big news are the path-to-path approximation and an improved analysis of user programs.
117 The path-to-path approximation is available through <approximator>.  It captures a very natural way to select a point on a path (but the implementation was a little bit involved, which is why the feature hasn't appeared until now).
119 The improved analysis keeps track of the free states in every expression, and is therefore able to detect that a code bracket which only mutates its own states is a pure expression.
121 With this version, the old and ugly procedures have been removed from the language.  They were never used, and made programs much more difficult to analyze.  Without procedures, there was no longer any need for the old "!" syntax, and hence the old "!!" was changed to "!".
123 Bugfixes include:
124 -  Errors in the CSS for HTML documentation.
125 -  Subpaths at end of closed path.
126 -  A 3D arrowhead was trying to fill a non-closed path.
129 ====( 0.5.0 )====
130 2009-05-18
132 Stepping the version from 0.4.x to 0.5.x is motivated by the arriaval of the interactive mode of the compiler.  The interactive mode could make it easier to teach and learn Shapes, and the it is also used extensively by the new debugging facility.  The debugging facility, represented by the debugger state #db (available in the interacitve mode only), provides common debugging tools such as examination of the current evaluation state (lexical and dynamic environments, and backtrace), breakpoints, and stepping.  While the true usefulness of the interactive mode during normal use of Shapes remains unclear, it implementation brings important improvements to the compiler design.
134 The shapes-mode for Emacs has been updated, and includes some support for the interactive mode (try it with "M-x run-shapes" in Emacs!).
136 This release also contains the new arrowhead <ShapesArrow>.  It generally looks better than <MetaPostArrow>, and replaces <MetaPostArrow> in most examples and extensions.
138 Now supporting the PDF feature to clip with a text object as mask.
140 More documentation.
142 Bugfixes include:
143 -  Random number generation was completely broken when compiling with recent gcc g++ compiler.
144 -  Installation of HTML documentation was broken, causing the documentation index.html to be overwritten by the "project web" index.html.
145 -  The PDF text state was not updated correctly in some situations.
148 ====( 0.4.3.1 )====
149 2009-03-10
151 This release combines compatibility fixes for GCC 4.3 with some install-related improvements.
153 Bugfixes include:
154 -  Sloppy C++ has been cleaned up to compile with GCC 4.3.
157 ====( 0.4.3 )====
158 2008-12-22
160 This release comes with many long awaited, but backwards incompatible changes.  Merry Christmas!
162 New string construction syntax.  There are now three ways to enter strings, two of which have no escape characters, and a third that is only partly human-readable.  Most notably, the newline is now entered as the four character construct "{n} (having no special meaning inside the human-readable strings).
164 New operator for sending one argument through a function from the left.  For instance, the following two lines are equivalent:
165   [stroke [immerse [circle 1cm]]]
166   [circle 1cm] >> immerse >> stroke
167 Note that the operator is left associative.
169 Changed operator precedence and associativity rules.  Biggest change is that [] is now left associative to give good support for hard-wired curry functions.  This means that all old chains of [], changes into chains of >> (in reversed left-right order).  The new priority of | allows many old parentheses to be removed, but needs only a few new to be inserted.  Operator precedence and associativity can now be found in the syntax documentation.
171 There is now a prelude.  The standard prelude relieves the user from bringing in the most common extensions with ##needs.
173 Many functions in the standard prelude were renamed.
175 Bleed boxes are used instead of bounding boxes to determine size of final page.  Used by TeX (which takes a setting from @TeX_bleed) to remedy an old problems with bounding boxes coming out slightly too small from pdfLaTeX.
177 Improved Emacs support.
179 More documentation.
181 Buxfixes include:
182 -  Prevention of endless elementary path computation.
183 -  Problems with thunks in user dynamic variable declarations.
184 -  Character encoding setting in the Emacs shapes-mode.
187 ====( 0.4.2.1 )====
188 2008-12-13
190 (Celebrating Gustaf's thirtieth birthday.)
192 This is primarily (but not only) a bugfix release.
194 Bugfixes:
195 -  For some build setups, not all xsl files were included in distributions.
196 -  Exponents in scientific notation.
197 -  Removed confusion regarding which dynamic environment to use in tack-on operations.
200 ====( 0.4.2 )====
201 2008-12-02
203 GPL and copyright notes have been inserted in all non-trivial files.
205 A logo has been introduced.  Do not consider it final!
207 New notation, including more ASCII fall-backs.  The change of notation for functions is not backwards compatible!
209 Introduced mutators for states.  Old, global, non-pure functions were removed -- not backwards compatible!
211 New shapes-mode for Emacs.
213 Stuff for transforms, including fields (components as well as predicates), a <chop> method, and a kind of real Schur decomposition in 3D.
215 Lots of new documentation.
217 Source code for methods of types in Shapes has been reorganized.
219 Bugfixes include:
220 -  Including FlexLexer.h in distribution.
221 -  Annoying internal errors when displaying source locations were removed.
224 ====( 0.4.1 )====
225 2008-10-16
227 (Celebrating my thirtieth birthday.)
229 Improved build process for the documentation.
231 Introducing exit codes.
233 Bugfixes include:
234 -  Building the correct index.html at the top of the HTML documentation.
235 -  Lost JPG files in the HTML documentation were found by correct handling of the percent sign in URIs.
238 ====( 0.4.0 )====
239 2008-10-05
241 The distribution contains the documentation now, making it complete.
243 Lots of new documentation.
245 Minor, but many, changes in the syntax of command line options.  Basically, all parameters but files and directories are given using the --param=val style.
247 The directory for temporary files can be created automatically, if allowed.
249 New operator, &|, that combines dynamic bindings with priority to the second argument.
251 Pages can be grouped to have equal media boxes.  At the moment, the media box will be the smallest that contains the bounding boxes of all pages in the group.  See the non-pure function setbboxgroup for more details.
253 The document can be split into one output file per page, see the --split=mode option.
255 Improvements relating to PDF versions including a separate setting for whether to use transparency in the kernel, and not marking the output file with a higher version than what is implied by the PDF features is uses.
257 Additions and improvements to some of the standard extensions.
259 Bugfixes include:
260 -  Intersection of straight line segments.
261 -  Sometimes, functions were associated with the wrong environment.
262 -  Escaping the '\' in PDF strings.
265 ====( 0.3.7 )====
266 2008-04-21
268 The previous version was broken.  This version has been verified by running "make distcheck".
271 ====( 0.3.6 )====
272 2008-04-20
274 Lots of new documentation, including substantial work on structure, crosslinks, and formatting.  So far the HTML format has been in focus.
276 Procedure application is limited to certain scoping rules to ensure that the function abstraction is not broken.
278 Improved output to help finding errors i TeX label strings, and a bug with the --tmpdir feature was remedied.
280 Changed command line syntax for boolean options changed; no more --no-someopt, instead we use --someopt=no (the "no" has some synonyms).
282 New features of all kinds, ranging from additions to the scanner to new state types and functions.
284 Also new application examples in 3D, code optimizations, and bugfixes.
287 ====( 0.3.5 )====
288 2007-12-06
290 The previous attempt to create a file for distribution failed.  This version is the second attempt.
293 ====( 0.3.4 )====
294 2007-12-03
296 Bugfixes, including one in the computation of elementary paths.  There also used to be a problem (since 0.3.2) with running pdfLaTeX in a different directory than where the Shapes source is located, since the meaning of relative file locations must be changed when source code is moved.
298 This is the first version planned for (very limited) distribution using the new build process.
301 ====( 0.3.3 )====
302 2007-11-21
304 Simple constants in the global environment were named back to their names before variables had to begin with lowercase letters.  For instance, rgb_RED changed back to RGB_RED.
307 ====( 0.3.2 )====
308 2007-11-21
310 New ways to specify files, both on the command line and through environment variables.
312 Further improved build process, and minor additions to the documentation.
315 ====( 0.3.1 )====
316 2007-11-05
318 Bugfixes required to make the project compile in the Cent environment.
320 More standardization.
323 ====( 0.3.0 )====
324 2007-11-03
326 First version with most references to old project names removed.
328 Slowly changing to a more standardized way to compile things, for better compilance with standard make tools in the future.
331 ====( 0.2.3 )====
332 2007-11-03
334 Upsampling has been added.  The interesting methods for upsampling only apply in 2D, but length-based upsampling is provided also in 3D.  Please note that there is no need to do upsample_inflections before doing upsample_bends, as this is done autimatically to ensure clear semantics.  The method upsample_balance samlpes the timewise midpoint of each segment, which I believe will make the speed equal in the incoming and outgoing side of the sample point.
336 Identifiers are again allowed to begin with uppercase letters.  Type names are prefixed with either a paragraph sign or a double slash.
338 This is planned to be the last version where anything "Drool" remains.
341 ====( 0.2.2 )====
342 2007-06-05
344 The interpreter now makes another pass of the code, checking variable bindings, function borders, and other static aspects of the code.  Type checking will hopefully fit in here in the future.  The three passes are:
345 1) Scan and parse
346 2) Analyze
347 3) Evaluate
349 The error reporting mechanism has been revised so that the errors found during static analysis are collected in a list, rather than throwing just the first we detect and then abort.
352 ====( 0.2.1 )====
353 2007-05-19
355 By now many feature examples have been compiled successfully, and the tests go through.
357 More importantly, the random number facility has been redesigned so that states are used where appropriate.  To make it easy to use states in folds, the kernel's list type has been enhanced with methods foldsl ("fold with state, left") and foldsr ("fold with state, right").  However, this was not quite necessary since the same functionality can be implemented as an extension, as was done in conssupport.drext, and used random.drool.
359 Among all bugs found lately, one was in the z-buffer.  Although it was fixed, I'm not at all convinced that transforms are handled correctly, nor that overlaps and line-surface intersections are determined correctly.
362 ====( 0.2.0 )====
363 2007-04-24
365 This version marks the point where the two feature examples states.drool and values.drool compile.  This means that the program is getting useful again.  However, the great majority of the examples have not been updated, and it is expected that many bugs will be revealed in the process of updating them.
367 In other words, this version marks the beginning of the use of states and structures, but these features should be debugged and tested on the many available examples before being considered a true alternative to using the language as of version 0.1.1.
370 ====( 0.1.2 )====
372 This version is to be used during the early phases of the transition from hot variables to temporary states.  One the program becomes useful again, the version number shall be incremented.
375 ====( 0.1.1 )====
376 2007-01-02
378 Testing has been automated.  The tests are divided into two cathegories depending on whether it is the graphical or textual program output that is to be compared against a given output.  See the Makefile's in the ./test directory and its subdirectories to learn how to run the tests or add new tests.
380 The z-buffer idea has been postponed.  Instead, a z-sorter has been implemented.  It does not handle cyclic overlaps properly.
382 There are lots of bugfixes and small enhancements over the previous version.  One of the enhancements is the "[...]"-syntax for evaluated cuts along one argument.
384 This is planned to be the the last usable version with hot variables.
387 ====( 0.1 )====
388 2006-12-12
390 First named version.
392 I'd say this is far too late for the introduction of a version number.  The reason not to make a named version has been that rather big changes in the language syntax have been expected.  However, these changes are still expected, but today I was really curious to know what binary I had installed, and this is what made me take this step.
394 To give an idea of how long this project has been running I'll mention two things.  First, the initial import of the project into subversion dates back to 2005-09-23.  Second, there's now 395 kB of zipped source code for the compiler.  In addition, there are many examples and language extension files.
396 There still not much at all of documentation.  Comments in the source are sparse, much too sparse.  A user's guide hsa been initiated, but the files have not yet entered the project repository.  There is no laguage definition either, but this is partly because the language is still expected to change substantially.
398 A few words about testing:  The testing is without structure so far.  I generate examples to test the features I'm currently working on, but I do not generate tests that can be checked automatically.  This probably says something about the quality of this version.  That I plan automatize testing soon does not make this version better.
400 The list of features that exist in this version is much too long for me to think of right now.  The first such a list I expect to create will be the user documentation, so until then the examples is as close as one gets.