>> Thanks, it helps to know using a tagged vector is a real pattern :)

I don't know that it's a "real pattern". If I saw code like this in
production I would probably raise quite a stink about it during code
reviews. It's a cute hack, but it is also an abuse of a data structure. Now
when I see [:foo 42] I don't know if I have a vector of data or a tagged
value. It's a better idea IMO to use something like deftype or defrecord to
communicate the type of something. I'd much rather see #foo.bar.Age{:val
42} than [:foo.bar/age 42]. At least then when I do (type val) I don't get
clojure.lang.PersistentVector.

Timothy

On Sat, Sep 5, 2015 at 4:55 PM, Amith George <strider...@gmail.com> wrote:

> * Elixir and the BEAM VM are awesome at many things, but I suspect (from
>> experience not evidence) that the defun version is still faster than the
>> elixir version.
>
>
> In Clojure, the defun version is not the default or idiomatic way to write
> functions. I kind of expected it to be slower. Maybe if the core team felt
> it was good enough to be the default, they could make internal changes to
> the core to optimize stuff (pure speculation here).
>
> On the other hand, skimming through the elixir documentation gives me the
> feeling that pattern matched functions is the default way to write. As a
> first class language feature, I find it hard to believe it is slower
> (compared to what in Elixir?).   Or do you mean the Beam VM in general is
> slower than the JVM?
>
> On Sunday, 6 September 2015 02:04:17 UTC+5:30, Rob Lally wrote:
>
>> Out of interest, I ran the benchmarks as is, and got more or less the
>> same results - 15x. Then I tried upgrading the defun dependencies -
>> clojure, core.match and tools.macro - all of which have newer versions, and
>> then running the benchmarks without leiningen’s jvm-opts and in a
>> trampolined repl. The results are better (see below). Still not great - but
>> down from 15x to 10x.
>>
>> That said:
>>
>> * I’m not sure I’d care: for most applications the overhead of function
>> dispatch is probably not the bottleneck.
>> * Elixir and the BEAM VM are awesome at many things, but I suspect (from
>> experience not evidence) that the defun version is still faster than the
>> elixir version.
>>
>>
>> Rob
>>
>> ---
>>
>> user=> (bench (accum-defn 10000))
>> WARNING: Final GC required 2.590098761776679 % of runtime
>> Evaluation count : 429360 in 60 samples of 7156 calls.
>>              Execution time mean : 139.664539 µs
>>     Execution time std-deviation : 4.701755 µs
>>    Execution time lower quantile : 134.451108 µs ( 2.5%)
>>    Execution time upper quantile : 150.214646 µs (97.5%)
>>                    Overhead used : 1.565276 ns
>>
>> Found 5 outliers in 60 samples (8.3333 %)
>>         low-severe       5 (8.3333 %)
>>  Variance from outliers : 20.5880 % Variance is moderately inflated by
>> outliers
>>
>> user=> (bench (accum-defun 10000))
>> Evaluation count : 44940 in 60 samples of 749 calls.
>>              Execution time mean : 1.361631 ms
>>     Execution time std-deviation : 40.489537 µs
>>    Execution time lower quantile : 1.333474 ms ( 2.5%)
>>    Execution time upper quantile : 1.465123 ms (97.5%)
>>                    Overhead used : 1.565276 ns
>>
>> Found 9 outliers in 60 samples (15.0000 %)
>>         low-severe       1 (1.6667 %)
>>         low-mild         8 (13.3333 %)
>>  Variance from outliers : 17.3434 % Variance is moderately inflated by
>> outliers
>>
>> ---
>>
>>
>> On 5 Sep 2015, at 05:16, Amith George <strid...@gmail.com> wrote:
>>
>> Nice. Hadn't heard of it before. It looks interesting. The criterium
>> benchmark is kinda disappointing though. The pattern matched function took
>> nearly 15x the time of the normal function.
>>
>>
>> --
> 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.
>



-- 
“One of the main causes of the fall of the Roman Empire was that–lacking
zero–they had no way to indicate successful termination of their C
programs.”
(Robert Firth)

-- 
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