2011-01-04 17 views
38

Satır içi işlevlerin temellerini anladığımı düşünüyorum: yığına yerleştirilen parametrelerle sonuçlanan bir işlev çağrısı ve gerçekleşen bir çağırma işlemi yerine, işlevin tanımı, çağrılmanın yapıldığı yere derleme zamanında kopyalanır. çalışma zamanında başlatma ek yükü.Scala @ inline açıklamasını ne zaman kullanmalıyım (ve yapmamalıyım)?

  • scalać kullanım SMARTS açıklamalarından yapılan ipuçları olmadan bazı işlevleri (örneğin özel def) satır içi mu:

    yüzden bilmek istiyorum?

  • Scalacın bir işlevi satır içi olarak işaret etmenin iyi bir fikir olduğunu nasıl anlarım?

  • Herkes, belirtilmesi gereken veya verilmemesi gereken işlevler veya çağrılar örneklerini paylaşabilir mi?

+5

bu yardımcı olabilir: http://stackoverflow.com/questions/2709095/does-the-inline-annotation-in-scala-really-help-performance – Arjan

cevap

32

gerçekleştirme aşamasında @inline şey makul değişebilir ve bir kütüphaneye bir kamu parçası olacak olan asla.

"Uygulama değişikliği" dediğimde, mantığın gerçekten değişebileceği anlamına gelir. Örneğin: bir atomik sayaca dayalı olarak değiştirilen "doğal karşılaştırma" diyelim. Bir uygulamanın, her biri karşılaştırma kodunun farklı sürümlerine göre oluşturulmuş ve belirtilmiş 2 bileşenle bittiğini görebilirsiniz. Şahsen

+11

Bu, KULLANILMAMASI için çok iyi bir yanıttır. Kullanmanız gereken bazı guildelines var mı? Kamu API işlevlerinin dışında her yere yerleştirmeye başlamalı mıyım? Ya da scalac + JVM yeterince akıllı olup, herhangi bir yere yerleştirmem gerekmiyor mu? –

+1

Bunu @inline'dan kaçınmak için iyi bir yanıt olarak kabul etmek. Bu soru, muhtemelen neden hiç kullanılmadığını açıklıyor: http://stackoverflow.com/questions/2709095/does-the-inline-annotation-in-scala-really-help-performance –

0

, ben takma ad için @inline kullanın: bunun bir şeyi yaparsa bilmesi mümkün bulamadık, Şimdi

class A(param: Param){ 
    @inline def a = param.a 
    def a2() = a * a 
} 

(ı oluşturulan .class jad çalıştı, ancak bir sonuca ulaşamamıştır şey).

Amacım, derleyicinin yapmasını istediğim şeyi açıklamaktır. Ama en iyisinin hangisi olduğuna karar vermesine izin verin ya da sadece yapabildiklerini yapın. Bunu yapmazsa, belki daha sonra derleyici sürümü olacaktır.

İlgili konular