Scala是一種很棒的語言,但是我想知道如果它有自己的運行時,怎麼能改進呢?
I.e.由於JVM的選擇而做出了哪些設計選擇?Scala在JVM上運行了什麼?
回答
This article是與Martin Odersky(Scala的創建者)的一次討論,幷包含Scala爲了與Java兼容而作出的妥協。文中提到:
- 的方法靜態重載
- 有兩個性狀和類
- 夾雜
null
指針。
我知道的兩個最重要的妥協是:
- type erasure(「reflecting on Type」):它有繞過Java編譯(獨立於JVM的,爲了向後兼容的原因)。
- 收集原始類型:例如: - 在斯卡拉2.8處理陣列arrays
新方案。相反,裝箱/拆箱和其他編譯器法寶的方案依賴於隱式轉換和艙單集成陣列
這些是兩個主要的JVM的限制,當它涉及到管理的通用型(邊界):該Java JVM並不保留通用對象中使用的確切類型,它具有「原始」類型。
但你也可以考慮:
- 尾調用優化not yet full supported by the JVM,爲hard to do anyway(然而斯卡拉2.8引入了the
@tailrec
annotation) - UAP (universal Access Principle)需要效仿(不支持Java) ,並且將很快completed for Value Holder (
@proxy
) - 所有混入機制也需要模仿
- mor
爲了覆蓋儘可能多的可能性,可能的話,Scala中提供:
- 常規E類一般地,huge number of static types通過Scala的需要(對於大多數)在Java中產生引入類型,
- 值類類型,
- 非空類型,
- 單子種類,
- 特徵類型,
- 單例對象類型(過程模塊,實用類等)),
- 複合類型,
- 功能類型,
- 案例類,
- 路徑依賴的類型,
- 匿名類型,
- 自我類型,
- 類型別名,
- 通用
- 協變通用類型,
- Cont ravariant泛型類型,
- 界泛型類型,
- 抽象類型,
- 生存類型,
- 隱式類型,
- 增強型,
- 查看界類型,並
- 結構類型,允許當一切都失敗時,鴨子打字的一種形式
注意自我:類型列表是詳細的(與鏈接)在http://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system/3113741#3113741 – VonC 2010-06-26 15:30:02
與文化宿醉相比,運行時問題更少:通用平等,哈希,toString。
與虛擬機的關係更爲密切:缺省評估嚴格,不純功能,例外。
+1,用於通用平等和散列。通用'toString'有什麼問題? – missingfaktor 2010-04-23 19:53:13
1)很容易意外地向用戶顯示「Object#toString」。 2)'Collection [A]#toString'在顯示'A'類型的元素的方式上是不靈活的。請參閱'scalaz.Show'來尋找替代方案。 – retronym 2010-04-23 21:23:13
好的。感謝您的迴應。 – missingfaktor 2010-04-24 12:41:31
- 1. 什麼JVM運行螞蟻?
- 2. 運行'.scala'程序時,Scala運行時/ REPL背後發生了什麼?
- 3. Scala是否在專有的JVM上運行良好?
- 4. 如何在jvm上運行scala字節碼?
- 5. 在OpenJDK JVM上運行cachegrind
- 6. 爲什麼在AWS EC2上運行的JVM掛起?
- 7. Scala使用JVM運行程序
- 8. 如何從Scala(JVM)運行JavaScript代碼?
- 9. 除了Scala之外的JVM上運行的替代多線程優化語言?
- 10. 找出JVM Eclipse運行的是什麼
- 11. 在Android上運行scala
- 12. ++運算符在char上做了什麼*
- 13. 在JVM中運行時在Scala中使用遞歸
- 14. Predef.identity在scala中做了什麼?
- 15. 在JVM上運行基於JNI的.jar
- 16. 在Ubuntu上運行SOAPUI時JVM崩潰
- 17. 在JVM之上運行/解釋C?
- 18. android JVM能在PC上運行嗎?
- 19. JVM崩潰,出了什麼問題?
- 20. JVM選項:傳遞了什麼值?
- 21. 如何在JVM啓動時運行一些Scala代碼?
- 22. 將clojure/scala編號附加到正在運行的JVM中
- 23. 爲什麼scala項目上的travis-ci運行耙子?
- 24. 什麼JVM可以在Mac OS 7.5下運行?
- 25. 可以在JVM 8上運行使用JDK 7編譯的scala代碼嗎?
- 26. 當你說「這種語言在JVM上運行」時,它意味着什麼?
- 27. 爲什麼mach_wait_until在模擬器上運行遲了?
- 28. 爲什麼使用docker?是不是已經在JVM上運行了像WAR文件那樣的java文件?
- 29. JVM標誌CMSClassUnloadingEnabled實際上做了什麼?
- 30. -Xss JVM選項實際上做了什麼
很好的參考。 +1 – VonC 2010-04-21 19:22:10