<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Miniboxing News</title>
    <description>Latest development news for the miniboxing plugin for Scala.</description>
    <link>http://scala-miniboxing.org</link>
    <atom:link href="http://scala-miniboxing.org/feed.xml" rel="self" type="application/rss+xml" />
    
      <item>
        <title>Miniboxing @ PNWScala 2014</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;&lt;img align=&quot;left&quot; src=&quot;/images/pnwscala.png&quot; width=&quot;40px&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The miniboxing presentation at &lt;b&gt;&lt;a href=&quot;http://pnwscala.org&quot; target=&quot;_blank&quot;&gt;PNWScala&lt;/a&gt;&lt;/b&gt; is now available! A huge thanks to &lt;a href=&quot;https://twitter.com/tlockney&quot; target=&quot;_blank&quot;&gt;Thomas Lockney&lt;/a&gt; and the PNWScala organizers for the wonderful conference and the &lt;a href=&quot;http://confreaks.com/events/PNWS2014&quot; target=&quot;_blank&quot;&gt;confreaks guys&lt;/a&gt; who recorded the presentation!&lt;/p&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;center&gt;
&lt;iframe width=&quot;800px&quot; height=&quot;400px&quot; src=&quot;//www.youtube.com/embed/RnIupOJv_oM&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/center&gt;

&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to follow the live demo in the presentation on your own, &lt;a href=&quot;/example_pureimage.html&quot;&gt;you can use this tutorial&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 13 Dec 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/12/13/pureimage-example.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/12/13/pureimage-example.html</guid>
      </item>
    
      <item>
        <title>... if only miniboxing could TALK</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;One of the most difficult problems in using specialization is finding out when something went wrong and the code reverts
to using boxed primitives. This gave birth to a very useful post by Alex Prokopec explaining the &lt;a href=&quot;http://axel22.github.io/2013/11/03/specialization-quirks.html&quot; target=&quot;_blank&quot;&gt;quirks of specialization&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/issues/137&quot; target=&quot;_blank&quot;&gt;Some of these quirks also apply to miniboxing&lt;/a&gt;. Yet, there is an important difference. To see it, one should ask the question “what is a quirk?” for specialization. A quirk, as Alex’s explanation shows, is a design or technical limitation that results
in a seemingly correct compilation, but that produces suboptimal code. From this perspective, we can say that:&lt;/p&gt;

&lt;h3 id=&quot;quirk--limitation--silent-failure&quot;&gt;Quirk = limitation + silent failure&lt;/h3&gt;

&lt;p&gt;As everything else, miniboxing and specialization have to make compromises. These can occur at different levels, from well-understood
design decisions that sacrifice certain code patterns all the way to purely technical limitations where the problem is simply not worth the
effort to solve.&lt;/p&gt;

&lt;p&gt;But there is a second ingredient: &lt;strong&gt;the silent failure&lt;/strong&gt;. Without silently failing, specialization would just point the user into the
right direction by providing a workaround or explaining why a limitation occurred. Yet, not doing so made it much harder to use,
allowing only an elite of the Scala community to benefit from the unboxed generics. If only specialization could TALK…&lt;/p&gt;

&lt;p&gt;Well, miniboxing does talk :)&lt;/p&gt;

&lt;h3 id=&quot;miniboxing-warnings&quot;&gt;Miniboxing Warnings&lt;/h3&gt;

&lt;p&gt;A new feature of the miniboxing plugin is that it talks to you about performance. And how you can improve it. And this will
expose all the code where it was not able to correctly specialize generics.&lt;/p&gt;

&lt;p&gt;For example, here are a few cases:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;When the type arguments do not allow an unambiguous choice between primitives and references:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ mb-scala -language:_
...

scala&amp;gt; def foo[@miniboxed T](t: T) = t
foo: [T](t: T)T

scala&amp;gt; foo[Int](3) // clearly a primitive
res0: Int = 3

scala&amp;gt; foo[String](&quot;5&quot;) // clearly an object
res1: String = 5

scala&amp;gt; foo[Any](2) // could be both

&amp;lt;console&amp;gt;:9: warning: Using the type argument &quot;Any&quot; for the miniboxed type
parameter T of method foo is not specific enough, as it could mean either a
primitive or a reference type. Although method foo is miniboxed, it won't
benefit from that:
              foo[Any](2)
                 ^
res2: Any = 2

scala&amp;gt; foo[T forSome { type T }](2) // uh-oh

&amp;lt;console&amp;gt;:9: warning: Using the type argument &quot;T forSome { type T }&quot; for
the miniboxed type parameter T of method foo is not specific enough, as it
could mean either a primitive or a reference type. Although method foo is
miniboxed, it won't benefit from that:
              foo[T forSome { type T }](2)
                 ^
res3: Any = 2&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;when adding an annotation could benefit the transformation:
    &lt;ul&gt;
      &lt;li&gt;at the &lt;strong&gt;definition site&lt;/strong&gt;:&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;scala&amp;gt; class C[@miniboxed T]
defined class C

scala&amp;gt; def foo[X] = new C[X]

&amp;lt;console&amp;gt;:8: warning: The following code could benefit from miniboxing
specialization if the type parameter X of method foo would be marked as
&quot;@miniboxed X&quot; (it would be used to instantiate miniboxed type parameter
T of C)
       def foo[X] = new C[X]
                    ^
foo: [X]=&amp;gt; C[X]

scala&amp;gt; class D[Z] extends C[Z]

&amp;lt;console&amp;gt;:8: warning: The following code could benefit from miniboxing
specialization if the type parameter Z of class D would be marked as
&quot;@miniboxed Z&quot; (it would be used to instantiate miniboxed type parameter
T of C)
       class D[Z] extends C[Z]
             ^
defined class D&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;at the &lt;strong&gt;use site&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;scala&amp;gt; def foo[X] = &quot;x&quot;
foo: [X]=&amp;gt; String

scala&amp;gt; foo[Int]
&amp;lt;console&amp;gt;:9: warning: The method foo would benefit from miniboxing type
parameter X, since it is instantiated by a primitive type.
              foo[Int]
                 ^
res0: String = x

scala&amp;gt; def bar[@miniboxed X] = foo[X]
&amp;lt;console&amp;gt;:8: warning: The method foo would benefit from miniboxing type
parameter X, since it is instantiated by miniboxed type parameter X of method bar.
       def bar[@miniboxed X] = foo[X]
                               ^
bar: [X]=&amp;gt; String&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;when a technical limitation prevents the plugin from compiling the code:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;scala&amp;gt; class W[@miniboxed Z](z: Z) { println(z) }

&amp;lt;console&amp;gt;:7: warning: The following constructor statement will not be
specialized in the miniboxed trait W. This is a technical limitation
that can be worked around: (please see
https://github.com/miniboxing/miniboxing-plugin/issues/64)
       class W[@miniboxed Z](z: Z) { println(z) }
                                            ^
&amp;lt;console&amp;gt;:7: error: The following code is accessing field z of miniboxed
class/trait W, a pattern which becomes invalid after the miniboxing
transformation. Please allow Scala to generate accessors by using val/var
or removing the &quot;private[this]&quot; qualifier: val z: Z&quot;.
       class W[@miniboxed Z](z: Z) { println(z) }
                                             ^
defined class W&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;when a class you might expect to be specialized won’t be:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;scala&amp;gt; class C[@miniboxed T] {
     |   class D {
     |     def foo(t: T): T = t
     |   }
     | }
&amp;lt;console&amp;gt;:8: warning: The class D will not be miniboxed based on type 
parameter(s) T of miniboxed class C. To have it transformed, declare
new type parameters marked with @miniboxed and instantiate it using
the parameters from class C.
         class D {
               ^
defined class C&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;ul&gt;
  &lt;li&gt;or when a the code is just suboptimal:&lt;/li&gt;
&lt;/ul&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;scala&amp;gt; class W[@miniboxed Z](val z: Z) { println(z) }

&amp;lt;console&amp;gt;:7: warning: The following constructor statement will not be
specialized in the miniboxed trait W. This is a technical limitation
that can be worked around: (please see
https://github.com/miniboxing/miniboxing-plugin/issues/64)
       class W[@miniboxed Z](val z: Z) { println(z) }
                                                ^
&amp;lt;console&amp;gt;:7: warning: The following code could not benefit from m
iniboxing specialization due to technical limitations:
       class W[@miniboxed Z](val z: Z) { println(z) }
                                                 ^
defined class W&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Finally, in some cases specialization is lost because some class or method in the library wasn’t miniboxed:&lt;/p&gt;

&lt;figure class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-text&quot; data-lang=&quot;text&quot;&gt;$ mb-scala
...

scala&amp;gt; 3 :: Nil
res0: List[Int] = List(3)

scala&amp;gt; :quit

$ mb-scala -P:minibox:warn-all
...

scala&amp;gt; 3 :: Nil
&amp;lt;console&amp;gt;:8: warning: The method scala.collection.immutable.List.::
would benefit from miniboxing type parameter B, since it is 
instantiated by a primitive type.
              3 :: Nil
                ^
res0: List[Int] = List(3)

scala&amp;gt; :quit&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;

&lt;p&gt;Hope it will be useful!&lt;/p&gt;

&lt;h3 id=&quot;thanks-guys&quot;&gt;Thanks guys!&lt;/h3&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://github.com/pstutz&quot; target=&quot;_blank&quot;&gt;@pstutz&lt;/a&gt;, &lt;a href=&quot;https://github.com/ichoran&quot; target=&quot;_blank&quot;&gt;@ichoran&lt;/a&gt;, &lt;a href=&quot;https://github.com/dragos&quot; target=&quot;_blank&quot;&gt;@dragos&lt;/a&gt; and &lt;a href=&quot;http://twitter.com/StuHood&quot; target=&quot;_blank&quot;&gt;@StuHood&lt;/a&gt; for their precious comments, which
spawned this feature!&lt;/p&gt;
</description>
        <pubDate>Tue, 21 Oct 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/10/21/miniboxing-warnings.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/10/21/miniboxing-warnings.html</guid>
      </item>
    
      <item>
        <title>Late Data Layout Transformation</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;&lt;img src=&quot;/images/ldl-frog.png&quot; width=&quot;15%&quot; align=&quot;right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Late Data Layout (LDL) is the underlying transformation mechanism used by the miniboxing plugin. It generalizes data representation transformations,
enabling optimal specialization of miniboxed code. LDL enables other cool transformations as well: &lt;a href=&quot;https://github.com/miniboxing/value-plugin&quot; target=&quot;_blank&quot;&gt;value classes&lt;/a&gt; and &lt;a href=&quot;https://github.com/miniboxing/staging-plugin&quot; target=&quot;_blank&quot;&gt;multi-stage execution support&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The theory will be presented at OOPSLA 2014, in Portland, OR. &lt;br /&gt;
For more details, check out &lt;a href=&quot;/ldl&quot;&gt;scala-miniboxing.org/ldl&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 13 Oct 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/10/13/late-data-layout.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/10/13/late-data-layout.html</guid>
      </item>
    
      <item>
        <title>Will miniboxing be merged into Scala?</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;Lately the question of merging the miniboxing plugin into the Scala compiler has arisen in &lt;a href=&quot;https://twitter.com/alexey_r/status/481766677399756800&quot; target=&quot;_blank&quot;&gt;different&lt;/a&gt; &lt;a href=&quot;https://groups.google.com/d/msg/scala-debate/YTmYhVAwt7M/vVmkJIwmc6wJ&quot; target=&quot;_blank&quot;&gt;contexts&lt;/a&gt;. We have seen &lt;a href=&quot;https://groups.google.com/d/msg/scala-internals/Fw37NmUUiqs/nlqyupYaGNIJ&quot; target=&quot;_blank&quot;&gt;Scala collections miniboxed by hand&lt;/a&gt;, and we have even &lt;a href=&quot;https://twitter.com/stuhood/status/429124902214316032&quot; target=&quot;_blank&quot;&gt;received a suggestion&lt;/a&gt; that miniboxing should be an opt-out instead of opt-in, meaning that all type parameters automatically undergo the miniboxing transformation, as if they were annotated with &lt;code class=&quot;highlighter-rouge&quot;&gt;@miniboxed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We are very glad such questions are asked, as it gives us the opportunity to clarify the roadmap.&lt;/p&gt;

&lt;h2 id=&quot;so-will-the-miniboxing-plugin-be-merged-into-scala&quot;&gt;So, will the miniboxing plugin be merged into Scala?&lt;/h2&gt;

&lt;h3 id=&quot;short-answer&quot;&gt;Short answer&lt;/h3&gt;

&lt;p&gt;It depends on you! For now, it will stay a plugin, but the more projects use miniboxing, the more chances it has to become the standard.&lt;/p&gt;

&lt;p&gt;###Long answer:&lt;/p&gt;

&lt;p&gt;Miniboxing is not currently on the Scala roadmap, but we can change that!&lt;/p&gt;

&lt;p&gt;The first step for any plugin that changes the compilation pipeline is to become trusted. And to do so, we need projects using it and reporting their experience. We have already tested the &lt;a href=&quot;/example_linkedlist.html&quot;&gt;Scala linked list&lt;/a&gt; with 1.5-4x speedups, the &lt;a href=&quot;/2014/06/16/spire-miniboxed.html&quot;&gt;spire&lt;/a&gt; library and we will continue trying other use-cases. But there’s a huge number of cool projects that could use the miniboxing transformation and we need your help!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So if you’d like to see miniboxing in Scala:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;/using_sbt.html&quot; target=&quot;_blank&quot;&gt;Start using it as a plugin&lt;/a&gt;, no matter how big or small your project is! Rest assured that &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/tree/wip/tests/correctness/resources/miniboxing/tests/compile&quot; target=&quot;_blank&quot;&gt;with 150+ tests&lt;/a&gt; &lt;a href=&quot;/2013/12/04/travis.html&quot;&gt;running with each commit&lt;/a&gt;, there’s little risk that miniboxing will break your code;&lt;/li&gt;
  &lt;li&gt;Ask &lt;a href=&quot;https://groups.google.com/forum/#!forum/scala-miniboxing&quot; target=&quot;_blank&quot;&gt;questions on the mailing list&lt;/a&gt; or &lt;a href=&quot;https://twitter.com/miniboxing&quot; target=&quot;_blank&quot;&gt;via twitter&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;Report any errors you encounter on the &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/issues&quot; target=&quot;_blank&quot;&gt;github issue tracker&lt;/a&gt;;&lt;/li&gt;
  &lt;li&gt;Write about your use-case and &lt;a href=&quot;https://github.com/miniboxing/miniboxing.github.io&quot; target=&quot;_blank&quot;&gt;submit a pull request for the website&lt;/a&gt; (we welcome contributions!);&lt;/li&gt;
  &lt;li&gt;Help spread the word, so others can use miniboxing too.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the miniboxing plugin becomes a common sight in Scala project builds, it may be worth merging it into &lt;code class=&quot;highlighter-rouge&quot;&gt;scalac&lt;/code&gt;. Then again, having it as a &lt;code class=&quot;highlighter-rouge&quot;&gt;scalac&lt;/code&gt; plugin means easier development and quicker fixes, so keeping it a plugin might not a bad solution at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To wrap up, miniboxing will stay as a separate compiler plugin at least for the next Scala release. Whether or not it will become part of &lt;code class=&quot;highlighter-rouge&quot;&gt;scalac&lt;/code&gt; in the future depends on you!&lt;/strong&gt;&lt;/p&gt;

&lt;h2 id=&quot;will-scala-collections-be-transformed-with-miniboxing&quot;&gt;Will Scala collections be transformed with miniboxing?&lt;/h2&gt;

&lt;p&gt;We aim to have an alternative set of collections transformed using miniboxing, which map 1:1 with Scala collections. But this is a medium-term goal.&lt;/p&gt;

&lt;h2 id=&quot;will-miniboxing-become-opt-out&quot;&gt;Will miniboxing become opt-out?&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;YES!&lt;/strong&gt; We are currently working on a flag that will turn miniboxing on by default. Stay tuned! :)&lt;/p&gt;
</description>
        <pubDate>Fri, 27 Jun 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/06/27/miniboxing-roadmap.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/06/27/miniboxing-roadmap.html</guid>
      </item>
    
      <item>
        <title>Spire. The miniboxed one.</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;The benchmarks for spire compiled with miniboxing are in! (generated from &lt;a href=&quot;https://github.com/miniboxing/spire/tree/miniboxed&quot; target=&quot;_blank&quot;&gt;this branch&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;b&gt;So, why should you care about the miniboxing plugin? &lt;a href=&quot;http://scaladays.org/#schedule/Miniboxing--Specialization-on-a-Diet&quot; target=&quot;_blank&quot;&gt;Join the ScalaDays talk to learn the three reasons!&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ERRATA:&lt;/strong&gt; The benchmarking numbers were completely redone, after we found out we mixed the log files. The updated conclusions are more nuanced:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;most benchmarks show miniboxing is close to specialization, even being faster in some cases&lt;/li&gt;
  &lt;li&gt;arrays do slow down miniboxing more than expected (10-20%) – we will certainly look into this&lt;/li&gt;
  &lt;li&gt;in some cases generic is better than both specialization and miniboxing (&lt;code class=&quot;highlighter-rouge&quot;&gt;MapSemigroupBenchmarks&lt;/code&gt;)&lt;/li&gt;
  &lt;li&gt;there are still 2 benchmarks miniboxing can’t run, we’ll be digging into those&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are the numbers:&lt;/p&gt;

&lt;h2 id=&quot;fibbenchmarks&quot;&gt;FibBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(ns)&lt;/th&gt;
      &lt;th&gt;specialized (ns)&lt;/th&gt;
      &lt;th&gt;generic (ns)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;IntFibJava&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;IntFibScala&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;IntFibGen&lt;/td&gt;
      &lt;td&gt;43&lt;/td&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;594&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;LongFibJava&lt;/td&gt;
      &lt;td&gt;68&lt;/td&gt;
      &lt;td&gt;68&lt;/td&gt;
      &lt;td&gt;70&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;LongFibScala&lt;/td&gt;
      &lt;td&gt;65&lt;/td&gt;
      &lt;td&gt;65&lt;/td&gt;
      &lt;td&gt;68&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;LongFibGen&lt;/td&gt;
      &lt;td&gt;66&lt;/td&gt;
      &lt;td&gt;66&lt;/td&gt;
      &lt;td&gt;1193&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BigIntegerFibJava&lt;/td&gt;
      &lt;td&gt;23149&lt;/td&gt;
      &lt;td&gt;23384&lt;/td&gt;
      &lt;td&gt;23847&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BigIntegerFibGen&lt;/td&gt;
      &lt;td&gt;26402&lt;/td&gt;
      &lt;td&gt;26296&lt;/td&gt;
      &lt;td&gt;26614&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BigIntFibScala&lt;/td&gt;
      &lt;td&gt;24114&lt;/td&gt;
      &lt;td&gt;24067&lt;/td&gt;
      &lt;td&gt;24130&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BigIntFibGen&lt;/td&gt;
      &lt;td&gt;26056&lt;/td&gt;
      &lt;td&gt;26368&lt;/td&gt;
      &lt;td&gt;26424&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NaturalFibGen&lt;/td&gt;
      &lt;td&gt;15116&lt;/td&gt;
      &lt;td&gt;15326&lt;/td&gt;
      &lt;td&gt;15133&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SpireFib&lt;/td&gt;
      &lt;td&gt;6360&lt;/td&gt;
      &lt;td&gt;6382&lt;/td&gt;
      &lt;td&gt;6402&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;mo5benchmarks&quot;&gt;Mo5Benchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(ms)&lt;/th&gt;
      &lt;th&gt;specialized (ms)&lt;/th&gt;
      &lt;th&gt;generic (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;HBMo5&lt;/td&gt;
      &lt;td&gt;38.1&lt;/td&gt;
      &lt;td&gt;29.8&lt;/td&gt;
      &lt;td&gt;88.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;MMo5&lt;/td&gt;
      &lt;td&gt;47.7&lt;/td&gt;
      &lt;td&gt;32.6&lt;/td&gt;
      &lt;td&gt;107.5&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;powbenchmarks&quot;&gt;PowBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(ms)&lt;/th&gt;
      &lt;th&gt;specialized (ms)&lt;/th&gt;
      &lt;th&gt;generic (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;LongPowForInt&lt;/td&gt;
      &lt;td&gt;1.90&lt;/td&gt;
      &lt;td&gt;1.89&lt;/td&gt;
      &lt;td&gt;1.94&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DoublePowForInt&lt;/td&gt;
      &lt;td&gt;16.94&lt;/td&gt;
      &lt;td&gt;16.88&lt;/td&gt;
      &lt;td&gt;16.92&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BigIntPowForInt&lt;/td&gt;
      &lt;td&gt;19.44&lt;/td&gt;
      &lt;td&gt;18.64&lt;/td&gt;
      &lt;td&gt;17.65&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;LongPowForLong&lt;/td&gt;
      &lt;td&gt;1.69&lt;/td&gt;
      &lt;td&gt;1.66&lt;/td&gt;
      &lt;td&gt;1.68&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DoublePowForLong&lt;/td&gt;
      &lt;td&gt;16.76&lt;/td&gt;
      &lt;td&gt;16.86&lt;/td&gt;
      &lt;td&gt;16.84&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BigIntPowForLong&lt;/td&gt;
      &lt;td&gt;23.05&lt;/td&gt;
      &lt;td&gt;22.63&lt;/td&gt;
      &lt;td&gt;22.70&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DoublePowForDouble&lt;/td&gt;
      &lt;td&gt;15.84&lt;/td&gt;
      &lt;td&gt;15.94&lt;/td&gt;
      &lt;td&gt;15.90&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;complexaddbenchmarks&quot;&gt;ComplexAddBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(ms)&lt;/th&gt;
      &lt;th&gt;specialized (ms)&lt;/th&gt;
      &lt;th&gt;generic (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;AddComplexesDirect&lt;/td&gt;
      &lt;td&gt;4.19&lt;/td&gt;
      &lt;td&gt;3.68&lt;/td&gt;
      &lt;td&gt;7.69&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddComplexesGeneric&lt;/td&gt;
      &lt;td&gt;4.31&lt;/td&gt;
      &lt;td&gt;5.20&lt;/td&gt;
      &lt;td&gt;7.74&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddFastComplexes&lt;/td&gt;
      &lt;td&gt;1.56&lt;/td&gt;
      &lt;td&gt;1.57&lt;/td&gt;
      &lt;td&gt;1.55&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddFloatComplexesBoxed&lt;/td&gt;
      &lt;td&gt;2.44&lt;/td&gt;
      &lt;td&gt;2.42&lt;/td&gt;
      &lt;td&gt;2.25&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddFloatComplexesUnboxed&lt;/td&gt;
      &lt;td&gt;1.58&lt;/td&gt;
      &lt;td&gt;1.58&lt;/td&gt;
      &lt;td&gt;1.58&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;rexbenchmarks&quot;&gt;RexBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;pow&lt;/th&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(us)&lt;/th&gt;
      &lt;th&gt;specialized (us)&lt;/th&gt;
      &lt;th&gt;generic (us)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;Direct&lt;/td&gt;
      &lt;td&gt;45.5&lt;/td&gt;
      &lt;td&gt;45.8&lt;/td&gt;
      &lt;td&gt;47.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;Generic&lt;/td&gt;
      &lt;td&gt;229.6&lt;/td&gt;
      &lt;td&gt;57.9&lt;/td&gt;
      &lt;td&gt;396.4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;12&lt;/td&gt;
      &lt;td&gt;Direct&lt;/td&gt;
      &lt;td&gt;152.8&lt;/td&gt;
      &lt;td&gt;111.5&lt;/td&gt;
      &lt;td&gt;170.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;12&lt;/td&gt;
      &lt;td&gt;Generic&lt;/td&gt;
      &lt;td&gt;704.8&lt;/td&gt;
      &lt;td&gt;156.4&lt;/td&gt;
      &lt;td&gt;1058.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14&lt;/td&gt;
      &lt;td&gt;Direct&lt;/td&gt;
      &lt;td&gt;622.9&lt;/td&gt;
      &lt;td&gt;516.9&lt;/td&gt;
      &lt;td&gt;646.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14&lt;/td&gt;
      &lt;td&gt;Generic&lt;/td&gt;
      &lt;td&gt;1253.0&lt;/td&gt;
      &lt;td&gt;531.4&lt;/td&gt;
      &lt;td&gt;3423.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;Direct&lt;/td&gt;
      &lt;td&gt;2076.0&lt;/td&gt;
      &lt;td&gt;2081.9&lt;/td&gt;
      &lt;td&gt;2723.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;Generic&lt;/td&gt;
      &lt;td&gt;4256.0&lt;/td&gt;
      &lt;td&gt;2024.4&lt;/td&gt;
      &lt;td&gt;12765.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18&lt;/td&gt;
      &lt;td&gt;Direct&lt;/td&gt;
      &lt;td&gt;9499.6&lt;/td&gt;
      &lt;td&gt;9778.3&lt;/td&gt;
      &lt;td&gt;7361.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18&lt;/td&gt;
      &lt;td&gt;Generic&lt;/td&gt;
      &lt;td&gt;17181.4&lt;/td&gt;
      &lt;td&gt;7720.6&lt;/td&gt;
      &lt;td&gt;48629.5&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;mapsemigroupbenchmarks&quot;&gt;MapSemigroupBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;mapSize&lt;/th&gt;
      &lt;th&gt;mapType&lt;/th&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(us)&lt;/th&gt;
      &lt;th&gt;specialized (us)&lt;/th&gt;
      &lt;th&gt;generic (us)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;54.7&lt;/td&gt;
      &lt;td&gt;54.4&lt;/td&gt;
      &lt;td&gt;54.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;53.8&lt;/td&gt;
      &lt;td&gt;54.6&lt;/td&gt;
      &lt;td&gt;54.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;64.0&lt;/td&gt;
      &lt;td&gt;64.2&lt;/td&gt;
      &lt;td&gt;48.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;69.7&lt;/td&gt;
      &lt;td&gt;51.9&lt;/td&gt;
      &lt;td&gt;74.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;39.5&lt;/td&gt;
      &lt;td&gt;62.6&lt;/td&gt;
      &lt;td&gt;63.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;55.5&lt;/td&gt;
      &lt;td&gt;49.5&lt;/td&gt;
      &lt;td&gt;48.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;79.9&lt;/td&gt;
      &lt;td&gt;80.3&lt;/td&gt;
      &lt;td&gt;79.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;80.3&lt;/td&gt;
      &lt;td&gt;78.8&lt;/td&gt;
      &lt;td&gt;80.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;78.6&lt;/td&gt;
      &lt;td&gt;78.6&lt;/td&gt;
      &lt;td&gt;61.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;616.5&lt;/td&gt;
      &lt;td&gt;697.4&lt;/td&gt;
      &lt;td&gt;618.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;701.6&lt;/td&gt;
      &lt;td&gt;697.3&lt;/td&gt;
      &lt;td&gt;700.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;695.3&lt;/td&gt;
      &lt;td&gt;629.2&lt;/td&gt;
      &lt;td&gt;694.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;233.9&lt;/td&gt;
      &lt;td&gt;230.4&lt;/td&gt;
      &lt;td&gt;231.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;220.3&lt;/td&gt;
      &lt;td&gt;221.5&lt;/td&gt;
      &lt;td&gt;218.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;228.4&lt;/td&gt;
      &lt;td&gt;226.9&lt;/td&gt;
      &lt;td&gt;232.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;145.4&lt;/td&gt;
      &lt;td&gt;129.9&lt;/td&gt;
      &lt;td&gt;124.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;143.0&lt;/td&gt;
      &lt;td&gt;125.6&lt;/td&gt;
      &lt;td&gt;125.4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;4&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;184.8&lt;/td&gt;
      &lt;td&gt;181.0&lt;/td&gt;
      &lt;td&gt;183.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;852.9&lt;/td&gt;
      &lt;td&gt;716.3&lt;/td&gt;
      &lt;td&gt;672.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;852.5&lt;/td&gt;
      &lt;td&gt;865.1&lt;/td&gt;
      &lt;td&gt;676.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;839.0&lt;/td&gt;
      &lt;td&gt;777.5&lt;/td&gt;
      &lt;td&gt;638.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;439.5&lt;/td&gt;
      &lt;td&gt;450.1&lt;/td&gt;
      &lt;td&gt;400.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;495.6&lt;/td&gt;
      &lt;td&gt;438.3&lt;/td&gt;
      &lt;td&gt;452.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;411.9&lt;/td&gt;
      &lt;td&gt;424.2&lt;/td&gt;
      &lt;td&gt;379.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;726.9&lt;/td&gt;
      &lt;td&gt;714.9&lt;/td&gt;
      &lt;td&gt;682.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;690.9&lt;/td&gt;
      &lt;td&gt;735.9&lt;/td&gt;
      &lt;td&gt;633.4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;8&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;687.0&lt;/td&gt;
      &lt;td&gt;685.4&lt;/td&gt;
      &lt;td&gt;642.7&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;1941.6&lt;/td&gt;
      &lt;td&gt;1934.1&lt;/td&gt;
      &lt;td&gt;1537.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;2265.5&lt;/td&gt;
      &lt;td&gt;2086.5&lt;/td&gt;
      &lt;td&gt;1810.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;1824.1&lt;/td&gt;
      &lt;td&gt;1821.7&lt;/td&gt;
      &lt;td&gt;1432.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;893.9&lt;/td&gt;
      &lt;td&gt;896.9&lt;/td&gt;
      &lt;td&gt;743.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;836.9&lt;/td&gt;
      &lt;td&gt;1014.0&lt;/td&gt;
      &lt;td&gt;844.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;872.7&lt;/td&gt;
      &lt;td&gt;843.4&lt;/td&gt;
      &lt;td&gt;728.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;1545.4&lt;/td&gt;
      &lt;td&gt;1537.7&lt;/td&gt;
      &lt;td&gt;1469.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;1489.0&lt;/td&gt;
      &lt;td&gt;1531.5&lt;/td&gt;
      &lt;td&gt;1251.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;16&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;1540.8&lt;/td&gt;
      &lt;td&gt;1508.1&lt;/td&gt;
      &lt;td&gt;1435.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;5548.6&lt;/td&gt;
      &lt;td&gt;5582.2&lt;/td&gt;
      &lt;td&gt;4503.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;5922.9&lt;/td&gt;
      &lt;td&gt;6023.3&lt;/td&gt;
      &lt;td&gt;4711.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;5081.6&lt;/td&gt;
      &lt;td&gt;5820.2&lt;/td&gt;
      &lt;td&gt;4683.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;2632.4&lt;/td&gt;
      &lt;td&gt;2588.1&lt;/td&gt;
      &lt;td&gt;2578.4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;2545.8&lt;/td&gt;
      &lt;td&gt;2473.0&lt;/td&gt;
      &lt;td&gt;2101.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;2517.0&lt;/td&gt;
      &lt;td&gt;2412.9&lt;/td&gt;
      &lt;td&gt;2093.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;5435.3&lt;/td&gt;
      &lt;td&gt;5296.6&lt;/td&gt;
      &lt;td&gt;4817.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;5284.4&lt;/td&gt;
      &lt;td&gt;5051.2&lt;/td&gt;
      &lt;td&gt;4815.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;32&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;5427.0&lt;/td&gt;
      &lt;td&gt;5232.9&lt;/td&gt;
      &lt;td&gt;4598.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;9630.8&lt;/td&gt;
      &lt;td&gt;11037.0&lt;/td&gt;
      &lt;td&gt;8966.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;10637.3&lt;/td&gt;
      &lt;td&gt;11466.4&lt;/td&gt;
      &lt;td&gt;8941.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;random&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;9511.1&lt;/td&gt;
      &lt;td&gt;9381.2&lt;/td&gt;
      &lt;td&gt;8697.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;7029.0&lt;/td&gt;
      &lt;td&gt;6747.8&lt;/td&gt;
      &lt;td&gt;6692.3&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;6865.1&lt;/td&gt;
      &lt;td&gt;6906.3&lt;/td&gt;
      &lt;td&gt;6459.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;sparse&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;6598.4&lt;/td&gt;
      &lt;td&gt;6426.2&lt;/td&gt;
      &lt;td&gt;6431.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;AlgebirdMapAdd&lt;/td&gt;
      &lt;td&gt;10568.5&lt;/td&gt;
      &lt;td&gt;10139.1&lt;/td&gt;
      &lt;td&gt;9545.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;BulkMapAdd&lt;/td&gt;
      &lt;td&gt;10228.1&lt;/td&gt;
      &lt;td&gt;11001.8&lt;/td&gt;
      &lt;td&gt;9246.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;64&lt;/td&gt;
      &lt;td&gt;dense&lt;/td&gt;
      &lt;td&gt;SpireAdd&lt;/td&gt;
      &lt;td&gt;10443.0&lt;/td&gt;
      &lt;td&gt;10217.1&lt;/td&gt;
      &lt;td&gt;9800.8&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;gcdbenchmarks&quot;&gt;GcdBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(ms)&lt;/th&gt;
      &lt;th&gt;specialized (ms)&lt;/th&gt;
      &lt;th&gt;generic (ms)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;XorEuclidGcdLong&lt;/td&gt;
      &lt;td&gt;98.6&lt;/td&gt;
      &lt;td&gt;97.3&lt;/td&gt;
      &lt;td&gt;101.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;XorBinaryGcdLong&lt;/td&gt;
      &lt;td&gt;41.3&lt;/td&gt;
      &lt;td&gt;41.4&lt;/td&gt;
      &lt;td&gt;42.7&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;addbenchmarks&quot;&gt;AddBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(us)&lt;/th&gt;
      &lt;th&gt;specialized (us)&lt;/th&gt;
      &lt;th&gt;generic (us)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;AddIntsDirect&lt;/td&gt;
      &lt;td&gt;93.2&lt;/td&gt;
      &lt;td&gt;65.3&lt;/td&gt;
      &lt;td&gt;88.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddIntsGeneric&lt;/td&gt;
      &lt;td&gt;92.7&lt;/td&gt;
      &lt;td&gt;88.2&lt;/td&gt;
      &lt;td&gt;2345.4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddLongsDirect&lt;/td&gt;
      &lt;td&gt;66.3&lt;/td&gt;
      &lt;td&gt;64.5&lt;/td&gt;
      &lt;td&gt;64.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddLongsGeneric&lt;/td&gt;
      &lt;td&gt;67.0&lt;/td&gt;
      &lt;td&gt;64.3&lt;/td&gt;
      &lt;td&gt;2673.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddFloatsDirect&lt;/td&gt;
      &lt;td&gt;197.2&lt;/td&gt;
      &lt;td&gt;194.3&lt;/td&gt;
      &lt;td&gt;193.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddFloatsGeneric&lt;/td&gt;
      &lt;td&gt;200.5&lt;/td&gt;
      &lt;td&gt;192.2&lt;/td&gt;
      &lt;td&gt;615.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddDoublesDirect&lt;/td&gt;
      &lt;td&gt;201.8&lt;/td&gt;
      &lt;td&gt;193.4&lt;/td&gt;
      &lt;td&gt;192.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddDoublesGeneric&lt;/td&gt;
      &lt;td&gt;203.8&lt;/td&gt;
      &lt;td&gt;194.1&lt;/td&gt;
      &lt;td&gt;649.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddMaybeDoublesDirect&lt;/td&gt;
      &lt;td&gt;5372.9&lt;/td&gt;
      &lt;td&gt;5166.9&lt;/td&gt;
      &lt;td&gt;5163.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddComplexesDirect&lt;/td&gt;
      &lt;td&gt;1594.0&lt;/td&gt;
      &lt;td&gt;1596.9&lt;/td&gt;
      &lt;td&gt;3303.5&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddComplexesGeneric&lt;/td&gt;
      &lt;td&gt;1400.0&lt;/td&gt;
      &lt;td&gt;2262.4&lt;/td&gt;
      &lt;td&gt;3340.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;AddFastComplexes&lt;/td&gt;
      &lt;td&gt;648.3&lt;/td&gt;
      &lt;td&gt;652.2&lt;/td&gt;
      &lt;td&gt;650.2&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;arrayorderbenchmarks&quot;&gt;ArrayOrderBenchmarks&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;pow&lt;/th&gt;
      &lt;th&gt;benchmark&lt;/th&gt;
      &lt;th&gt;miniboxed(ns)&lt;/th&gt;
      &lt;th&gt;specialized (ns)&lt;/th&gt;
      &lt;th&gt;generic (ns)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;6&lt;/td&gt;
      &lt;td&gt;AddGeneric&lt;/td&gt;
      &lt;td&gt;45.7&lt;/td&gt;
      &lt;td&gt;45.0&lt;/td&gt;
      &lt;td&gt;1070.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;6&lt;/td&gt;
      &lt;td&gt;AddIndirect&lt;/td&gt;
      &lt;td&gt;40.0&lt;/td&gt;
      &lt;td&gt;40.1&lt;/td&gt;
      &lt;td&gt;680.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;6&lt;/td&gt;
      &lt;td&gt;AddDirect&lt;/td&gt;
      &lt;td&gt;37.6&lt;/td&gt;
      &lt;td&gt;37.2&lt;/td&gt;
      &lt;td&gt;36.0&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;AddGeneric&lt;/td&gt;
      &lt;td&gt;5288.4&lt;/td&gt;
      &lt;td&gt;435.4&lt;/td&gt;
      &lt;td&gt;8169.6&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;AddIndirect&lt;/td&gt;
      &lt;td&gt;5118.1&lt;/td&gt;
      &lt;td&gt;441.7&lt;/td&gt;
      &lt;td&gt;8321.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10&lt;/td&gt;
      &lt;td&gt;AddDirect&lt;/td&gt;
      &lt;td&gt;406.2&lt;/td&gt;
      &lt;td&gt;406.6&lt;/td&gt;
      &lt;td&gt;415.2&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14&lt;/td&gt;
      &lt;td&gt;AddGeneric&lt;/td&gt;
      &lt;td&gt;76713.4&lt;/td&gt;
      &lt;td&gt;8568.7&lt;/td&gt;
      &lt;td&gt;281031.8&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14&lt;/td&gt;
      &lt;td&gt;AddIndirect&lt;/td&gt;
      &lt;td&gt;77018.1&lt;/td&gt;
      &lt;td&gt;8624.7&lt;/td&gt;
      &lt;td&gt;382331.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;14&lt;/td&gt;
      &lt;td&gt;AddDirect&lt;/td&gt;
      &lt;td&gt;8184.1&lt;/td&gt;
      &lt;td&gt;8553.9&lt;/td&gt;
      &lt;td&gt;8705.4&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18&lt;/td&gt;
      &lt;td&gt;AddGeneric&lt;/td&gt;
      &lt;td&gt;1389458.0&lt;/td&gt;
      &lt;td&gt;211852.0&lt;/td&gt;
      &lt;td&gt;4471017.1&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18&lt;/td&gt;
      &lt;td&gt;AddIndirect&lt;/td&gt;
      &lt;td&gt;1386325.8&lt;/td&gt;
      &lt;td&gt;208735.3&lt;/td&gt;
      &lt;td&gt;4452107.9&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;18&lt;/td&gt;
      &lt;td&gt;AddDirect&lt;/td&gt;
      &lt;td&gt;207802.0&lt;/td&gt;
      &lt;td&gt;207519.9&lt;/td&gt;
      &lt;td&gt;206465.8&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;In case you’re interested, &lt;a href=&quot;/graphs/spire/2014-06-16-spire-miniboxed.raw&quot;&gt;the &lt;strong&gt;updated&lt;/strong&gt; raw execution logs are here&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Mon, 16 Jun 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/06/16/spire-miniboxed.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/06/16/spire-miniboxed.html</guid>
      </item>
    
      <item>
        <title>First steps to Miniboxed Collections! :)</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;The last few weeks we’ve been busy to prepare a milestone of the miniboxin plugin development: miniboxing a mockup of the Scala Collections library!
We included all the patterns used in the Scala Collections: &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/wip/docs/2014-04-miniboxing-scala-collections.pdf?raw=true&quot; target=&quot;_blank&quot;&gt;our SCALA’14 submission discusses this in detail&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But here’s a sneak peak, and you can read on in the &lt;strong&gt;&lt;a href=&quot;/benchmarks.html&quot;&gt;benchmarks page&lt;/a&gt;&lt;/strong&gt;:
&lt;br /&gt;
&lt;br /&gt;&lt;/p&gt;

&lt;center&gt;&lt;img width=&quot;90%&quot; src=&quot;/graphs/linkedlist/linkedlist.png&quot; /&gt;&lt;/center&gt;
</description>
        <pubDate>Thu, 22 May 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/05/22/scala-collections-mockup.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/05/22/scala-collections-mockup.html</guid>
      </item>
    
      <item>
        <title>Miniboxing @ Scala Days 2014 in Berlin!</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;That’s right! Miniboxing &lt;a href=&quot;http://www.scaladays.org/#schedule/Miniboxing--Specialization-on-a-Diet&quot; target=&quot;_blank&quot;&gt;will be presented&lt;/a&gt; at &lt;a href=&quot;http://www.scaladays.org/&quot; target=&quot;_blank&quot;&gt;the Scala Days conference&lt;/a&gt; in Berlin, 16th-18th of June 2014!&lt;/p&gt;

&lt;p&gt;To have all the coolness in place for Scala Days, we’re ramping up both &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/graphs/contributors&quot; target=&quot;_blank&quot;&gt;plugin work&lt;/a&gt; and &lt;a href=&quot;https://github.com/MelodyLucid/freezing-ironman&quot; target=&quot;_blank&quot;&gt;benchmarking efforts&lt;/a&gt;, thanks to two additions to the miniboxing team: Aymeric (&lt;a href=&quot;https://github.com/MelodyLucid&quot; target=&quot;_blank&quot;&gt;MelodyLucid on github&lt;/a&gt;) and Vlad Haprian (&lt;a href=&quot;https://github.com/HaprianVlad&quot; target=&quot;_blank&quot;&gt;HaprianVlad on github&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Hope to see you there!&lt;/p&gt;
</description>
        <pubDate>Tue, 22 Apr 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/04/22/miniboxing-scala-days.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/04/22/miniboxing-scala-days.html</guid>
      </item>
    
      <item>
        <title>Miniboxing @ Google Summer of Code 2014</title>
        <description>&lt;!-- jekyll don't be stupid --&gt;

&lt;p&gt;&lt;img align=&quot;right&quot; src=&quot;/images/gsoc2014.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We’re thrilled to announce Scala has been accepted for &lt;a href=&quot;https://www.google-melange.com/gsoc/homepage/google/gsoc2014&quot;&gt;Google Summer of Code 2014&lt;/a&gt;! One of the projects we propose is to develop the miniboxing plugin: namely to help port the &lt;a href=&quot;https://github.com/non/spire&quot;&gt;spire&lt;/a&gt; and &lt;a href=&quot;http://www.scalanlp.org/&quot;&gt;breeze&lt;/a&gt; libraries to use the miniboxing transformation.&lt;/p&gt;

&lt;p&gt;Applicants should be familiar with the Scala compiler and/or JVM bytecode and should not be scared of digging into the internals of the &lt;a href=&quot;https://wiki.openjdk.java.net/display/HotSpot/Main&quot;&gt;HotSpot Java virtual machine&lt;/a&gt; or the &lt;a href=&quot;https://github.com/scala/scala&quot;&gt;Scala compiler&lt;/a&gt; transformations. The project will involve hacking the miniboxing plugin to compile spire and breeze correctly, benchmarking the libraries for performance and tweaking the miniboxing transformation to obtain the best numbers possible. It’s a difficult project, but it will make a big impact on the Scala community, as both spire and breeze are highly appreciated libraries!&lt;/p&gt;

&lt;p&gt;Consult the &lt;a href=&quot;http://www.scala-lang.org/gsoc/2014.html#miniboxing_for_breeze_and_spire&quot;&gt;&lt;strong&gt;project page&lt;/strong&gt;&lt;/a&gt; and apply by emailing to &lt;a href=&quot;https://groups.google.com/forum/#!forum/scala-language&quot;&gt;&lt;strong&gt;scala-language&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 01 Mar 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/03/01/miniboxing-gsoc.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/03/01/miniboxing-gsoc.html</guid>
      </item>
    
      <item>
        <title>Miniboxing - Latest Developments</title>
        <description>&lt;p&gt;In the last three months the miniboxing plugin has seen a serious development spree, with a completely redesigned transformation, which fixes many of the limitations and bugs of the current approach. The development has been largely hidden in the &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/tree/topic/erasure-rebase&quot;&gt;topic/erasure-rebase branch&lt;/a&gt;, which, at the moment of writing, is 150 commits in front of the &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/tree/wip&quot;&gt;wip branch&lt;/a&gt; and 250 commits in front of &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/tree/master&quot;&gt;master&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And we need your help to review the changes!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the coming two weeks a pull request from branch &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/tree/topic/erasure-rebase&quot;&gt;topic/erasure-rebase&lt;/a&gt; will be made to &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/tree/wip&quot;&gt;wip&lt;/a&gt;. A technical document explaining the changes will be ready in time for the pull request.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anyone interested in miniboxing&lt;/strong&gt; is kindly invited to review at the changes, especially the test cases and their reference output (test file &lt;code class=&quot;highlighter-rouge&quot;&gt;X.scala&lt;/code&gt; has reference output &lt;code class=&quot;highlighter-rouge&quot;&gt;X.check&lt;/code&gt;: &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/tree/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile&quot;&gt;see all tests here&lt;/a&gt;). Once the pull request is made, everyone can try out the new plugin, comment on the source code and point out any suboptimality in the transformation. If all goes well, a week after the pull request has been made, it will &lt;strong&gt;be merged&lt;/strong&gt;. This will also bump the plugin version from &lt;code class=&quot;highlighter-rouge&quot;&gt;0.1-SNAPSHOT&lt;/code&gt; to &lt;code class=&quot;highlighter-rouge&quot;&gt;0.2-SNAPSHOT&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So keep an eye out for the pull request and &lt;strong&gt;please help review it&lt;/strong&gt;!&lt;/p&gt;

&lt;h2 id=&quot;but-what-does-this-bring&quot;&gt;But what does this bring?&lt;/h2&gt;

&lt;p&gt;The list is quite long, but here’s a summary:
 * a more principled transformation, with a mechanism which generalizes &lt;a href=&quot;http://docs.scala-lang.org/sips/completed/value-classes.html&quot;&gt; SIP-15: Value Classes&lt;/a&gt;
 * avoiding unnecessary hopping between the boxed and unboxed representations (tests: &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture1.scala&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture2.scala&quot;&gt;2&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture3.scala&quot;&gt;3&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture4.scala&quot;&gt;4&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture5.scala&quot;&gt;5&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture6.scala&quot;&gt;6&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture7.scala&quot;&gt;7&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_erasure_torture8.scala&quot;&gt;8&lt;/a&gt;)
 * improved nested class transformation (tests: &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_nested_class_first.scala&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_nested_class_second.scala&quot;&gt;2&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_nested_class_third.scala&quot;&gt;3&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_nested_class_forth.scala&quot;&gt;4&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_nested_class_fifth.scala&quot;&gt;5&lt;/a&gt;)
 * improved overriding of class members (tests: &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_override_1.scala&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_override_2.scala&quot;&gt;2&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_override_3.scala&quot;&gt;3&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_override_4.scala&quot;&gt;4&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_override_5.scala&quot;&gt;5&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_override_6.scala&quot;&gt;6&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_override_7.scala&quot;&gt;7&lt;/a&gt;)
 * simplified method bridging mechanism (tests: &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_signatures.scala&quot;&gt;1&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_rewire_method.scala&quot;&gt;2&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_rewire_method_advanced.scala&quot;&gt;3&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_rewire_new.scala&quot;&gt;4&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_rewire_val.scala&quot;&gt;5&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_tparams_basic.scala&quot;&gt;6&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_tparams_rewire_method.scala&quot;&gt;7&lt;/a&gt; &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/topic/erasure-rebase/tests/correctness/src/miniboxing/tests/compile/mb_tparams_rewire_new.scala&quot;&gt;8&lt;/a&gt;)
 * removing many mechanisms made redundant by the latest developments :)&lt;/p&gt;

&lt;h2 id=&quot;update&quot;&gt;Update&lt;/h2&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/pull/68&quot;&gt;pull request&lt;/a&gt; has been merged! For more details &lt;a href=&quot;https://speakerdeck.com/vladureche/late-data-layout-initial-presentation&quot;&gt;see the presentation&lt;/a&gt;.&lt;/p&gt;
</description>
        <pubDate>Sat, 18 Jan 2014 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2014/01/18/miniboxing-developments.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2014/01/18/miniboxing-developments.html</guid>
      </item>
    
      <item>
        <title>Miniboxing is using Travis CI!</title>
        <description>&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/images/travis.png&quot; align=&quot;right&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Miniboxing is now using Travis for continuous integration and publishing snapshot artifacts! For more information, see &lt;a href=&quot;http://travis-ci.org&quot;&gt;the Travis CI website&lt;/a&gt; and the &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/wip/.travis.yml&quot;&gt;Travis script we are using&lt;/a&gt; and the &lt;a href=&quot;https://github.com/miniboxing/miniboxing-plugin/blob/wip/project/Build.scala&quot;&gt;sbt build file&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://travis-ci.org/miniboxing/miniboxing-plugin&quot;&gt;&lt;img src=&quot;https://travis-ci.org/miniboxing/miniboxing-plugin.png?branch=wip&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thanks to the &lt;a href=&quot;http://github.com/&quot;&gt;Github&lt;/a&gt;/&lt;a href=&quot;http://travis-ci.org/&quot;&gt;Travis&lt;/a&gt;/&lt;a href=&quot;http://www.sonatype.org/&quot;&gt;Sonatype&lt;/a&gt; teams for such wonderful (and free) tools!&lt;/p&gt;
</description>
        <pubDate>Wed, 04 Dec 2013 00:00:00 +0000</pubDate>
        <link>http://scala-miniboxing.org/2013/12/04/travis.html</link>
        <guid isPermaLink="true">http://scala-miniboxing.org/2013/12/04/travis.html</guid>
      </item>
    
  </channel>
</rss>
