This is indeed a bug. A careless tweak was made to the format, so that MX files created by Version 11.1 or newer aren't even recognized as MX files by pre-11.1.0 versions. So Get
is succeeding, reading the binary file as text and returning Null
because it encounters a zero byte, interpreted as end of file, early on. If for some reason it is important to you that old versions properly recognize and reject newer MX files, you can use the program below after you DumpSave
to tweak the MX file. This version will be loaded by V11.1+, and properly rejected as too new by older versions.
On the plus side, one thing we did in the forth coming 11.2 is improve cross-version compatibility of MX files. So, unless a new feature forces an incompatible change in the format, 11.2 will be able to read MX files from later versions. (Obviously, new features won't work in an older kernel).
newHeader = {40, 42, 84, 104, 105, 115, 32, 105, 115, 32, 97, 32, 77,
97, 116, 104, 101, 109, 97, 116, 105, 99, 97, 32, 98, 105, 110, 97,
114, 121, 32, 100, 117, 109, 112, 32, 102, 105, 108, 101, 46, 32,
73, 116, 32, 99, 97, 110, 32, 98, 101, 32, 108, 111, 97, 100, 101,
100, 32, 119, 105, 116, 104, 32, 71, 101, 116, 46, 42, 41};
newFooter = {40, 42, 69, 110, 100, 32, 111, 102, 32, 77, 97, 116, 104,
101, 109, 97, 116, 105, 99, 97, 32, 98, 105, 110, 97, 114, 121,
32, 100, 117, 109, 112, 32, 102, 105, 108, 101, 42, 41, 0};
fixUp111PlusMX[file_] := With[{bytes = BinaryReadList[file], path = AbsoluteFileName[file]},
BinaryWrite[path,
Join[newHeader, Take[bytes, {79, -49}], newFooter]];
Close[path]
]
Import[filename,"MX"]
because my original filename did not have the .mx extension and that is what quietly fails and returnsNull
, at least on Windows and with version 10.4.1. Without the format as second argument it behaves as you describe. With version 9.0.1. trying to force the "MX" format hangs the Kernel, I don't know if I like that better :-). Could you try what happens for you with the explicit "MX"? $\endgroup$Import
to infer the format. $\endgroup$