2010-04-21 17 views

Trả lời

20

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:

  1. quá tải tĩnh của phương pháp
  2. Có cả những đặc điểm và các lớp
  3. Bao gồm các null con trỏ.
+0

Tham chiếu tuyệt vời. +1 – VonC

26

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:

Để 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
+0

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

3

Í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ệ.

+0

+1 cho sự bình đẳng và băm chung. Có gì sai với 'toString' phổ quát? – missingfaktor

+0

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

+0

OK. Cảm ơn vì sự trả lời. – missingfaktor

Các vấn đề liên quan