Scala là một ngôn ngữ tuyệt vời, nhưng tôi tự hỏi làm thế nào có thể được cải thiện nếu nó có thời gian chạy riêng của nó?
I.e. những lựa chọn thiết kế nào được thực hiện vì lựa chọn JVM?Sự cạnh tranh nào mà Scala đã thực hiện để chạy trên JVM?
Trả lời
This article là một cuộc thảo luận với Martin Odersky (người sáng tạo của Scala) và bao gồm các thỏa hiệp được thực hiện trong Scala để tương thích với Java. Bài báo đề cập đến:
- quá tải tĩnh của phương pháp
- Có cả những đặc điểm và các lớp
- Bao gồm các
null
con trỏ.
Hai thỏa hiệp quan trọng nhất mà tôi biết về là:
- type erasure ("reflecting on Type"): Nó phải manage a Manifest để có được xung quanh biên dịch Java (không phụ thuộc vào JVM, vì lý do tương thích ngược).
- bộ sưu tập kiểu nguyên thủy: ví dụ: arrays
sơ đồ xử lý mảng mới trong Scala 2.8. Thay vì boxing/unboxing và trình biên dịch ma thuật khác chương trình này dựa trên chuyển đổi tiềm ẩn và biểu hiện lồng ghép các mảng
Đó là hai hạn chế JVM chính, khi nói đến việc quản lý loại generic (với giới hạn): Các Java JVM không giữ kiểu sử dụng chính xác trong một đối tượng chung, và nó có các kiểu "nguyên thủy".
Nhưng bạn cũng có thể xem xét:
- tối ưu hóa Tail gọi là not yet full supported by the JVM, là hard to do anyway (và chưa Scala 2.8 giới thiệu the
@tailrec
annotation) - UAP (universal Access Principle) cần phải được mô phỏng (không được hỗ trợ bởi Java) , và sẽ sớm có completed for Value Holder (
@proxy
) - cơ chế trộn tất cả cũng cần được mô phỏng
- mor e nói chung, các huge number of static types được giới thiệu bởi Scala nhu cầu (đối với hầu hết trong số họ) được tạo ra trong Java:
Để che càng nhiều khả năng càng tốt, Scala cung cấp:
- lớp thông thường loại,
- loại lớp Value,
- loại Nonnullable,
- loại Monad,
- Loại đặc điểm,
- Loại đối tượng Singleton (mô-đun thủ tục, các lớp tiện ích, v.v.),
- loại Compound,
- loại chức năng,
- lớp Case,
- loại Path-phụ thuộc,
- loại Anonymous,
- loại Tự,
- Loại bí danh,
- Generic các loại,
- Loại chung biến thể,
- Tiếp theo kiểu generic ravariant,
- loại giáp chung,
- loại Tóm tắt,
- loại Hiện sinh,
- loại Implicit,
- loại Augmented,
- Xem giáp loại, và
- loại cấu cho phép một hình thức đánh máy vịt khi mọi thứ khác không thành công
Lưu ý về bản thân: danh sách các loại đó bị loại bỏ (có liên kết) trong http://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system/3113741#3113741 – VonC
Ít vấn đề hơn với thời gian chạy hơn là sự trì hoãn văn hóa: phổ biến bình đẳng, băm, toString.
Gắn chặt hơn với máy ảo: nghiêm ngặt bằng cách đánh giá mặc định, chức năng không tinh khiết, ngoại lệ.
+1 cho sự bình đẳng và băm chung. Có gì sai với 'toString' phổ quát? – missingfaktor
1) Dễ dàng vô tình hiển thị 'Object # toString' cho người dùng. 2) 'Bộ sưu tập [A] # toString' không linh hoạt theo cách nó hiển thị các phần tử của loại' A'. Xem 'scalaz.Show' để thay thế. – retronym
OK. Cảm ơn vì sự trả lời. – missingfaktor
- 1. Làm thế nào để chạy mã bytecode scala trên jvm?
- 2. Lập kế hoạch cạnh tranh
- 3. Làm thế nào để phát hiện sự hiện diện và vị trí của JVM trên Windows?
- 4. Làm thế nào để Maven chạy chiến tranh: phát nổ nhưng không chiến tranh: chiến tranh
- 5. Có đối thủ cạnh tranh nào với Atlassians Fisheye không?
- 6. Scala có hoạt động tốt trên JVM độc quyền không?
- 7. bash: lưu trong một biến số giây mà một quá trình đã thực hiện để chạy
- 8. Java thực hiện một ... JVM?
- 9. Tìm hiểu JVM Eclipse đang chạy trên
- 10. Làm thế nào để JVM và Java thực hiện việc đọc và ghi vào các tệp?
- 11. Ghi đè trênTouchEvent cạnh tranh với ScrollView
- 12. JVM flag CMSClassUnloadingEnabled thực sự làm gì?
- 13. MSMQ người tiêu dùng cạnh tranh
- 14. Cạnh tranh cơ bản và mẫu với ASP.NET Web API
- 15. Cạnh tranh người tiêu dùng trong Mass Transit với RabbitMQ
- 16. Trình soạn thảo hiện đại nào cạnh tranh với emacs/vi?
- 17. Thực hiện một hàm bậc cao mà thực hiện tách lạng bộ trong scala
- 18. Có thể cạnh tranh các hoạt động nguyên tử không?
- 19. Các đối thủ cạnh tranh của Visual Studio và C#
- 20. Trên UILongPressGestureRecognizer làm cách nào để phát hiện đối tượng nào đã tạo sự kiện?
- 21. Scala có liên quan mạnh đến JVM như thế nào?
- 22. Làm cách nào để triển khai giải pháp người tiêu dùng cạnh tranh?
- 23. Quy trình giám sát hoạt động như thế nào? Có thể thực hiện tương tự trên JVM không?
- 24. Scala - Làm cách nào để thực hiện phương pháp "assertThrows"?
- 25. Làm thế nào để đo lường sự tranh chấp mutex?
- 26. Làm cách nào để vẽ một đường trên MKMapView hiển thị tuyến đường mà người dùng đã thực hiện?
- 27. Đồng thời, 4 Ứng dụng CUDA cạnh tranh để nhận tài nguyên GPU
- 28. Cầu cảng chạy trên 1.6 JVM không thể chạy webapp được biên dịch trên Java 1.6
- 29. Làm thế nào để chạy mã scala trên Intellij Idea 11?
- 30. Ngôn ngữ nào (chạy trên JVM) phù hợp nhất để tạo DSL?
Tham chiếu tuyệt vời. +1 – VonC