scalan / scalanizer-demo

Demonstrator for ScalaDays Amsterdam 2015 talk

Home Page:http://event.scaladays.org/scaladays-amsterdam-2015#!#schedulePopupExtras-6927

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

scalanizer-sample

This project contains source code that is used in Scala Days 2015 Amsterdam talk. See example implementation of matrix-vector multiplication written in functional style using Matr, Vec and Col abstract types.

Note that both Matr and Vec types are parameterized by the type of the elements T. In order to perform operations on elements some methods have implicit typeclass arguments Num or NumMonoid.

DenseMatr class implements abstract interface Matr keeping matrix data in a collection of type Col[Vec[T]]. This means that even though DenseMatr is a concrete implementation of Matr it is still abstracted from concrete implementations of both Col interface and Vec types. This allows to specialize abstract mvm code in many different ways.

Method LA.ddmvm shows how to use abstract mvm function with concrete data stored in the nested array of type Array[Array[Double]].

Note that LA.ddmvm method annotated with @HotSpot. This annotation is recognized by Scalanizer plugin. Scalanizer takes AST of LA.ddmvm method and produces its virtualized version. (See LinearAlgebraOpsImpl.scala file, which is generated by Scalanizer and saved in the repository for demonstration)

Method LA.ddmvm is called from LinearAlgebraTests.scala file.

In order to understand how Scalanizer works, run compilation and observe generated xxxImpl files which are saved in impl subdirectories. Look for

If -P:scalan:debug compiler option is specified Scalanizer will output additional files then show the content of the hotspot after it is replaces by Scalanizer. The files are stored in the directory specified in ScalanPluginConfig.home field.

About

Demonstrator for ScalaDays Amsterdam 2015 talk

http://event.scaladays.org/scaladays-amsterdam-2015#!#schedulePopupExtras-6927

License:Apache License 2.0


Languages

Language:Scala 100.0%