Clojure có ích gì? [đóng cửa]


100

Mọi người đang sử dụng Clojure cho những ứng dụng thực tế nào?

Tôi sử dụng Groovy cho công cụ keo, Java cho các hệ thống lớn, tập lệnh Python / Perl để phân tích cú pháp và keo. Tôi có thể thấy mình đang gọi vào Clojure từ Java nhưng tôi không thể biết mình sẽ sử dụng nó ở đâu theo đúng nghĩa của nó. Nó khiến tôi ngạc nhiên là sẽ dễ dàng hơn khi sử dụng hầu hết mọi ngôn ngữ script cho các tác vụ adhoc.

Tôi không phải là chuyên gia Groovy hay một người hâm mộ cuồng nhiệt nhưng điều đó khiến tôi ngạc nhiên rằng nó có một khung hỗ trợ tốt hơn, các công cụ và rất nhiều cấu trúc ngôn ngữ (đóng, lập trình chức năng). Điều tương tự cũng có thể nói đối với Scala.

Có thể tương lai của nó là một ngôn ngữ được nhúng trong các hệ thống khác?


23
Tất cả mọi thứ ngoại trừ làm cho tôi một chiếc bánh sandwich.
wheaties

12
@wheaties: Bạn đã thử (sandwich me BLT)chưa?
FrustratedWithFormsDesigner

3
Tại sao bạn không sử dụng Clojure cho "hệ thống lớn"? ISTM rằng, ít dài dòng hơn Java, hệ thống của bạn sẽ không cần quá lớn trong Clojure. :-)
Ken

2
Nhìn vào câu trả lời - tôi đoán rằng mọi người đang sử dụng nó cho một số thứ hay ho. Tôi tự hỏi có bao nhiêu doanh nghiệp sẽ chọn nó cho công cụ phát triển lâu dài?
Fortyrunner

1
Tôi biết đã lâu rồi, nhưng để lập trình bằng ngôn ngữ hàm cần phải có đầu óc nhạy bén. Đầu óc nhạy bén rất đắt đỏ, vì vậy tôi không biết về tiềm năng của Clojure's LTD từ quan điểm kinh doanh - cho đến khi nó trở nên phổ biến hơn nhiều so với ngày nay (5 năm sau).
Sean Allred

Câu trả lời:


93

Tôi đã sử dụng Clojure cho:

  1. Lừa các trang web
  2. Tập lệnh shell
  3. Xây dựng trang web
  4. Chơi xung quanh với OpenGL
  5. Viết máy chủ web không đồng bộ
  6. HTML Templating
  7. Chạy các tác vụ song song (tìm nạp nhiều URL và xử lý song song)
  8. Phát xung quanh với âm thanh thời gian thực
  9. Mô phỏng

Đó là những thứ thực tế / thú vị.

Nhưng Clojure cũng có nhiều chiều sâu lý thuyết. Những ý tưởng sẽ ngày càng trở nên phù hợp hơn khi xu hướng chủ đạo thực sự hiểu được tiềm năng của Lập trình chức năng.

Một ý kiến ​​cá nhân, nhưng Clojure phẳng cung cấp các cấu trúc ngôn ngữ tốt hơn để tổ chức phần mềm một cách chính xác (mà không gây đau đớn quá mức cho lập trình viên đang làm việc) của tất cả các ngôn ngữ mà tôi đã sử dụng cho đến nay về mặt học thuật và chuyên nghiệp - C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

Không có nghĩa là Clojure là hoàn hảo. Nhưng đối với tôi dường như nó được xây dựng trên một nền tảng tốt hơn hầu hết những thứ ngoài kia.


Bạn có phải là David Nolen? anh chàng đã thuyết trình về "Clojurescript: Lisp's Revenge". Đó là một cuộc nói chuyện tuyệt vời!
Amogh Talpallikar

1
//, Ý bạn là gì, "cung cấp cấu trúc ngôn ngữ tốt hơn để tổ chức phần mềm một cách chính xác"? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Nathan Basanese

2
@maSnun trên thời gian khởi động phần cứng hiện đại là khoảng 1 giây hoặc ít hơn. Điều này là tốt cho các tập lệnh shell.
dnolen

1
@dnolen Cảm ơn bạn đã dành thời gian trả lời. Tôi là một người mới đam mê clojure và mất khoảng 20 giây khi tôi cố gắng chạy tệp jar mà tôi tạo bằng lein uberjar. Tôi đang sử dụng OS X, Macbook với core i5 và RAM 16GB. Bạn có sử dụng bất kỳ tối ưu hóa đặc biệt nào không?
masnun

5
@maSnun uberjars không dành cho tập lệnh shell, chúng dành cho việc triển khai ứng dụng. Tối ưu hóa ứng dụng là một câu hỏi chung của JVM, không có gì cụ thể đối với Clojure. Bạn có thể viết các tập lệnh hash bang shell với Clojure dễ dàng như bất kỳ ngôn ngữ kịch bản nào khác và đó là những gì tôi muốn giới thiệu.
dnolen


18

Clojure đang được sử dụng rộng rãi để xử lý khối lượng lớn dữ liệu. Nó rất phù hợp với khai thác dữ liệu / thương mại-AI (ví dụ: Runa) và dự đoán quy mô lớn (hay còn gọi là WeatherBill). Câu chuyện đồng thời của Clojure thực sự hữu ích trong các lĩnh vực dữ liệu nặng này, nơi xử lý song song chỉ đơn giản là câu trả lời.


13

Đó là một câu hỏi khó trả lời. Bạn muốn làm gì? Không có nhiều thứ mà Clojure không thực sự phù hợp. Ý tôi là, nó không thực sự tuyệt vời đối với một tập lệnh dòng lệnh vì thời gian khởi động JVM (trừ khi bạn đang sử dụng cake hoặc thứ gì đó tương tự), nhưng điều đó có thể nói đối với bất kỳ ngôn ngữ JVM nào.

Clojure đặc biệt phù hợp với các tác vụ đồng thời. Nó được xây dựng ngay từ đầu để trở thành một ngôn ngữ tuyệt vời cho đồng thời, và hệ thống STM của nó thật tuyệt vời. Nếu bạn cần thực hiện một số công việc liên quan đến đồng thời nặng, Clojure có thể đặc biệt phù hợp với nhiệm vụ đó.

Tuy nhiên, người ta phải nhớ rằng Clojure là một ngôn ngữ có mục đích chung. Nó không chỉ phù hợp với một số ngách nhất định và nó có xu hướng hữu ích cho nhiều hoặc tất cả những thứ mà các ngôn ngữ JVM khác có thể phù hợp.

Clojure được thiết kế để trở thành một ngôn ngữ tuyệt vời theo đúng nghĩa của nó, và không nhất thiết phải là một ngôn ngữ keo. Bạn có thể xây dựng hệ thống từ đầu trong Clojure mà không cần chạm trực tiếp vào mã Java. Không phải là nó không tạo ra một ngôn ngữ keo tốt, tôi biết rất nhiều người đã sử dụng nó như vậy.

Nếu bạn có ý định gì đó, điều tốt nhất cần làm là xem xét giải pháp sẽ như thế nào trong bất kỳ ngôn ngữ nào là tùy chọn. Nếu nó trông / cảm thấy tốt hơn ở Groovy, hãy đi với Groovy. Cả hai đều là những ngôn ngữ hoàn toàn khác nhau và cả hai đều có mục đích của chúng.


Thậm chí sau đó tôi thấy mình viết kịch bản CLI Clojure, chỉ vì tôi thấy ngôn ngữ này dễ viết và không ngại thời gian khởi động trong trường hợp của tôi.
nha

7

Bạn có thể sử dụng Clojure ở bất kỳ đâu bạn sử dụng Groovy hoặc java. Tại sao bạn muốn làm điều đó ? Một số người thích ngọng. Những người sẽ chọn áo choàng thay vì Groovy. Một số người không thích nói ngọng. Những người sẽ chọn Groovy.


2
Nó không phải là một trường học chỉ để lựa chọn, clojure có rất nhiều tính năng mà không phải ngôn ngữ nào khác có) bằng cách nào đó không ai đề cập đến bất cứ điều gì, tôi hầu như không nhớ các cuộc nói chuyện trong hội nghị vì vậy tôi sẽ không thể viết câu trả lời thích hợp ở đây
holms
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.