Language and Programming
Maple 18 includes the following enhancements to the Maple language and programming facilities:
New URL Package
New InertForm Package
Compiler Run-time Library
Random Tools
Improvements to the sort Command
String Tools
Improvements to the Code Editor
Interface and Kernelopts
New Option "indexorder" for Entries and Indices
A new URL package has been added to enable downloading and uploading data across networks. The URL package supports the http, https, and ftp protocols. This package extends the functionality previously available through the HTTP package.
The InertForm package gives you tools to prevent simplification and evaluation so that you can examine and work with exactly what was entered.
Example
For details, see the InertForm in Maple 18 page.
In Maple 18, the compiler run-time library was made thread-safe. The result is that an already-compiled procedure that is thread-safe can be run in multiple threads.
To do this, add `option threadsafe` to the procedure before compiling it, so that the compiler knows that the procedure is thread-safe. Note that adding this option does not make anything thread-safe in itself. It is the responsibility of the code author to ensure that their procedure is writen in a thread-safe way; this option simply informs the compiler that the authored code is thread-safe.
For more information, see Procedure Options and Compiler:-Compile.
You can now generate random matrices and vectors using the RandomTools package by using the new flavors Matrix and Vector. When generating matrices and vectors of floats and integers, these flavors are very fast.
In addition, the list flavor has been updated to generate lists of integers and floats much faster than in previous versions of Maple.
RandomTools:-Generate 'Matrix'integer,5,5 ;
RandomTools:-Generate 'Matrix' polynom integer range=0..1, x, degree=10 , 4, 4 ;
RandomTools:-Generate 'Vector'float, 10, datatype=float8 ;
RandomTools:-Generate 'Vectorrow' floatdigits=4, integerrange=5..10 ;
timereal RandomTools:-Generate list integer, 106 ;
0.136
In previous versions of Maple, this takes more than 5 seconds to complete.
Improvements to the sort command in Maple 18 offer faster sorting through automatic parallel execution and new key sorting, as well as guaranteed stable sorting.
Parallel Sort
In Maple 18, the sort command takes advantage of multiple cores. The following graph shows the timing difference between sorts of random permutations run in Maple 17 and Maple 18.
Parallel sorting is used for all of Maple's built-in sort algorithms, automatically taking advantage of all of the cores available on your computer. When a custom comparison function is given, sort will perform the operation in serial.
Key Sorting
Maple 18 adds support for key sorting. Key sorting allows users to specify a function to map elements to keys. The input is then sorted by sorting the corresponding keys. For example, the following list of lists can be sorted by comparing the first element of each sublist.
sort 9, 4, 7, 2, 5, 8, 3, 6, 1 ,key=x→x1 ;
1,2,3,4,5,6,7,8,9
In previous versions of Maple, this could be achieved by using a custom comparison function. Key sorting is faster because it only requires that the key function be called O(n) times, whereas a comparison function will be called O(n*log(n)) times. In addition, by performing the underlying sort operation with the default Maple comparison function, sorting can be performed in parallel.
The following example shows the timing difference (in seconds) between sorting with a comparison function and a key function.
L ≔ seq i, i in combinat:-randperm 3⋅105 :
timereal sort L, x,y→x1 ≤ y1 ;
11.040
timereal sort L, key=x→x1 ;
1.003
Stable Sorting
The Maple 18 sort function is now stable. A stable sort function guarantees that equal elements are left in the same relative order in the output as in the input. This is most meaningful when sorting using a custom comparison function or a key sorting function. The following list is sorted according to the first element in the list. The lists whose first elements are equal end up in the same relative order (as shown by the second element) as specified in the input list.
sort1, 1, 2, 1, 3, 1, 1, 2, 2, 2, 3, 2, 1, 3, 2, 3, 3, 3, x, y→x1 ≤ y1 ;
1,1,1,2,1,3,2,1,2,2,2,3,3,1,3,2,3,3
Stable sorting is available for all built-in Maple sort algorithms and any custom comparison function that follows the guidelines outlined in the sort documentation. By default, the comparison function must be a non-strict (less than or equal to) comparison function. To use a strict (less than) comparison function, one must specify that using the strict option.
sort 1,1, 2,1, 3,1, 1,2, 2,2, 3,2, 1,3, 2,3, 3,3 ,strict=x,y→x1<y1 ;
There are three new commands in the StringTools package:
DifferencePositions: Convert a string to a list of characters.
IsDerangement: Test whether a string is a derangement of another string.
Snarf: Extract a prefix consisting of specified characters from a string.
StringTools:-DifferencePositions edit, tide
1,2,3,4
StringTools:-IsDerangement edit, tide
true
StringTools:-SnarftiDE, 'lower';
ti
Some usability improvements have been made to the Code Editor. For details, see Embedded Component Enhancements.
A new interface variable, worksheetdir, returns the path to the directory of the active worksheet. For details, see interface.
Two new kernel options, gctotaltime and gctotaltime[real], return the total amount of time spent performing garbage collection in CPU time and real time. For details, see kernelopts.
The entries and indices procedures accept a new option, indexorder. The indexorder option causes the returned elements to be sorted by the values of the index. This is most useful for the entries command, where one wants the the entires of a table sorted based on the indices of the table. For example
t ≔ table 1.=one, 2. = two,3.=three, 4. = four, 5.=five, 6.=six, 7. = seven, 8.=eight, 9.=nine, 10.=ten ;
t:=table2.=two,6.=six,7.=seven,5.=five,3.=three,10.=ten,4.=four,1.=one,8.=eight,9.=nine
entriest;
two,six,seven,five,three,ten,four,one,eight,nine
entriest,indexorder;
one,two,three,four,five,six,seven,eight,nine,ten
See Also
What's New in Maple18
Download Help Document