Most influential and/or disrupting features introduced with new versions of Mathematica

This is something that has been bugging me for ages.

With every upgrade, Mathematica has added new functionalities and amended some of its bugs. In the process, though, some older functionality has inevitably been disrupted or made obsolete. This is to be expected of course, and more often than not these modifications and additions are only limited to a change in names, or very limited changes in behaviour (with some completely transparent to users).

Some changes, though, have a deeper influence on the way we code and use the front-end with Mathematica. Two major game changers (IMBO) have been the introduction of the two-dimensional notation in all versions of Mathematica 3 (TraditionalForm notation), and the graphics revolution in Mathematica 6 (graphics are no longer side effects, but real objects). Other important changes that come to mind are the introduction of the packed-array facility in Mathematica 4, the continuing evolution of numerical evaluation through all versions, and the availability of curated data from the Web. The incorporation of most external packages in the core is another game changer, since it contributed to hiding the code and made it harder for users to understand what is going on under the hood. Also, the introduction of Manipulate and of the CDF format have changed the way people use Mathematica to convey ideas.

I am well aware that there are sections of the documentation dedicated to all these changes, namely the "What's new in Mathematica X.x" parts, that can be found here http://www.wolfram.com/mathematica/quick-revision-history.html and more specifically here:

http://www.wolfram.com/mathematica/new-in-9/

http://www.wolfram.com/mathematica/new-in-8/

https://www.wolfram.com/products/mathematica/newin7/

http://www.wolfram.com/products/mathematica/newin5/summary.html

https://web.archive.org/web/20020628025326/http://www.wolfram.com/products/mathematica/newin42/

https://web.archive.org/web/20011031233219/http://www.wolfram.com/products/mathematica/newin41/descriptions/

https://web.archive.org/web/20001202021900/http://www.wolfram.com/products/mathematica/newin4/new_list.html

http://reference.wolfram.com/legacy/v3/index105.html

older versions seems to lack a dedicated part of the documentation

The purpose of this 'question' is to create a selected listing of the most disrupting and/or influential changes introduced with every new version. The utility of such a listing is multifold:

1. Understanding older code (need to adapt some old program? reading an old book on Mathematica?)
2. Getting rid of older coding habits (What, you're still using $DisplayFunction?) 3. Getting to know new, more efficient ways, to do stuff (Maybe Total is better than Plus@@ with Packed Arrays?) 4. Having a list ordered by perceived importance of the most relevant changes (Yeah, let's see the really important changes of paradigm that I have overlooked...) The template for the answers, in my opinion, should carry a title like this From X.x to Y.y : name of the feature of behaviour for example (these are just examples of the titles of three separate answers)  From 2.2 to 3.0 : Frontend with two dimensional notation From 3 to 4 : Packed Arrays From 5.1 to 5.2 : 64-bit-enhanced arbitrary-precision numerics  And then elaborate what is that has changed, why is that important and how it has changed the way you coded or used Mathematica. ONE answer, ONE feature. EDIT: it appears Wolfram has added a page that collects all incompatible changes from version 1 to version 7 here: http://reference.wolfram.com/language/tutorial/IncompatibleChanges.html From version 7 onward, you can refer to this post on MMA SE: Incompatible Changes since Mathematica Version 7? The scope of this thread is to emphasize only the major and most disruptive changes, not every single modification. The idea is to have answers to this post pop up naturally by voting (hence, add only ONE change per post), and then from time to time update this very post with a list by importance for each version change. As many other threads of this kind, this is a Community Wiki post. - The most annoying thing during each version change was that novel built-in function that I had just finished coding without knowing it will be in the new version. Happened to me not a few times, e.g. with Graphs. – István Zachar Mar 8 '14 at 15:04 @MichaelE2, how do I make this a collaborative wiki? I remember I saw that option somewhere, but I do not seem to find it now... – Peltio Mar 8 '14 at 15:29 @Peltio I thought there used to be checkbox, but it's not there. Perhaps it's only on answers. Somehow it's happened though. – Michael E2 Mar 8 '14 at 16:00 There were several major additions, but far fewer things which actually change how most people work. For example, all the statistics functionality is fairly major, but it's irrelevant for people who don't need statistics. The control systems functionality is a similar example: most users of this site don't use it, so it has low visibility here. – Szabolcs Mar 8 '14 at 16:28 I feel you, @István. I lost count of the times I developed a package for function so and so, and just when I felt ready to release it into the wild, there appears the new version which does what my package was supposed to do, and more besides. :o – J. M. May 17 '15 at 14:16 3 Answers From 5 to 6: Graphics are no longer side effects A small but disruptive change for me was having to take all the ;'s off my Plot[] and other graphics commands. The previous behavior was to return a graphics object that didn't display, and to also, always, display the graphic. So the ; suppressed the abbreviated text representation of the graphics object. The current behavior is to display the graphics object that is returned (instead of an abbreviated text representation), but of course not if the output of the function is suppressed by the ;. I like the current behavior better, but it was annoying to have to go through a gazillion notebooks to fix that. I also had to take out a bunch of uses of DisplayFunction to control displaying and not displaying the results of Plot[], Show[], etc. The graphics functionality has significantly changed in general from version 5 to version 6. See Wolfram's list of incompatible changes for a detailed listing of all modifications. From the same page, here's advice to have your old notebooks works until you fix them: for compatibility purposes, use <<Version5Graphics  to restore graphics capabilities from Mathematica 5. To restore the Mathematica 6 graphics capabilities, use <<Version6Graphics  - It happened in version 6. – Szabolcs Mar 9 '14 at 14:51 Once upon a time, after one too many DisplayFunction -> Identity settings were written, I deigned to write a function Hide[] which used Block[] to localize $DisplayFunction. I was happy for much of versions 4 and 5. Then I switched to 8, and found that Hide[] was of no more use. I now write this comment to remember that little utility. Farewell, but ye shall not be too missed. – J. M. May 17 '15 at 14:14

From 2 to 3: Two-dimensional mathematical notation

Version 3 saw the major advance in readability and user interface with the 2D Box language which allows the creation of true 2D input and true 2D output. Prior to version 3, it was only possible to make 1D input (which was tough to read) and to get a sort of 2D output using typewriter characters only. This is called OutputForm and is still available in current MMA. Outputform has been replaced with the wonderful StandardForm which you can copy/paste/edit as you wish, without semantic loss of the expression. Elegant, but more limited, is also the TraditionaForm which you cannot in general copy/paste/edit into, but can be used in images and/or traditional publications.

-

I've been really shocked at how much the features supporting Associations and Datasets have changed my coding style. Association itself is very convenient, and a lot of useful functions (like Keys and Values) introduced for Associations also work with lists of Rules, and the way Append and Join work with Associations is very convenient, if slightly confusing, since you effectively override old rules in a list of rules by Joining a new list of rules to its front, while you Join the new rules to the back of the Association. We also got the function GroupBy, which is something I was constantly faking with some combination of GatherBy and Map or Replace.

Also, the behavior of Map, Select and the like, which operate on the values in the association while leaving the keys untouched is very frequently the right thing, and has allowed me to dispense with many uses of MapAt or Replace.

I've barely used Dataset in and of itself, but many new convenient "operators" were added to make working with it easier. My favorites are the infix @* notation for Composition, and the many new curried forms of functions such as Map and Select. Indeed, I use constructions like Map[f] @* Select[gQ] all the time.

-