2012-04-01 13 views
15

Çok oyunculu bir programlama oyunu için, oyuncular tarafından sunulan çoklu, bağımsız kaynak ağaçlarının derlenmesini destekleyen Scala için bir arka plan derleme sunucusunda çalışıyorum. Ben şimdi ideal sunucu parallelize istiyorumScala derleyicisinin reentrantı var mı?

val run = new compilerGlobal.Run 
run.compile(sourceFilePathList) 

aracılığıyla bireysel derleme işleri çalıştıran sonra

val compilerGlobal = new Global(settings, reporter) 

ve üzeri Global derleyici nesnesini başlatarak derleyici yeniden yüklemeden hızlı, sıralı derlemeleri çalışan başardı (Örneğin, birden fazla derlemeyi eşzamanlı olarak çalıştırır), ancak yine de derleyiciyi yeniden yüklemeden (öncelikle lib'i yeniden ayrıştırmaktan kaçınmak için) her defasında sıfırdan. Bu mümkün mudur, yani yukarıda gösterilen ikinci kısımdır (güvenli bir şekilde :-) yeniden giriş yapıyor mu, yoksa küresel durumu koruyor mu?) Eğer değilse, deneyebileceğim başka bir şey var mı? Şu anda Scala 2.9.1'i desteklemeye odaklandım.

+0

Bir başlangıç ​​için sembol tablosunun 'genel durumunu' tutar. – EJP

+2

Bir derleyici havuzu havuzu kullanın. – retronym

+0

@retronym Öneri için teşekkürler. Ancak asıl sorum, "ne kadar geri dönüşebilirim?" Yorumunuz, iyi bir başlangıç ​​olan (bellek içi) derleyici örnekleri (Global Sınıf) arasında global paylaşılmış bir durum olmadığını gösterir. Fakat aynı zamanda bireyin DO paylaşım durumunu (ayrıştırılmış standart lib'in ötesinde) çalıştırdığını mı düşünüyorsunuz? Daha fazla bilgiye ihtiyacım var. –

cevap

4

Evet, derleyici Paylaşım durumunu çalıştırır, böylece bunları iş parçacıkları arasında paylaşmamalısınız. Eclipse eklentisinde ortaya çıkan konulardan biri. @EJP'nin belirttiği gibi, sembol tablosu paylaşılır.

Bu sizin durumunuzda bu kadar önemli değil, ancak bir IDE'de geliyor: derleyici, tiplerdeki tembelliği kullanır, bu da Symbol numaralı yöntemleri çağırırken ek hesaplama (ve mutasyon) olabileceği anlamına gelir. Görünürlük sorunları nedeniyle, bu yöntemlerin, bunları oluşturan aynı iş parçacığında çağrılması önemlidir.

İlgili konular