The first thing I did was to check how slicing and indexing works. If anyone else is curious it is explained here<p><a href="http://ocaml.xyz/chapter/slicing.html" rel="nofollow">http://ocaml.xyz/chapter/slicing.html</a><p>The syntax is quite verbose. Anyway to make it better with macros ? Coming from number crunching world makes me wish that the syntax for list and arrays in OCaml were swapped.<p>On a different note, I hope Owl allows flexibility over memory layout in future. Inter-operating with Fortran is often necessary. Besides that, compile time reshaping n-dimensinal-arrays is very useful for having efficient code. As far as I know Julia can do this with macros, may be without macros too.<p>> OCaml’s Bigarray can further use kind GADT to specify the<p>> number type, precision, and memory layout. In Owl, I only<p>> keep the first two but fix the last one because Owl only<p>> uses C-layout, or Row-based layout in its implementation.<p>> See the type definition in Ndarray module.
It's interesting to read through the contents here:<p><pre><code> http://ocaml.xyz/chapter/index.html
</code></pre>
They seem to be implementing the most popular parts of the Python numerical ecosystem from ndarrays to AD graph and neural nets, as well as plotting.
How does Owl handle representing arrays of Float64s (for example) in BLAS-compatible format? That is, as contiguous memory blocks, instead of having each float value individually heap allocated and boxed with the array being an array of pointers to these values. That ability seems like the most basic requirement for a language in which scientific computing is done—if for no other reason than to call BLAS and LAPACK and other Fortran/C/C++ libraries. Vanilla OCaml doesn't support this (as far as I'm aware), so you'd need something like NumPy which grafts typed arrays onto Python, but for OCaml. Of course, OCaml already has typed arrays, unlike Python, there's just a legacy insistence that all collections work with pointers to values, since other wise you might need to compile generic code more than once (god forbid). Is such an "efficient array library" part of Owl? Any tidbits on how it works?
I am comfortable with Python, Julia and R, but the static typing and functional aspects of OCaml make Owl look enticing.<p>Can anyone point me towards a good free online resource for learning OCaml?
By keeping Part 1 as a placeholder they are potentially missing out on a lot of new users who are not familiar with functional programming but are willing to learn it through the use case of scientific computing.
Kinda wish they had gone with F#. Would've been less work for them to write nice functional wrappers around existing .NET libraries.<p>Of course, you can't get funding for something that unambitious, so I understand the tack. Still...<p>I look forward to trying this out once more significant work has been done. I'm a big fan of OCaml-like languages, if that wasn't already obvious.