- About Scala
- Documentation
- Code Examples
- Software
- Scala Developers
Compiler optimisations/inlining
Wed, 2009-05-20, 01:10
Are the Scala compiler's -optimise and -Yinline options actually
supposed to do some inlining at the moment? I have tried this with
numerous Scala versions but nothing seems to get inlined. With some
older versions it used to even crash the compiler.
Note: I'm compiling from the Eclipse IDE and set the optimise and inline
as per-project options.
For example, for the following class, nothing seems to get inlined:
case class Vector2f(x: Float, y: Float) {
@inline def +(a: Float) = Vector2f(x + a, y + a)
@inline def -(a: Float) = Vector2f(x - a, y - a)
@inline def *(a: Float) = Vector2f(x * a, y * a)
@inline def /(a: Float) = Vector2f(x / a, y / a)
...
}
I recently noticed the @inline annotation and added those to all
methods, but even that doesn't seem to cause those methods to actually
get inlined.
Erkki
Wed, 2009-05-20, 02:07
#2
Re: Compiler optimisations/inlining
It doesn't seem to work correctly though (with 2.7.4):
Exception in thread "main" java.lang.IllegalAccessError: tried to access
field Vector2f.x from class X
Erkki
Erkki Lindpere wrote:
> Sorry, I am stupid. Of course the methods need to be final for them to
> be inlined...
>
> Erkki
>
> Erkki Lindpere wrote:
>> Are the Scala compiler's -optimise and -Yinline options actually
>> supposed to do some inlining at the moment? I have tried this with
>> numerous Scala versions but nothing seems to get inlined. With some
>> older versions it used to even crash the compiler.
>>
>> Note: I'm compiling from the Eclipse IDE and set the optimise and
>> inline as per-project options.
>>
>> For example, for the following class, nothing seems to get inlined:
>>
>> case class Vector2f(x: Float, y: Float) {
>> @inline def +(a: Float) = Vector2f(x + a, y + a)
>> @inline def -(a: Float) = Vector2f(x - a, y - a)
>> @inline def *(a: Float) = Vector2f(x * a, y * a)
>> @inline def /(a: Float) = Vector2f(x / a, y / a)
>> ...
>> }
>>
>> I recently noticed the @inline annotation and added those to all
>> methods, but even that doesn't seem to cause those methods to
>> actually get inlined.
>>
>> Erkki
>>
>
Sorry, I am stupid. Of course the methods need to be final for them to
be inlined...
Erkki
Erkki Lindpere wrote:
> Are the Scala compiler's -optimise and -Yinline options actually
> supposed to do some inlining at the moment? I have tried this with
> numerous Scala versions but nothing seems to get inlined. With some
> older versions it used to even crash the compiler.
>
> Note: I'm compiling from the Eclipse IDE and set the optimise and
> inline as per-project options.
>
> For example, for the following class, nothing seems to get inlined:
>
> case class Vector2f(x: Float, y: Float) {
> @inline def +(a: Float) = Vector2f(x + a, y + a)
> @inline def -(a: Float) = Vector2f(x - a, y - a)
> @inline def *(a: Float) = Vector2f(x * a, y * a)
> @inline def /(a: Float) = Vector2f(x / a, y / a)
> ...
> }
>
> I recently noticed the @inline annotation and added those to all
> methods, but even that doesn't seem to cause those methods to actually
> get inlined.
>
> Erkki
>