# Incompatible Changes since Mathematica Version 7?

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.

-
Somewhat related; my attempt to list fixable bugs by version: (30599) –  Mr.Wizard Jun 19 at 21:42

The items in this post are not generally regressions; they are simply changes and enhancements that may break code or cause problems in moving from one version to another. The bullet points are offered as specific solutions to instances of incompatibility, and not as recommendations of general practice. For example, Plot Themes are a powerful tool one should learn to use; I discourage disabling this tool by setting $PlotTheme = None unless that is needed for a specific result. # 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. 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. (Reference) • 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. (Reference) • Set BoxForm$UseTemplateSlotSequenceForRow = False;

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

General Legend functionality has been overhauled. Many things do not work quite the same and many low-level methods no longer work. (Example)

PlotJoined option for ListPlot is no longer accepted. (It was deprecated in 6.0 but continued to work.)

# 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.

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 Globalx.

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[...]

Nearest gives message and returns unevaluated when given an empty list as first argument. In Version 9 and before an empty list was returned.

• check for empty lists before calling Nearest or for unevaluated Nearest in result...

WeatherData now returns a TemporalData object using TimeSeries and Quantity rather than a plain array.

ListPlot and ListLinePlot may use a wider Automatic plot range than expected when working with data that covers a very small range. (Reference)

• Use the undocumented option "AllowMicroRanges" -> True for individual plots or set SetOptions[SystemProtoPlotDumpiListPlot, "AllowMicroRanges" -> True].

# Between Versions 10 and 10.1

FrameTicks no longer recognizes the syntax {bottom, left, top, right}

• Give specifications in the form {{left, right}, {bottom, top}}

• Or redefine an internal function FrameTicksQ: (82675)

MovingMap has seen major revision with incompatible syntax changes. (Reference)

• Use the option Method -> "Legacy" within MovingMap to achieve the old behavior

# Non-version-specific

Hash used without a specified type cannot be expected to return the same value from one version or platform to the next. There appears to be no way to compute the Hash values from older versions apart from actually running that version of Mathematica.

• Specify a hash type if you intend to rely on the stability of these values.
-
Klingon character support has been removed: that's because Klingons do not respect the Galactic Copyright Treaty –  magma Aug 6 '14 at 9:29
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 –  The Toad Aug 6 '14 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 '14 at 16:27
@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 '14 at 21:08
@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 '14 at 0:52