Việc đóng cửa trong Java sẽ tác động đến Cộng đồng Java như thế nào?


11

Đây là một trong những tính năng được nói đến nhiều nhất được lên kế hoạch cho Java: Closures. Nhiều người trong chúng ta đã mong mỏi họ. Một số người trong chúng tôi (bao gồm cả tôi) đã trở nên hơi thiếu kiên nhẫn và đã chuyển sang các ngôn ngữ kịch bản để lấp đầy khoảng trống.

Nhưng, một khi các lần đóng cửa cuối cùng đã đến với Java: chúng sẽ ảnh hưởng đến Cộng đồng Java như thế nào? Liệu sự tiến bộ của các ngôn ngữ kịch bản được nhắm mục tiêu VM sẽ chậm khi thu thập dữ liệu, giữ nguyên hoặc tích lũy? Mọi người sẽ tập trung vào cú pháp đóng mới, do đó biến tất cả các cơ sở mã Java thành các triển khai có cấu trúc chức năng hơn? Chúng ta sẽ chỉ thấy các bao đóng được rắc trong Java trong suốt? Điều gì sẽ có hiệu lực trên công cụ / IDE hỗ trợ? Làm thế nào về hiệu suất? Và cuối cùng, nó có ý nghĩa gì đối với việc tiếp tục áp dụng Java, như một ngôn ngữ, so với các ngôn ngữ khác đang ngày càng phổ biến?

Để cung cấp một ví dụ về một trong các đặc tả cú pháp Đóng cửa Java được đề xuất mới nhất:

public interface StringOperation {
   String invoke(String s);
}

// ...

(new StringOperation() {
   public invoke(String s) {
       new StringBuilder(s).reverse().toString();    
   }
}).invoke("abcd");    

sẽ trở thành ...

String reversed = { 
    String s => 
    new StringBuilder(s).reverse().toString()
  }.invoke("abcd");

[nguồn: http://tronicek.blogspot.com/2007/12/closures-clenses-is-form-of-anonymous_28.html]


Ví dụ bạn đăng là từ nhiều năm trước - bạn có chắc chắn đó là đại diện cho các đề xuất hiện tại không?
Daniel Earwicker

Nó có thể không phải là: thoải mái xem lại ví dụ của tôi

3
Gần đây tôi đã ngừng sử dụng Java. Tôi vẫn mong được đóng cửa mặc dù.
Anto

@Daniel - đây không phải là đề xuất hiện tại, dường như có một dòng điện hơn (và rất khác nhau) ai ở đây: baptiste-wicht.com/2010/05/...
Nicole

nó giống như biểu thức C # lambda?
Louis Rhys

Câu trả lời:


4

Tôi nghĩ rằng sẽ mất một thời gian để nhiều nhà phát triển Java 'bình thường' có thể hiểu được khái niệm này nếu họ chưa quen với nó, nhưng dần dần nó sẽ dễ dàng sử dụng Java thông thường, vì lợi ích của chúng tôi. Sẽ thật tuyệt nếu nó được chấp nhận nhanh như thuốc generic khi Java 5 xuất hiện.

Tôi tưởng tượng nó sẽ không ảnh hưởng đến các ngôn ngữ kịch bản nhắm mục tiêu VM vì nó chỉ là một lợi thế của việc sử dụng các ngôn ngữ có ngôn ngữ đó.


3

Có một chu kỳ thông thường đi kèm với bất kỳ công cụ mới sáng bóng nào:

  • Sự phấn khích lớn, với một loạt người dùng mới lạm dụng nó. Điều này là bình thường và lành mạnh, vì nó giúp chúng tôi hiểu những hạn chế của công cụ mới và cách sử dụng nó.
  • Những người dè dặt hơn sẽ nói và hạ bệ những người chấp nhận sớm là ngu ngốc
  • Cuối cùng, sự phấn khích không còn nữa và những người chấp nhận sớm giải quyết những cách lành mạnh để sử dụng công cụ mới
  • Những người dè dặt hơn sẽ bắt đầu ghen tị với năng suất của những người sử dụng công cụ mới và bắt đầu áp dụng nó - sử dụng các mô hình hiện đang lành mạnh.

Tất cả điều này phải mất một vài năm để đi qua. Nó đúng với chú thích và khái quát, và nó cũng đúng cho việc đóng cửa.

Tác động đến dân ngôn ngữ kịch bản:

  • Đối với các ngôn ngữ hỗ trợ đóng cửa, điều này sẽ giúp các nhà văn ngôn ngữ kịch bản thực hiện công việc của họ hiệu quả hơn. Vì họ đã biết cách sử dụng các bao đóng, nên họ sẽ không nhất thiết phải làm những điều điên rồ.
  • Đối với các ngôn ngữ không hỗ trợ đóng cửa, điều này sẽ bị bỏ qua phần lớn.

1

Những người thích lập trình đa luồng sẽ có thể nhúng các cấu trúc dữ liệu bất biến trong Java và xử lý chúng theo cách giống như không cần thiết hơn mà không cần phải dùng đến các trình tự không theo trình tự do sự không khớp của ngôn ngữ giữa Java và Lisp.

Những người không sử dụng (hoặc hiểu) bất kỳ điều nào ở trên sẽ có thể làm những việc giống như họ đã làm trước đây.


1
Điều này không có ý nghĩa. Đóng cửa không có gì để làm với luồng hoặc biến đổi.
davidk01

Họ làm. Đóng cửa đúng cách đòi hỏi sự bất biến để làm việc mà không có vụ nổ não.
permeakra

Không, họ không. Một bao đóng là một đoạn mã biết về môi trường mà nó được tạo ra. Đó là nó.
davidk01

1
@ davidk01 định nghĩa là OK, nhưng khi đóng có liên kết đến biến có thể thay đổi, kết quả của nó thay đổi với biến đã thay đổi. Thông thường, đây không phải là điều người ta muốn, nhưng nếu trình biên dịch không phản đối, lỗi gần như không thể phát hiện được.
permeakra

1
@ davidk01 Không, tôi không. Quan điểm của tôi là đóng cửa / lambdas hoạt động tốt nếu chúng gắn liền với sự bất biến của các biến bị bắt. Nếu không, bạn đang thương xót Tzeentch, và chỉ những người thờ phượng tận tụy mới có cơ hội ở đây.
permeakra

1

Tôi nghi ngờ rằng những người quen thuộc với việc đóng cửa sẽ bắt đầu sử dụng chúng trong mã ứng dụng. Họ sẽ tránh chúng trong các thư viện trong một thời gian để duy trì khả năng tương thích ngược với các phiên bản Java cũ hơn.

Các lập trình viên không quen thuộc với các bao đóng từ các ngôn ngữ khác sẽ chậm chấp nhận chúng trong Java.

Generics đã được chấp nhận nhanh chóng khi chúng được giới thiệu với Java một phần vì tất cả các cảnh báo xuất hiện khi bạn nâng cấp và vì sự kết hợp của chúng vào SDK. Điều này sẽ không đúng với việc đóng cửa. Sẽ khó tìm thấy bằng chứng về sự tồn tại của họ, vì vậy chỉ những người muốn sử dụng chúng mới sử dụng chúng.

Tôi không nghĩ rằng việc phát triển các ngôn ngữ kịch bản lệnh JVM khác sẽ dừng lại. Những ngôn ngữ đó có động lực và rất nhiều tính năng bên cạnh việc đóng cửa. Tuy nhiên, chúng ta có thể thấy ít ngôn ngữ JVM mới hơn vì các bao đóng là động lực chính để tạo các ngôn ngữ JVM mới.


Bạn nên xem qua mseifed.blogspot.se/2012/09/ Khăn tôi nghĩ nó khá tuyệt!
momomo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.