2011-02-02 22 views
6

Dường như lập trình viên Lisp và Clojure thường phát triển các chương trình trực tiếp trong REPL. cf. Clojure Development: IDE or REPL?Tại sao phát triển kiểu REPL không phổ biến trong Ruby?

Câu hỏi của tôi là, tại sao cách tiếp cận này không phổ biến hơn trong Ruby, thông qua irb? Đây có phải chỉ là sự khác biệt về văn hóa, hay có lý do cấu trúc (ngôn ngữ cụ thể) tại sao phát triển REPL tập trung phổ biến hơn với Lisps hơn là với các ngôn ngữ như Ruby và Python?

Trả lời

8

Cú pháp Lisp dường như cho vay chính nó rất độc đáo cho phương pháp kết hợp tệp REPL và nguồn. Việc di chuyển các đoạn mã xung quanh lập trình trở nên dễ dàng hơn khi giới hạn văn bản của mỗi biểu mẫu là rõ ràng.

2

Tôi sử dụng Emacs cho Clojure và Ruby và thường tải các mô-đun ruby ​​của tôi thành irb và chơi tương tác trong các emacs giống như cách tôi thực hiện REPL.

+1

Đây là gọn gàng, nhưng nó không trả lời câu hỏi. Anh ta không tuyên bố hoặc cho rằng điều đó là không thể (thực ra, ngược lại). Anh hỏi tại sao nó không phổ biến hơn. – Ken

+0

Có lẽ họ không sử dụng emacs, hoặc là tốt hơn nhiều tại Test Driven phát triển hơn tôi. – thattommyhall

0

Thực tế là cách phát triển Ruby của tôi.

Thông thường tôi viết mã của tôi, sau đó tôi dán các phần của nó vào irb, thích ứng với chúng, dán chúng một lần nữa và như vậy.

Không có cách nào để Lisps in ra "trạng thái hiện tại" bạn đã phát triển kiểu REPL trong một chương trình không? Tôi nghĩ điều đó không thể xảy ra trong ruby.

1

Thường xuyên chạy thử nghiệm đơn vị của bạn ít nỗ lực hơn so với nhập những thứ trong thông qua Ruby tương đương với REPL. Sau đó, một lần nữa, đôi khi tôi phải thêm một số gỡ lỗi printf vào mã ...

+1

Đó là một điều văn hóa, tôi nghĩ vậy. Ruby có di sản unix nhanh chóng khởi động, thoát ra khi bạn đang thực hiện, trong khi văn hóa lisp là nhiều hơn về một môi trường sống. Nhưng không có lý do kỹ thuật nào Ruby không thể sử dụng theo cách này. – technomancy

2

Tôi nghĩ rằng rất nhiều điều này là do các biên tập viên Rubyists có xu hướng sử dụng. Tôi sử dụng vim, mà không có một cách tuyệt vời để tương tác với một REPL. Textmate ở trong cùng một chiếc thuyền (AFAIK). Emacs, Dr Vợt, vv, mặt khác, tất cả đều có một cơ chế tuyệt vời để tương tác với một REPL. Tôi tin rằng Lispers sẽ có xu hướng sử dụng các loại trình soạn thảo/môi trường đó.

+0

slime.vim là phong nha: http://technotales.wordpress.com/2007/10/03/like-slime-for-vim/ –

+0

@Ben Mabey: trông rất tuyệt. Tôi sẽ phải kiểm tra điều đó. – cam

1

Có lẽ chúng sẽ giúp:

  • interactive_editor là một phần mở rộng IRB biết thêm rằng trong khả năng mở vim, emacs, MacVim, nano và TextMate và làm biên tập của bộ đệm IRB.
  • irbtools bao gồm interactive_editor cùng với một số bổ sung tốt đẹp khác.
  • Utility Belt là một bộ sưu tập đá quý IRB khác mở rộng chức năng của nó và cũng bao gồm một cái gì đó để cho phép chỉnh sửa bộ đệm.

Tôi là một trường học cũ nên tôi thường mở trình chỉnh sửa và mở trong cửa sổ đầu cuối; Thói quen cũ chết cứng bạn biết. Tôi sử dụng irbtools, nhưng có ý định chuyển sang Vành đai Tiện ích để xem nó cảm thấy như thế nào khi so sánh.

0

Tôi không phải là nhà phát triển Ruby. Tuy nhiên tôi cảm thấy lý do là tính minh bạch tham chiếu.

Hàm clojure thành ngữ nhất là các hàm thuần túy tuân theo tính minh bạch tham chiếu. Kết quả là cá nhân tôi tìm thấy nó dễ dàng hơn nhiều để kiểm tra các chức năng là các đơn vị độc lập độc lập và chúng phần nào cung cấp mục đích của các bài kiểm tra đơn vị. Clojure là một ngôn ngữ được đánh giá cao thích rằng hầu hết các chức năng đều không có quốc tịch. Nó tạo ra sự phân biệt rõ ràng giữa mã nơi các hiệu ứng phụ xảy ra cũng như các trạng thái được duy trì bằng cách sử dụng các lựa chọn thay thế khác như var, refs, agents, atoms v.v ..., giữ phần lớn mã của bạn sạch sẽ, hiệu ứng phụ miễn phí và minh bạch.

Tôi cảm thấy bất kỳ mã nào được cấu trúc xung quanh các hàm trong suốt và trạng thái không liên quan sẽ tự động cho vay để được hưởng lợi từ REPL cho dù nó có trong Ruby hay bất kỳ ngôn ngữ lập trình nào khác không.

Mặc dù đối với hầu hết các mục đích thực tế, CLI được cung cấp bởi một ngôn ngữ khác sẽ hữu ích như nhau, tuy nhiên khái niệm về Read, Eval, Print and Loop không giống với LISP vì nó thuộc bất kỳ ngôn ngữ nào khác. Bất kỳ ngôn ngữ non-homoiconic sẽ không có giai đoạn READ và nó sẽ chỉ đọc biểu diễn văn bản hoặc chuỗi, tuy nhiên trong LISP, giai đoạn READ thực sự có thể phân tích cú pháp dưới mọi hình thức s-expression mà bạn ném vào đó. Để biết thêm chi tiết về nó tham khảo dưới đây 2 câu trả lời:

Is Lisp the only language with REPL?

How is Lisp's read-eval-print loop different than Python's?

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