A couple of new features with this version Windows support (finally)
There were a couple of things preventing this. First off Julia is compiled with gcc on Windows, but node-gyp needs MSVC, that had to be overcome, the the good news was the library libjulia.dll can be used by the MIcrosoft compiler/linker so long as an implib is created first (libjulia.lib). This can be generated from libjulia.dll. The same thing has to occur with libopenlibm.dll, because julia uses libm functionality not available in Microsofts libm. These openlibm symbols had to be taken directly from openlibm.dll because though it's linked into julia.exe, it's not (can't be?) linked into libjulia.dll. Any embedding program on Windows would suffer from this see #11419 <https://github.com/JuliaLang/julia/issues/11419> for instance. Second, this really needs to all happen automatically. The previous version assumed these Microsoft libraries were already in place, but that's really putting too much of a burden for someone that want's to just do `npm install` This version takes care of that. Shared Buffers Hey remember the question in this announce <https://groups.google.com/forum/#!msg/julia-users/xSSrQRThSJw/tZlkQFBmtT0J>, if it's possible for Julia and Javascript to share the same underlying memory buffer for arrays? Well it is possible, and this version implements that. Yes, It is more efficient especially if the array is used multiple times, as before it would have to be copied back and forth and in addition there are some cute tricks. For instance node has problems with large arrays if it has to manage them > x = new Int32Array(536870911) RangeError: Invalid array buffer length at new ArrayBuffer (native) at new Int32Array (native) at repl:1:5 at REPLServer.defaultEval (repl.js:132:27) at bound (domain.js:254:14) at REPLServer.runBound [as eval] (domain.js:267:12) at REPLServer.<anonymous> (repl.js:279:12) at REPLServer.emit (events.js:107:17) at REPLServer.Interface._onLine (readline.js:214:10) at REPLServer.Interface._line (readline.js:553:8) ... > x = new Int32Array(268435455) FATAL ERROR: invalid array length Allocation failed - process out of memory But v8 will allow indexing of arrays up to 2^31 -1 if only those could somehow be created... > bizarro% node > julia = require('node-julia') > var x = julia.eval('Array(Int32,2^31 -1)') undefined > x.length 2147483647 > x[2147483646] = 1; // does not crash.... There are some other updates s as well, but that's the highlights.
