Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

There is documentation of the incompatible changes made to Mathematica with each major release:

Unfortunately that documentation simply stopped with version 7. Therefore I ask:

What incompatible changes have been made since Mathematica 7?

There are other questions on the subject but I wish to make this an exhaustive index for easy reference.

share|improve this question
    
I would delete the "interoperability" tag , since it does not apply here, and add the "version-10" tag. Would you agree? –  magma Aug 6 at 9:23
    
@magma I removed interoperability but I don't think adding version-10 is appropriate. –  Mr.Wizard Aug 16 at 18:35

1 Answer 1

Between Versions 7 and 8

Hash now gives the hash of a raw sequence of characters when applied to Strings. In past versions the string characters (quotation marks) were included in the calculation of the hash. (Reference)

  • Use "\"" <> string <> "\"" before hashing if you want output to match older versions.

\[Dash], \[LongDash] and \[Hyphen] may no longer be used as part of Symbol names. (Reference)

Between Versions 8 and 9

Image expressions are now Atomic; data cannot be extracted using Part.

  • Use ImageData and Options to extract raster data and options respectively.
  • Use PixelValue or ImageValue to query raster values
  • Replacement rules are overloaded to work: Image[{{.1, .3, .9}}] /. _[x__] :> {x}

Interpolation of an unstructured grid is in V8 possible for more than 3 dimensions (linear interpolation only). In V9 and higher Interpolation in more than 3 dimensions is not possible (see post (59919)).

  • 3rd party realizations of unstructured grid interpolations are available here, here, here, and here ( using different approaches and with different performance).

TeXForm no longer works properly with Row expressions, whether by design or oversight.


Solve can now return ConditionalExpression objects, rather then just one particular branch of the inverse.

  • Use Normal to remove the ConditionalExpression head. This however does not remove any GeneratedParameters.

  • Revert to version 8 behavior via SystemOptions: SetSystemOptions["ReduceOptions" -> "UseTranscendentalSolve" -> False].

Between Versions 9 and 10

Slot: in V10 #x and #"x" now parse as Slot["x"] and is interpreted as key name x for use with Association. In prior versions these were parsed as multiplication: #1 * x and #1 * "x".

  • Add something to act as a separator or use #1 form: # x, #*x, #1x, (#)x

Dispatch expressions are now Atomic and cannot be manipulated with Part or patterns.

  • Use Normal to convert a Dispatch table into a Rule list.

DateDifference now returns a Quantity expression.

  • Use DayCount instead or use QuantityMagnitude to strip the units.

  • Alternatively, using SetSystemOptions["DataOptions" -> "ReturnQuantities" -> False] will restore the old DateDifference behavior (see Possible Issues section of the DateDifference documentation).


DateRange now returns lists with year, month and day regardless of what the increment is.

  • The change and possible workarounds are further discussed here.

GeoDistance and GeoDirection now return a Quantity expression.

  • Use QuantityMagnitude to strip out the units.
    (This solution applies to any function that now returns a Quantity instead of a value.)

Klingon character support has been removed. \[KlingonA] etc. are no longer recognized as valid input syntax.


LogPlot and family no longer provide standard log plot gridlines when Automatic is specified.


PlotTheme changes the fundamental style of most plots and overrides BaseStyle and GraphicsBoxOptions settings.


PlotLegends -> "Expressions" does not generate a legend when used with a single plot function.

  • Use PlotLegends -> "AllExpressions" instead.

PlotLegends now does not automatically generate more legend items than there are colors in the working color scheme. (Reference)

  • Use a color scheme with a sufficient number of colors to differentiate all plot elements, a gradient scheme, or a manual legend specification.

ParallelNeeds defaults to the System context when loading packages which introduce symbols outside the package context. In previous versions (and Needs) these symbols are in the Global context. This has been confirmed by Wolfram support as a design decision, not a bug.

  • Create global symbols within package files in the Global context explicitly, as in Global`x.

NSolve returns the same solution several times to indicate its multiplicity. Before V10 it returned a solution with multiplicity only once. Reference.

  • Use DeleteDuplicates@NSolve[...]

Hash no longer returns the proprietary internal hash that was the default in previous versions.

  • There appears to be no way to compute the old hash, except using an older version of Mathematica.
share|improve this answer
5  
Klingon character support has been removed: that's because Klingons do not respect the Galactic Copyright Treaty –  magma Aug 6 at 9:29
1  
Writing #x and #"string" in versions < 10 to mean # x and # "string" respectively is bad form anyway (a habit propagated by the Church of the Tersists, no doubt ;)). Such code deserves to be broken :P –  rm -rf Aug 6 at 16:18
    
@rm-rf The interactive editor would previously auto-space such things just as it still does when you type 3x. (I don't mean that it enters a literal space but rather shows the expression with spacing.) Do you always type a space between such things? I have not as it seemed like wasted effort. –  Mr.Wizard Aug 6 at 16:27
1  
@eldo, I think the Inset thing is a bug rather than a deliberate change, so it doesn't belong in this list in my opinion. –  Simon Woods Aug 12 at 21:08
1  
@Szabolcs The original report was filed online, I did not keep a copy. Below is a copy of the reply from support: Thanks for contacting Wolfram Technical Support. Regarding the issue you reported, it seems this is an intentional design change. We have internal discussions on this and the argument from the developer is that "Setting $Context to $System on subkernels is necessary to make sure (new) system symbols arrive in the correct context on subkernels, because despite the MathLinkPrintFullSymbolName settings, system symbols do not have their context attached". –  Daniel W Aug 20 at 0:52

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.