In preparation for running Macaulay2 in parallel using threads, the Safe C language, in which the interpreter is written, has been reworked. The chief advantage is that now, references to top level objects now consist of a single address pointer, and thus assignment can happen atomically. Formerly, a small integer (for identifying the type of object pointed to) accompanied the pointer, but now it is stored with the rest of the object. Also, new keywords have been added to allow the definition of new types, support has been added for translation to C++, and support for atomic operations and thread local variables has been added.
new packages:
AdjointIdeal, a package for adjoint ideals of plane curves, has been added.
BooleanGB, a package for Gröbner bases in Boolean rings, has been added.
DGAlgebras, a package for handling differential graded algebras, has been added.
FormalGroupLaws, a package for commutative formal group laws, has been added.
GraphicalModels, a package for discrete and Gaussian statistical graphical models, has been added.
Graphics, a package for creating graphics, has been added.
Graphs, a package providing data types, visualization, and basic functions for graphs, has been added.
HodgeIntegrals, a package for Hodge integrals on the moduli space of curves, has been added and certified.
Kronecker, a package for Kronecker and rational normal forms, has been added.
ModuleDeformations, a package for computating versal deformations of maximal Cohen-Macaulay modules, has been added and certified.
NAGtypes, a package containing declarations of types needed by two other packages, has been added.
Nauty, an interface package for the program nauty, which computes automorphism groups of graphs and digraphs, has been added.
Normaliz, an interface package to the program normaliz, which computes the Hilbert basis of a rational cone, has been certified.
NormalToricVarieties, a package designed to manipulate normal toric varieties and related geometric objects, has been added.
Parametrization, a package for rational parametrization of rational plane curves, has been added.
PHCpack, an interface package to the program PHCpack, which uses homotopy continuation methods to solve systems of polynomial equations numerically, has been added.
Serialization, a preliminary package for saving Macaulay2 objects in files, has been added.
SimplicialDecomposability, a package containing various decomposability routines for simplicial complexes, has been added and certified.
ToricVectorBundles, a package for vector bundles on toric varieties, has been added and certified.
WeylGroups, a package for root systems and Weyl groups, has been added.
improved packages:
directImageComplex, now has the ability to compute direct image complexes, and maps between them.
Polyhedra, a package for computations with convex polyhedra, has been improved: matrices that are returned from polyhedral objects are over ZZ now, except for vertices of a polyhedron; fourierMotzkin is now called only once, to increase the speed in higher dimensions.
Schubert2, a package for enumerative geometry, has been well documented (finally) and has been improved, e.g. incidence correspondences between flag varieties has been added.
The SimpleDoc package, used for documentation in Macaulay2, has a new function, multidoc, that allows multiple documentation nodes per string. The format of the Consequences section has changed. There is a new keyword, Pre, that allows preformatted text to be easily inserted.
Gröbner bases over fields are now autoreduced, so the answer is mathematically well-defined. Resulting changes in coefficients of polynomials in matrices returned by such functions as syz and complement may be observed.
The function basis, now is functorial: if given a matrix, it returns the matrix between the images of the bases of the source and target.
The functions basis, and truncate(List,Module) now allow partial multidegrees to be given. The result is a basis or generating set over the subring generated by variables whose initial degrees are zero.
Various bug fixes, including several memory leaks, and an efficiency related bug where e.g. generators gb I, of an ideal over the rationals, would take a long time to compute
TEX mode can now handle $\mapsto$.
Addition of ideals with an expression such as I+J has been extended to work in the case where I and J are ideals in different, but compatible, rings. Here compatibility means the one is an predecessor of the other, as would be the coefficient ring of a polynomial ring or the ambient ring of a quotient ring.
Added a new method, matrix(RingElement), that makes a one by one matrix from a ring element.
Added a new method exp(RingElement) for the exponential function applied to a nilpotent ring element.
functionality changed:
Elements of sets are now sorted before printing.
Loading a package twice now gives an error unless you use the loadPackage(...,Reload=>...) option. Reloading a package can lead to subtle errors. For example, if the package creates a new type, then it will do that each time the package is loaded, and objects of that type that were created before reloading will not work after reloading. Also, reloading a package may cause a memory leak.
The function getSymbol now always creates a symbol in the user dictionary, whereas formerly, it provided an existing symbol, or created one in the first mutable dictionary listed by dictionaryPath. The reason is that the main application in a package is to create symbols to server as variables in polynomial rings to be handed to the user, and the user will need those symbols to be visible.
The one-letter symbols, which are treated specially by vars, are now no longer pre-defined. Now they are created when needed. Packages can create them with getSymbol. This change is intended to prevent the kind of bug where a package unintentionally refers to or modifies a one-letter global variable.
Packages containing unset mutable private global symbols will now be flagged with an error message, and the locations of the offending symbols will be given. This is intended to be an aid in detecting bugs, because one common way for such symbols to arise is by misspelling the name of a function parameter or the name of a local variable. Another way they arise is by forgetting to declare that a variable used just inside the body of a function is a local variable.
A new way to create a polynomial ring in a package whose variables are based on symbols in the user dictionary is to put the names in quotation marks, like this: QQ["x","y"]. Now that the one-letter symbols are no longer predefined in the Core dictionary, something like this will be necessary, as QQ[x,y] will not work, because x and y will refer to private global symbols of the package, and will most likely now get flagged as errors.