2009-06-30 47 views
35

Đó là ý kiến ​​của tôi rằng mọi ngôn ngữ được tạo ra cho một mục đích cụ thể. Scala đã tạo ra điều gì và giải quyết những vấn đề nào tốt nhất?Mục đích của ngôn ngữ lập trình Scala là gì?

+12

Theo ý kiến ​​của tôi, có các ngôn ngữ có mục đích chung. – Svante

+0

Có thể, nhưng có vẻ như với tôi rằng Scala không phải là trường hợp. – user68109

+0

Scala LÀ một ngôn ngữ mục đích chung, nếu bạn xem Java như một ngôn ngữ mục đích chung. – Jus12

Trả lời

15

Một trong những điều được đề cập trong talks by Martin Odersky về Scala là nó là một ngôn ngữ có quy mô tốt để giải quyết các vấn đề khác nhau. Anh ấy không nói về việc mở rộng quy mô theo nghĩa hiệu suất nhưng theo nghĩa là bản thân ngôn ngữ có thể dường như được mở rộng qua thư viện. Do đó:

val lock = new ReentrantReadWriteLock 
lock withReadLock { 
    //do stuff 
} 

Có vẻ như có một số đường cú pháp đặc biệt để xử lý các khóa j.u.c. Nhưng đây không phải là trường hợp, nó chỉ sử dụng ngôn ngữ scala theo cách như vậy xuất hiện. Mã này dễ đọc hơn phải không?

Cụ thể là các quy tắc phân tích cú pháp khác nhau của ngôn ngữ scala làm cho việc tạo thư viện trông giống như một ngôn ngữ cụ thể theo miền (hoặc DSL) rất dễ dàng. Hãy xem xét thử nghiệm scala ví dụ:

describe("MyCoolClass") { 
    it("should do cool stuff") { 
    val c = new MyCoolClass 
    c.prop should be ("cool") 
    } 
} 

(Có rất nhiều ví dụ khác về điều này - Tôi đã phát hiện ra this one hôm qua). Có nhiều cuộc nói chuyện về những tính năng mới nào đang có trong ngôn ngữ Java trong JDK7 (project coin). Nhiều tính năng trong số này là đường cú pháp đặc biệt để xử lý một số vấn đề cụ thể. Scala đã được thiết kế với một số quy tắc đơn giản có nghĩa là từ khóa mới cho mỗi ít phiền toái là không cần thiết.

+0

Điều này có vẻ giống như một khía cạnh của quy tắc thứ mười của Greenspun. – Svante

+4

Tôi đồng ý với điều này nhưng xem nó như là một tiêu cực khá lớn.Duy trì phần mềm liên quan đến việc học vừa đủ để giải quyết vấn đề của bạn và tiếp tục, không phải hiểu cách một số ngôn ngữ thay đổi cú pháp. Ngoài ra tôi nghĩ rằng mọi mối quan tâm chính của nhà phát triển nên là làm thế nào để tôi thực hiện điều này dễ dàng nhất cho anh chàng tiếp theo đến cùng và làm việc trên đó. Đó là lý do tại sao chúng tôi sử dụng nhận xét, mẫu phát triển và mã được viết tốt. Từ quan điểm này tôi không thực sự thấy Scala là hữu ích trong nhiều trường hợp tuy nhiên nó đá cho mã thử nghiệm, các nhóm nhỏ và mã mà bạn mong muốn thay thế thay vì duy trì –

+0

Tôi thích ý tưởng rằng bạn chỉ nên biết đủ về cách giải quyết vấn đề của bạn và không còn nữa. Có lẽ bạn có cùng một thái độ đối với chiếc xe của bạn - và đã bực bội sau khi lái xe vào nhà để xe của bạn và sau đó tìm thấy bạn không biết làm thế nào để làm cho nó đi ngược trở lại để có được nó ra một lần nữa. Thông thường có một nơi để chủ động và * chuẩn bị *. –

7

Một trong nhiều mục tiêu thiết kế ban đầu là tất nhiên để tạo ra một ngôn ngữ chạy trên Máy ảo Java và hoàn toàn tương thích với các lớp Java. Điều này có (ít nhất) hai lợi thế:

  • bạn có thể tận dụng tính phổ biến, tính ổn định, tính năng và danh tiếng của JVM. (xem phần mở rộng quản lý, biên dịch JIT, Bộ sưu tập rác nâng cao, v.v.)
  • bạn vẫn có thể sử dụng tất cả thư viện Java yêu thích, cả bên thứ 3 và của riêng bạn. Nếu đây không phải là trường hợp, nó sẽ là một trở ngại đáng kể để sử dụng Scala thương mại trong nhiều trường hợp (ví dụ của tôi).
+0

Tất cả đều đúng, nhưng cũng đúng với nhiều ngôn ngữ dựa trên JVM khác. Điều gì làm rối loạn Scala từ những người khác? Về bề ngoài, các tính năng tiêu đề của nó đã có sẵn trong các ngôn ngữ JVM khác. – skaffman

+0

Anh ấy không hỏi điều gì phân biệt Scala với các ngôn ngữ JVM khác –

+0

Tôi biết, nhưng tôi là :) – skaffman

2

Vì nó hoạt động và sử dụng các diễn viên (như tôi hiểu nó, hãy bình luận nếu tôi đã sai) nó làm cho nó rất dễ dàng để quy mô gần như bất cứ điều gì lên đến bất kỳ số lượng CPU.

Điều đó nói rằng, tôi thấy Scala là loại giường thử nghiệm cho các tính năng ngôn ngữ mới. Ném vào bồn rửa chén và xem chuyện gì xảy ra.

Ý kiến ​​cá nhân của tôi là đối với bất kỳ ứng dụng nào liên quan đến một nhóm gồm hơn 3 người, bạn sẽ làm việc hiệu quả hơn với ngôn ngữ có cú pháp rất đơn giản và hạn chế chỉ vì toàn bộ công việc trở nên tương tác với người khác hơn là chỉ viết mã để làm cho máy tính làm điều gì đó.

Bạn càng thêm nhiều người, bạn càng dành nhiều thời gian để giải thích cái gì?: Có nghĩa là hoặc sự khác biệt giữa | và || như được áp dụng cho hai boolean (Trong Java, bạn sẽ thấy rất ít người biết).

+0

Đó là lý do tại sao tất cả các dự án phần mềm lớn được viết cho Universal Turing Machine –

+0

Như tôi đã nói đó là ý kiến ​​cá nhân của tôi, không được tổ chức rộng rãi. –

+0

Bill, những gì bạn mô tả có vẻ là tiền đề cơ bản của Java với tôi. – Svante

12

Mục tiêu khác của Scala là thu hẹp khoảng cách giữa chức nănghướng đối tượng ngôn ngữ. Nó chứa nhiều ngôn ngữ chức năng được lấy cảm hứng (tức là sao chép từ!).Tôi là điều cực kỳ mạnh mẽ pattern-matching, các actor-based concurrency framework và (tất nhiên) chức năng thứ tự đầu tiên và cao hơn.

Tất nhiên, câu hỏi của bạn cho biết rằng có mục đích cụ thể và tôi vừa đưa ra 3 lý do riêng biệt; có thể bạn sẽ phải hỏi Martin Odersky!

6

Đồng ý với câu trả lời trước nhưng đề nghị Giới thiệu về An Overview of the Scala Programming Language:

Công việc trên Scala bắt nguồn từ một nỗ lực nghiên cứu để phát triển hỗ trợ ngôn ngữ tốt hơn cho phần mềm thành phần. Có hai giả thuyết mà chúng tôi muốn xác thực với thí nghiệm Scala. Đầu tiên, chúng tôi đề xuất rằng một ngôn ngữ lập trình cho phần mềm thành phần cần phải được mở rộng theo nghĩa là các khái niệm tương tự có thể mô tả các phần nhỏ cũng như lớn. Do đó, chúng tôi tập trung vào các cơ chế trừu tượng, thành phần và phân hủy hơn là thêm một tập hợp lớn các nguyên thủy có thể hữu ích cho các thành phần ở một mức độ nào đó, nhưng không ở các cấp độ khác. Thứ hai, chúng tôi đề xuất rằng hỗ trợ khả năng mở rộng cho các thành phần có thể được cung cấp bởi một ngôn ngữ lập trình mà unifes và generalizes lập trình hướng đối tượng và chức năng. Đối với các ngôn ngữ được gõ tĩnh, trong đó Scala là một thể hiện, hai mô hình này hiện nay đã tách biệt hoàn toàn. (Odersky)

Cá nhân tôi phân loại Scala cùng với Python về các vấn đề mà nó giải quyết và cách thức. Sự khác biệt dễ thấy và thỉnh thoảng khiếu nại là Loại phức tạp. Tôi đồng ý rằng trừu tượng của Scala phức tạp và đôi khi có vẻ phức tạp nhưng đối với một vài điểm:

  1. Chúng cũng chủ yếu là tùy chọn.
  2. Trình biên dịch của Scala giống như thử nghiệm miễn phí và tài liệu như độ phức tạp chu kỳ và các dòng mã leo thang.
  3. Khi thực hiện khéo léo, Scala có thể thực hiện các hoạt động khác nhưng không thể thực hiện được sau các API nhất quán và mạch lạc. Từ Scala 2.8 Collections:

Ví dụ, một String (hay đúng hơn: sự ủng hộ của lớp RichString) có thể được xem như là một chuỗi các Chars, tuy nhiên nó không phải là một loại bộ sưu tập chung. Tuy nhiên, ánh xạ một nhân vật để đồ vật trên một RichString lại nên tạo ra một RichString, như trong sự tương tác sau đây với Scala REPL:

scala> "abc" map (x => (x + 1).toChar) 
res1: scala.runtime.RichString = bcd 

Nhưng điều gì sẽ xảy ra nếu một áp dụng một hàm từ Char để int vào một chuỗi? Trong trường hợp đó, chúng ta không thể tạo ra một chuỗi như là kết quả, nó phải là một chuỗi các phần tử Int thay thế. Trên thực tế một nhận:

"abc" map (x => (x + 1)) 
res2: scala.collection.immutable.Vector[Int] = Vector(98, 99, 100) 

Vì vậy, nó chỉ ra rằng sản lượng bản đồ các loại khác nhau tùy thuộc vào những gì các loại kết quả của các đối số hàm được là! (Odersky)

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