First of all, nice work :-)

In the docs you keep referring to core.matrix as though it was a particular
implementation, saying things like "X times faster than core.matrix". This
is misleading; core.matrix is an abstract API, which can have many
implementations. Saying something is faster than it doesn't mean anything.
In particular, it's misleading to compare "Neanderthal to core.matrix" by
comparing it to Vectorz and jBlas, since faster implementations could be
written and are underway. Perhaps something a little more verbose like
"Neanderthal to the fastest (current?) core.matrix implementations" would
be less misleading.

On a stylistic note, I like the website design overall, but the graph paper
lines on the back ground are a bit distracting in relation to the text.
Perhaps a white background behind the text, with the graph lines on the
margins would capture the same effect but be less distracting?


At the risk of being a nag, I'd also like to reiterate the desire of the
community to avoid library fragmentation and see Neanderthal implement the
core.matrix protocols. Mike elegantly explicated the reasons for this in
his earlier post: if we all build around a common abstract API, we maximize
the Clojure dream of composability of anything written towards and for that
API. This is important to a lot of Clojurians.

Earlier in the thread you expressed concerns about whether it would really
be so easy to have Neanderthal's as a core.matrix API. Mike Anderson's
response to me suggests he thought you were questioning whether swapping
core.matrix implementations was really so easy. Just in case you were
doubtful of the former more so than the latter, perhaps I can clarify.

Core.matrix is built entirely around abstract protocols which represent the
various matrix operations one might care about for a matrix computation
library. There are protocols for addition, inner product, outer product,
multiply and add, invert, etc. All you would have to do to make Neanderthal
functional as a core.matrix implementation is implement these protocols in
some namespace within your project (perhaps `
uncomplicate.neanderthal.core-matrix`). As Mike pointed out, you wouldn't
even have to implement _all_ the protocols, since core.matrix comes with
default implementations of the things you don't define. Once you'd made the
implementations, you register an example matrix object with core.matrix at
the end of your namespace, and then when a user requires that namespace,
the Neanderthal implementation would be registered, and users could start
instantiating Neanderthal matrices that are 100% compatible with the
core.matrix API. Setting things up this way, you wouldn't even have to
abandon your own API. The two could live in harmony along side each other,
letting folks require and use whichever they like. It really is just that
simple; implement a few protocols, and the API will work. It sounds too
good to be true, and I didn't believe it at first either, but it works.

I get that you've put a lot of energy into this, and commend you for it. I
personally would love to take advantage of that hard work, and am sure
others would as well. However, I think you're going to find adoption
difficult if Neanderthal risks fragmenting the presently coherent state of
numerical computing in Clojure, and imposes inflexibilities upon those who
would use it in their own code. I personally am not willing to boost
performance at the cost of flexibility.

OK; I'll leave it at that.


Respectfully,

Chris


On Wed, Jun 17, 2015 at 8:07 AM, Dragan Djuric <draga...@gmail.com> wrote:

> Version 0.2.0 has just been released to Clojars
>
> New features:
>
> * implemented BLAS support for floats
> * implemented fmap!, freduce, and fold functions for all existing types of
> matrices and vectors
>
> Changes:
>
> No API changes were required for these features.
>
> On Tuesday, January 13, 2015 at 2:13:13 AM UTC+1, Dragan Djuric wrote:
>>
>> I am pleased to announce a first public release of new *very fast *native
>> matrix and linear algebra library for Clojure based on ATLAS BLAS.
>> Extensive *documentation* is at http://neanderthal.uncomplicate.org
>> See the benchmarks at
>> http://neanderthal.uncomplicate.org/articles/benchmarks.html.
>>
>> Neanderthal is a Clojure library that
>>
>> Main project goals are:
>>
>>    - Be as fast as native ATLAS even for linear operations, with no
>>    copying overhead. It is roughly 2x faster than jBLAS for large matrices,
>>    and tens of times faster for small ones. Also faster than core.matrix for
>>    small and large matrices!
>>    - Fit well into idiomatic Clojure - Clojure programmers should be
>>    able to use and understand Neanderthal like any regular Clojure library.
>>    - Fit well into numerical computing literature - programmers should
>>    be able to reuse existing widespread BLAS and LAPACK programming know-how
>>    and easily translate it to Clojure code.
>>
>> Implemented features
>>
>>    - Data structures: double vector, double general dense matrix (GE);
>>    - BLAS Level 1, 2, and 3 routines;
>>    - Various Clojure vector and matrix functions (transpositions,
>>    submatrices etc.);
>>    - Fast map, reduce and fold implementations for the provided
>>    structures.
>>
>> On the TODO list
>>
>>    - LAPACK routines;
>>    - Banded, symmetric, triangular, and sparse matrices;
>>    - Support for complex numbers;
>>    - Support for single-precision floats.
>>
>>
>> Call for help:
>> Everything you need for Linux is in Clojars. If you know your way around
>> gcc on OS X, or around gcc and MinGW on Windows, and you are willing to
>> help providing the binary builds for those (or other) systems, please
>> contact me. There is an automatic build script, but gcc, atlas and other
>> build tools need to be properly set up on those systems.
>>
>>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to a topic in the
> Google Groups "Clojure" group.
> To unsubscribe from this topic, visit
> https://groups.google.com/d/topic/clojure/dFPOOw8pSGI/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to
> clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to