Skip to main content

front end - 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.





Comments

Popular posts from this blog

front end - keyboard shortcut to invoke Insert new matrix

I frequently need to type in some matrices, and the menu command Insert > Table/Matrix > New... allows matrices with lines drawn between columns and rows, which is very helpful. I would like to make a keyboard shortcut for it, but cannot find the relevant frontend token command (4209405) for it. Since the FullForm[] and InputForm[] of matrices with lines drawn between rows and columns is the same as those without lines, it's hard to do this via 3rd party system-wide text expanders (e.g. autohotkey or atext on mac). How does one assign a keyboard shortcut for the menu item Insert > Table/Matrix > New... , preferably using only mathematica? Thanks! Answer In the MenuSetup.tr (for linux located in the $InstallationDirectory/SystemFiles/FrontEnd/TextResources/X/ directory), I changed the line MenuItem["&New...", "CreateGridBoxDialog"] to read MenuItem["&New...", "CreateGridBoxDialog", MenuKey["m", Modifiers-...

How to thread a list

I have data in format data = {{a1, a2}, {b1, b2}, {c1, c2}, {d1, d2}} Tableform: I want to thread it to : tdata = {{{a1, b1}, {a2, b2}}, {{a1, c1}, {a2, c2}}, {{a1, d1}, {a2, d2}}} Tableform: And I would like to do better then pseudofunction[n_] := Transpose[{data2[[1]], data2[[n]]}]; SetAttributes[pseudofunction, Listable]; Range[2, 4] // pseudofunction Here is my benchmark data, where data3 is normal sample of real data. data3 = Drop[ExcelWorkBook[[Column1 ;; Column4]], None, 1]; data2 = {a #, b #, c #, d #} & /@ Range[1, 10^5]; data = RandomReal[{0, 1}, {10^6, 4}]; Here is my benchmark code kptnw[list_] := Transpose[{Table[First@#, {Length@# - 1}], Rest@#}, {3, 1, 2}] &@list kptnw2[list_] := Transpose[{ConstantArray[First@#, Length@# - 1], Rest@#}, {3, 1, 2}] &@list OleksandrR[list_] := Flatten[Outer[List, List@First[list], Rest[list], 1], {{2}, {1, 4}}] paradox2[list_] := Partition[Riffle[list[[1]], #], 2] & /@ Drop[list, 1] RM[list_] := FoldList[Transpose[{First@li...

plotting - How to draw lines between specified dots on ListPlot?

I would like to create a plot where I have unconnected dots and some connected. So far, I have figured out how to draw the dots. My code is the following: ListPlot[{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4,13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full] I have thought using ListLinePlot command, but I don't know how to specify to the command to draw only selected lines between the dots. Do have any suggestions/hints on how to do that? Thank you. Answer One possibility would be to use Epilog with Line : ListPlot[ {{1, 1}, {2, 2}, {3, 3}, {4, 4}, {1, 4}, {2, 5}, {3, 6}, {4, 7}, {1, 7}, {2, 8}, {3, 9}, {4, 10}, {1, 10}, {2, 11}, {3, 12}, {4, 13}, {2.5, 7}}, Ticks -> {{1, 2, 3, 4}, None}, AxesStyle -> Thin, TicksStyle -> Directive[Black, Bold, 12], Mesh -> Full, Epilog -> { Line[ ...