How to find language changes that were not included in the official change log

A change log is issued when Mathematica has an update, such as:

But for instance the PlotLabels option mentioned in this post is not in the log. And as far as I know, the ImageMarker or some other [[EXPERIMENTAL]] functions are missing too.

How do we find these newer functions?

We can find some using this method:

CanonicalName@
EntityList[EntityClass["WolframLanguageSymbol", "UnderDevelopment"]]


{Autocomplete, AutocompletionFunction, CachePersistence, ContentObject, DeleteSearchIndex, DimensionReduce, DimensionReducerFunction, DimensionReduction, FindFormula, FoldPair, FoldPairList, LocalObject, SearchIndexObject, SearchIndices, Snippet, TextCases, TextPosition, TextSearch, TextSearchReport, UpdateSearchIndex, WordTranslation}

But it seems incomplete: for instance, DistanceMatrix is not in this list.

• Yode, note that ImageMarker is not considered experimental anymore as of 10.4.0.0, and DistanceMatrix was introduced officially already in 10.3 – MarcoB Apr 4 '16 at 18:36
• @MarcoB I mean ImageMarker introduced in 10.4,but not in 10.4's change log.And the DistanceMatrix is the experimental function in 10.3,it was introduced officially in 10.4 but no any statement.The DistanceMatrix not in 10.3's log and 10.4's. – yode Apr 4 '16 at 18:46

New functions conveniently carry the "NEW in 10.4" header in their documentation page. Since the docs are blessedly written as Mathematica notebooks, and notebook are text files, we can just use grep or a similar tool to hunt for those help files that contain that header.

New in 10.4

Inspection of one such file with a text editor reveals that the raw cell code generating the header contains the fragment:

StyleBox["\<\"NEW IN 10.4\"\>",


Using a grep clone (AstroGrep on Win7-64) only on the Symbols folder of the documentation, which is located in $InstallationDirectory <> "\\Documentation\\English\\System\\ReferencePages\\Symbols" on my system, returns the following list: $CloudExpressionBase             GreenFunction
$SourceLink Highlighted ArrayMesh ImageMarker Ask KeyValuePattern AskAppend LocalObjects AskConfirm MersennePrimeExponent AskDisplay MersennePrimeExponentQ AskedQ MixedMagnitude AskedValue MixedUnit AskFunction MomentOfInertia AskTemplateDisplay PartProtection BiquadraticFilterModel PerfectNumber BoundingRegion PerfectNumberQ CloudExpression PlanarGraph CloudExpressions PlotLabels ClusterClassify PolygonalNumber ClusterDissimilarityFunction QuantityDistribution ClusteringTree RegionMoment ConnectedGraphComponents SourceLink CreateCloudExpression SpellingCorrectionList CreateFile Subsequences CriterionFunction TravelDistanceList DeleteCloudExpression UnequalTo Dendrogram UniverseModelData DictionaryWordQ URLDispatcher DifferenceQuotient WeaklyConnectedGraphComponents DynamicGeoGraphics WeatherForecastData DynamicImage WordFrequency FindTransientRepeat WordFrequencyData GeoDistanceList ZoomCenter GeoLength ZoomFactor  Notice that this includes the PlotLabels option that you mentioned as well. Updated in 10.4 Similarly, the documentation carries a footer containing information on a function's date of introduction and latest update. For instance, the following fragment can be found in the documentation for ListPlot: Cell[TextData[{ "Introduced in 2007", Cell[" (6.0)", "HistoryVersion"], " | ", "Updated in 2016", Cell[" (10.4)", "HistoryVersion"] }], "History"],  Looking for files that contain "Updated in 2016" and also "Cell[" (10.4)", "HistoryVersion"]" returns the following sizable list: ArcLength HypoexponentialDistribution PalindromeQ ArcSinDistribution Image3DSlices ParameterMixtureDistribution Area ImageDistance ParetoDistribution Association ImageEffect PascalDistribution BatesDistribution InverseChiSquareDistribution PearsonDistribution BeckmannDistribution InverseGammaDistribution PERTDistribution BeniniDistribution InverseGaussianDistribution PlaneCurveData BenktanderGibratDistribution JohnsonDistribution Plot BenktanderWeibullDistribution KDistribution PoissonConsulDistribution BernoulliDistribution KernelMixtureDistribution PolyaAeppliDistribution BetaDistribution KumaraswamyDistribution PowerDistribution BetaPrimeDistribution LaminaData Probability BinomialDistribution LandauDistribution ProductDistribution BinormalDistribution LaplaceDistribution RayleighDistribution BirnbaumSaundersDistribution LevyDistribution RegionMeasure CauchyDistribution LindleyDistribution RiceDistribution CensoredDistribution ListLinePlot SechDistribution ChiDistribution ListLogLinearPlot ShiftedGompertzDistribution ChiSquareDistribution ListLogLogPlot SinghMaddalaDistribution CopulaDistribution ListLogPlot SkewNormalDistribution CoxianDistribution ListPlot SmoothKernelDistribution DagumDistribution ListStepPlot SolidData DataDistribution LocalAdaptiveBinarize SpaceCurveData DateListLogPlot LogGammaDistribution SplicedDistribution DateListPlot LogisticDistribution StableDistribution DateListStepPlot LogLinearPlot StringFreeQ DavisDistribution LogLogisticDistribution StringMatchQ DirichletDistribution LogLogPlot StringPartition Downsample LogNormalDistribution StringPosition EmpiricalDistribution LogPlot StringReplace ErlangDistribution MarchenkoPasturDistribution StringReplacePart Expectation MarginalDistribution StudentTDistribution ExpGammaDistribution MaxStableDistribution SurfaceData ExponentialDistribution MaxwellDistribution SuzukiDistribution ExponentialPowerDistribution MeixnerDistribution TransformedDistribution ExtremeValueDistribution MinStableDistribution TriangularDistribution FareySequence MixtureDistribution TruncatedDistribution FisherZDistribution MortalityData TsallisQExponentialDistribution FRatioDistribution MoyalDistribution TsallisQGaussianDistribution FrechetDistribution MultinomialDistribution TukeyLambdaDistribution GammaDistribution MultinormalDistribution UniformDistribution GeometricDistribution MultivariateTDistribution UniformSumDistribution GompertzMakehamDistribution NakagamiDistribution Upsample Graph NegativeBinomialDistribution VarianceGammaDistribution GumbelDistribution NegativeMultinomialDistribution VoigtDistribution HalfNormalDistribution NoncentralBetaDistribution Volume HighlightImage NoncentralChiSquareDistribution VonMisesDistribution HistogramDistribution NoncentralFRatioDistribution WakebyDistribution HotellingTSquareDistribution NoncentralStudentTDistribution WeibullDistribution HoytDistribution NormalDistribution WignerSemicircleDistribution HyperbolicDistribution Nothing HyperexponentialDistribution OrderDistribution  Experimental in 10.4 Similarly, one can go hunt for functions marked "experimental" since these carry the "[[EXPERIMENTAL]]" indication in the header of their help file. This is slighlty more complicated because it turns out that the [[EXPERIMENTAL]] header is actually a graphics expression, rather than formatted text. Again, inspection of the notebook help file for one such function hinted at the following code snippet as a pretty reliable indicator of the presence of this header in a text search: {Thickness[0.006944444444444444], FaceForm[{RGBColor[0.5, 0.5, 0.5],  Again using grep allowed me to identify the following list of currently experimental functions: $SourceLink                    DimensionReduction
Autocomplete                   SearchIndexObject
AutocompletionFunction         SearchIndices
CloudExpression                TextCases
CloudExpressions               TextElement
ClusterClassify                TextPosition
Containing                     TextSearch
ContentObject                  TextSearchReport
CreateCloudExpression          TextStructure
DeleteCloudExpression          WordTranslation
DeleteSearchIndex              ZoomCenter
DimensionReduce                ZoomFactor
DimensionReducerFunction


To address the suggestion to use the experimental TextSearch, here is my understanding of the best method to do so. I first attempted to run a text search for "\"NEW in 10.4\"" on all files in the "Symbols" directory mentioned above:

TextSearch[FileNames[All, {pathToSymbolsDir}], "\"NEW in 10.4\""];


This ran for close to 10 min before returning a result. Pretty much a non-starter.

Then again, this is probably not the way TextSearch was intended to be used; it should really be used with a pre-generated SearchIndexObject. So I generated a search index from those files once and for all, then ran TextSearch using the index. Once the index is generated, which was still quite time consuming, the search itself worked a lot better:

index = CreateSearchIndex[pathToSymbolsDir]; // AbsoluteTiming
(*Out: {1084.54, Null} *)


It took 18 minutes to generate the index on a reasonably powerful SSD-equipped laptop. Each search after that was quite quick and led to the same result as grep:

#["FileName"] & /@ TextSearch[index, "\"NEW in 10.4\""]

"GreenFunction.nb", "PlanarGraph.nb"}

• I have to say this a wonderful answer. – yode Apr 4 '16 at 16:55
• @MarcoB You can use TextSearch in newer versions of Mathematica instead. I've found this useful for checking the documentation for certain issues. – Searke Apr 4 '16 at 17:43
• @Searke One certainly could, but TextSearch is experimental and I am not familiar with its syntax, nor with its return values. In my opinion there is an advantage here in using a tool such as grep that has been honed by long use for this specific purpose. – MarcoB Apr 4 '16 at 18:33
• @yode I'm glad you liked it! I think I have completed the listings that were most obvious to me at this point. – MarcoB Apr 4 '16 at 18:34
• @yode I included such an example – MarcoB Apr 5 '16 at 16:28

Remember that WolframLanguageSymbol entities always return the state of latest version of the Wolfram Language; not the version of the language you currently have installed.

The Entity function calls appear to be returning the correct information when you take this into consideration.

New in 10.4

EntityList[Entity["WolframLanguageSymbol", {"FullVersionIntroduced" -> "10.4"}]]


New in 10.3

EntityList[Entity["WolframLanguageSymbol", {"FullVersionIntroduced" -> "10.3"}]]


Updated in 10.4

EntityList[Entity["WolframLanguageSymbol", {"FullVersionLastModified" -> "10.4"}]]


EntityList[EntityClass["WolframLanguageSymbol", "Experimental"]]

Update for 11.0.1 "UnderDevelopment" class has been changed to "Experimental" class. In 11.0.1 this class does not appear in EntityClassList["WolframLanguageSymbol"] but it is available.
• Nice, I like this approach using Entity and Co. +1 – RunnyKine Apr 4 '16 at 21:48
• Edmund, although I like the approach, I'm not sure how dependable these designations are. For instance, AlphabeticOrder and AlphabeticSort are the first two values returned by your "New in 10.4"; however perusing the documentation indicates that both were introduces in 10.3 in 2015, and not in 10.4. Similarly with Between, CaseOrdering, and I suspect many others that I haven't checked. – MarcoB Apr 5 '16 at 16:39
• @MarcoB , @yode There appears to be some issue with the "Version"~~ properties that take Real. I've switched to the "FullVersion"~~ properties and these appear to accurately collect the functions of interest. – Edmund Apr 5 '16 at 17:27
• @Edmund FullVersionIntroduced seems to help, but on my system it still misses the following new symbols whose introduction in 10.4 is confirmed by the relevant documentation pages: AskTemplateDisplay (experimental), BoundingRegion, ClusteringTree, SourceLink (experimental), and URLDispatcher. Weird. – MarcoB Apr 5 '16 at 18:23
• @MarcoB Yes. It appears that the entities are only partially updated. Has to be a bug in them. BondingRegion is there but the others are not. Have a look: Manipulate[ WolframLanguageData[foo, prop], {{foo, "BoundingRegion"}, InputField}, {{prop, EntityProperty["WolframLanguageSymbol", "Name"]}, propList}, Initialization :> {propList = WolframLanguageData["Properties"];} ] – Edmund Apr 5 '16 at 23:01