Được xây dựng trong thư viện Scala chậm?


8

Tôi tìm thấy câu hỏi này và chấp nhận câu trả lời trên StackOverflow. Nó liên quan đến trình phân tích cú pháp JSON chậm trong thư viện Scala tiêu chuẩn.

Sự đồng thuận như vậy, là thư viện JSON tích hợp chậm, và, theo lời của DMC: "nó giống như vậy, và đó là như vậy"

Có lẽ tôi chỉ ngây thơ ở đây, nhưng nghe có vẻ như là một cách tiếp cận tồi để phát triển ngôn ngữ. Không nên xây dựng trong thư viện được hoàn hảo? Họ không phải là tất cả đối với mọi người và tôi chấp nhận rằng Scala có thể mở rộng. Nhưng, nếu có một thư viện tích hợp, thì chắc chắn nó phải vững chắc và nhanh như ngôn ngữ phải cung cấp.

Tôi đang khiếu nại với Star Command ;-)

Có ai biết một người bình thường như tôi có thể nói lên ý kiến ​​của tôi về vấn đề này ở đâu, tức là chúng ta có thể đi đâu để giúp định hình ngôn ngữ Scala không?

Cập nhật:

Câu hỏi này không có ý định theo bất kỳ cách tiêu cực nào. Scala, đó là những người sáng tạo và cộng đồng Scala hoàn toàn tốt đẹp. Tôi chỉ đơn giản là ngạc nhiên khi thấy rằng một cái gì đó như trình phân tích cú pháp JSON tích hợp không còn tối ưu (theo câu hỏi trong liên kết được cung cấp)


Ôi, thật đáng yêu biết bao nếu tôi có thể chấp nhận tất cả những câu trả lời thông minh này. Cảm ơn mọi người.
Jack

Cập nhật: Các trình kết hợp trình phân tích cú pháp đã được tách thành một tệp jar riêng biệt và trình phân tích cú pháp JSON đã không được chấp nhận.
soc

Câu trả lời:


13

Các thư viện tích hợp nên hoàn hảo.

Trong một thế giới lý tưởng, vâng. Nhưng hoàn hảo là kẻ thù của tốt. Bất kỳ sáng tạo thực sự luôn luôn là một số loại đánh đổi. Nó có thể là một sự đánh đổi giữa hiệu suất và tính linh hoạt, ví dụ. Hoặc hiệu suất so với nỗ lực để viết thư viện. Nếu nó "đủ tốt cho bây giờ" và có nhiều vấn đề quan trọng hơn để giải quyết, thì tốt hơn là tập trung vào những vấn đề quan trọng hơn đó. Tối ưu hóa chỉ cho tốc độ thường là nền kinh tế sai lầm.

Một điểm quan trọng trong sự đánh đổi ngôn ngữ / thư viện / API là việc thay đổi giao diện sau này rất khó khăn vì nó thường phá vỡ mã cũ được xây dựng trên giao diện. Nhưng việc thực hiện (tức là tốc độ) có thể được cải thiện sau này, vì vậy ban đầu bạn có thể tiết kiệm nó, nếu nó giúp tập trung nỗ lực vào việc làm cho giao diện phù hợp. Thứ tự quan trọng là:

  1. Giao diện. Cú pháp. Định dạng tập tin. Khó sửa đổi sau khi phát hành. Phải phấn đấu để có được ngay từ đầu.
  2. Ổn định, đúng đắn. Tất nhiên mọi thứ nên hoạt động như họ dự định. Nhưng nếu không, có thể được sửa chữa.
  3. Hiệu suất, tốc độ. Đôi khi rất quan trọng, thường là không. Chắc chắn có thể được cải thiện sau này.

Có ai biết một người bình thường như tôi có thể nói lên ý kiến ​​của tôi về vấn đề này ở đâu, tức là chúng ta có thể đi đâu để giúp định hình ngôn ngữ Scala không?

Tôi nghĩ rằng từ khóa ở đây là "nút cổ chai". Nếu bạn có một trường hợp sử dụng thực tế, nơi hiệu suất của thư viện JSON là các nút cổ chai, sau đó bạn có thể đưa vấn đề này lên trong mailing list Scala. Nếu bạn có thể tự cải thiện nó, tốt, nhưng nếu người khác có nghĩa vụ phải cải thiện nó, ít nhất phải có một nhu cầu thực sự cho nó.


+1 cho hoàn hảo là kẻ thù của tốt. Nhắc nhở tôi về những gì tôi đã biết, bạn vừa tiết kiệm cho tôi một vài giờ. Cảm ơn
Jack

9

Trình phân tích cú pháp JSON đi kèm với thư viện chuẩn dựa trên các trình kết hợp trình phân tích cú pháp. Các trình kết hợp trình phân tích cú pháp giúp tạo các trình phân tích cú pháp dễ hiểu và sửa đổi, và thực hiện rất nhanh chóng. Toàn bộ ngữ pháp cho JSON được định nghĩa trên các dòng 134 đến 140 ở đây . Nếu bạn xem qua Nâng JSON , bạn thậm chí không thể chọn một nhóm các dòng đại diện cho ngữ pháp.

Tuy nhiên, các trình kết hợp trình phân tích cú pháp - ít nhất là thư viện Scala (Haskell cũng có chúng) - rất chậm. Có thể trình phân tích cú pháp packrat được giới thiệu trên Scala 2.8 sẽ hoạt động tốt hơn, nhưng trình phân tích cú pháp JSON đó cũ hơn nhiều và, nếu tôi có sự thật của tôi, nó được tạo ra chủ yếu như một ví dụ.

Bây giờ, Scala chỉ nên làm cho các thư viện hoàn hảo có sẵn? Chà, với các tài nguyên bị ràng buộc có sẵn, thay thế là không có thư viện JSON nào cả. Hôm nay, điều đó sẽ ổn - sau tất cả, có rất nhiều lựa chọn thay thế. Nhưng tại thời điểm JSON được thêm vào thư viện và trước khi áp dụng rộng rãi JSON làm cho nó trở nên quan trọng về hiệu năng, nó là thứ gì đó tốt đẹp để có.


+1 Câu trả lời chắc chắn như mọi khi D. Cảm ơn liên kết đến nguồn JSON.
Jack

3

Nếu những người tạo ra Scala không phát hành bất kỳ mã nào cho đến khi nó được tối ưu hóa hoàn hảo để đạt hiệu suất cao nhất, Scala có thể sẽ ở phiên bản 0.1, không phải 2.9.

Thực tế tất cả các ngôn ngữ mới có vấn đề hiệu suất ban đầu . Nghĩ lại về Java 1 (nếu bạn có bất kỳ kinh nghiệm nào với nó). Điều này là do ban đầu, những người sáng tạo tập trung nhiều vào các tính năng và giao diện ngôn ngữ hơn là các chi tiết triển khai và theo cách này là hợp lý. Không ai có thể dự đoán cách (và liệu) một ngôn ngữ và các thư viện lớp của nó sẽ được sử dụng trong tương lai (ngoài các trường hợp tầm thường như thư viện chuỗi, v.v.). Vì vậy, tốt hơn là chỉ tối ưu hóa khi có nhu cầu thực sự cần thiết, hơn là dành thời gian để tối ưu hóa một đoạn mã sẽ không thực sự tạo ra bất kỳ sự khác biệt rõ ràng nào trong cuộc sống của các nhà phát triển.

Hơn nữa, Scala đặc biệt ở chỗ nó được xây dựng dựa trên JVM, vì vậy tất cả các thư viện Java hiện có đều có sẵn trực tiếp từ nó. Nếu bạn thích hiệu năng hơn độ tinh khiết của ngôn ngữ, bạn luôn có thể chọn và sử dụng một lớp / thư viện Java phù hợp.


2

Phần mềm nguồn mở của nó. Vì vậy, so với phần mềm độc quyền, các tác giả có xu hướng thẳng thắn hơn về bất kỳ thất bại nào. Cũng không có giả vờ rằng bạn có bất kỳ cách nào để tác động đến sự phát triển ngoài các yêu cầu lịch sự, hoặc, tự mình viết các cải tiến và tôn trọng gửi mã cải tiến để đưa vào bản phát hành chung.

Do tính chất của Scala và thích hợp mà nó chiếm (xử lý song song quy mô lớn), các nhà phát triển có thể có quyền ưu tiên cho hiệu suất nội bộ của mã có thể được thực thi vài nghìn lần cho một yêu cầu so với trình phân tích cú pháp JSON sẽ chỉ được thực thi một lần cho mỗi yêu cầu.


"Vì vậy, so với phần mềm độc quyền, các tác giả có xu hướng thẳng thắn hơn về bất kỳ thất bại nào.": Tôi sẽ không coi đây là quy tắc, ví dụ Windows 95 rất không ổn định và Microsoft rất thẳng thắn về nó (Windows chỉ thực sự ổn định với Windows XP, tức là nhiều năm sau).
Giorgio

Ah ngày xưa tốt đẹp - MS không còn lắng nghe, chỉ cần xem xét nút khởi động Windows 8 fiasco.
James Anderson

Nếu bạn có độc quyền, bạn không cần phải lắng nghe quá nhiều: đó là khách hàng của bạn phải lắng nghe bạn.
Giorgio

2

Với sự phong phú của các trình phân tích cú pháp JSON nguồn mở nhanh cho JVM, đây có vẻ như là một ví dụ hoàn hảo về việc không được phát minh ở đây . Một tính năng tích hợp có cường độ chậm hơn so với các triển khai hiện có là một dấu hiệu cho thấy các nhà sản xuất ngôn ngữ không quan tâm quá nhiều đến việc sử dụng trong thế giới thực, ít nhất là về tính năng này.


0

Vì vậy, sửa chữa nó. Đây là cách nguồn mở làm việc người đàn ông của tôi. Bạn bị ngứa, bạn gãi nó. Bạn có biết bạn có thể chạy các trình phân tích cú pháp Java JSON trong Scala không?

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.