2012-12-03 38 views
60

有一種稱爲Avian的相對較新的輕量級JVM,可以爲iOS目標生成可執行文件。使用Avian的iOS上的Scala

網站上沒有太多的文檔(並且找不到太多可以用Google搜索的文檔)。我想知道是否有人知道如何獲得在iOS上運行的基本Scala程序的分步教程,使用Avian

+5

我建議先嚐試一些演示Java應用程序。運行後,請試用一個演示scala應用程序。理論上,運行scala代碼的唯一要求是scala-library.jar。 – pedrofurla

+5

關於Scala的一些討論:https://groups.google.com/forum/?fromgroups=#!topic/avian/Hugny4JcnDw – madoki

+0

你想要一個完整的應用程序(包括用戶界面)或模板的混合objectiveC(UI )和Java(後端)之一? – psychowood

回答

4

編譯的Scala源代碼是完全標準的類文件。你應該能夠在沒有大的修改的情況下,按照instructions(查找「嵌入」),只要將scala-library.jar視爲代碼的依賴關係。

我設法引導了幾天前在Avian上運行的完整編譯器和標準庫。

某些零件在邊緣周圍可能仍然有點粗糙, G。有one mandatory fix這將是下一個版本的Scala(2.10.1)的一部分,但不在2.10.0。如果你現在想玩它,你需要使用一個每晚構建,直到2.10.1發佈。

如果您遇到任何其他問題,請舉報!

+0

但是,爲了在iOS上運行,您不僅需要編譯標準類文件。您需要一個用戶界面,並且您需要簽署該應用程序。我正在尋找一個教程,演示基本的技術來生成一個實際在iOS上運行的基本「hello world」。如果這樣的文件存在,我認爲它可以創造一個良性循環:它可以幫助很多人開始,並且這也會促進Avian的流行。 – Eduardo

+0

啊對,對不起。誤解了這一點。 – soc

3

我可能不再需要它了,現在是Oracle is making JavaFX open-source on iOS and Android

編輯:甲骨文更新了文章,宣佈他們不會發布JVM,所以它看起來像JavaFX + Avian可能是要走的路。

+1

該文章的內容如下: 「幾年前,在JavaOne 2011上,我們展示了一個在Android和iOS設備上運行的JavaFX演示,這是一個概念驗證,它有兩個基本要素:第一個是Windowing/JavaFX(Glass&Prism)的圖形層使用iOS和Android API,這就是我們開源的東西,不多也不少,我們沒有爲這些平臺提供JVM,我也不知道任何這樣的計劃,所以它不是一個完整的解決方案。「 所以要在iOS上運行Java/Scala,我們仍然需要Avian或類似的東西...... –

+0

@MikeSpadaru:那實際上是文章的更新。真的是個壞消息:-( – Eduardo

2

在iOS上運行Java字節碼(未根)不僅運行該或那些JVM。據我瞭解,iOS內存管理不允許可執行內存頁在用戶模式下可寫。這基本上禁止任何JIT編譯。 因此,即使可以在特定的Java VM上運行一些編譯的(從Java或Scala)類,我也會仔細檢查該VM如何支持Ahead-Of-Time編譯,以便在iOS上運行。 正如我所見,Avian AOT在桌面上運行良好。對於iOS,您必須親自檢查一下,不過該項目在AOT領域看起來很有希望。

+0

)如果在虛擬機上運行,​​代碼不會駐留在可執行內存上(Avian會將AOT編譯爲真實的機器指令),但使用虛擬機的限制不是技術性的,而是許可。 – Eduardo

+0

@Eduardo是的,AOT是可以避免寫入可執行內存的東西,假設你沒有AOT,那麼在運行時,JIT應該開始將你的字節碼編譯爲本機並保存在內存中。這個內存在iOS上不能再執行了,這就是JIT在iOS上不可行的技術原因,因爲我知道Xamarin.iOS在iOS上是「允許的」,但它使用了相同的AOT,但我沒有聽說過關於Xamarin完成的任何許可過程,它編譯爲本機可執行文件,但我沒有看到它如何被Apple禁止 – vladimir

+0

即使使用JIT,Java字節碼也不會被翻譯成機器指令並存儲在可執行內存中。它由虛擬機本身執行。 – Eduardo

7

iOS編譯器的另一種替代JVM是RoboVM。雖然它處於早期階段,但它看起來很有希望,並提供有關如何爲iOS編譯Scala的示例。

編輯這是一個古老的答案,當時有效,但@JamesMoore指出,RoboVM不在了。現在看起來非常有希望,並且很可能在不久的將來在iOS中運行Scala代碼的方式是Scala Native

+1

下面是一個很好的例子(在iOS上的RoboVM上的Scala應用程序) https://gist.github.com/sebnozzi/5653898 – sventechie

+0

Robovm已經死了:https://robovm.com/robovm-winding-down/ –

+1

@ JamesMoore謝謝你提醒我。我已經更新了答案以反映它。 – Eduardo