2009-10-01 22 views
5

Tôi có ý tưởng về dịch vụ web, nhưng rất mới đối với lập trình web. Django trông tuyệt vời và giống như một cái gì đó tôi có thể nhận một cách nhanh chóng. Tôi có rất nhiều kinh nghiệm trong Haskell (và rất ít trong python) và muốn có thể bắt đầu viết một số thứ phụ trợ liên quan đến web không bằng ngôn ngữ yêu thích của tôi. Nhưng tất nhiên tôi không muốn làm điều đó nếu mã haskell sẽ không thể sử dụng nếu tôi đi với django.Tôi có thể viết các thành phần trong Haskell được sử dụng trên một trang web Django không?

Tôi đã xem xét một số khung công tác web haskell: hApps trông quá phức tạp và không có giấy tờ, turbinado trông có thể tiếp cận nhưng không có giấy tờ, v.v. Và tôi nghĩ sử dụng khung được sử dụng rộng rãi như django và có quyền truy cập vào nhiều mã mà tôi có thể cắm vào sẽ giúp tôi rất nhiều. Nhưng tôi rất cởi mở khi nghe về những ý tưởng khác về các khuôn khổ để sử dụng, hoặc các tùy chọn khác tôi phải sử dụng Haskell theo một cách nào đó.

Trả lời

4

Tùy thuộc vào ý nghĩa của "dịch vụ web".

Nếu bạn ngụ ý một ứng dụng web/trang web điển hình, bạn sẽ cần một giao diện dễ dàng với cơ sở dữ liệu, tạo HTML, xử lý HTTP dễ dàng, phiên và xử lý biểu mẫu. Bạn thực sự cần một khung web tốt cho điều đó.

Không có khung web 'tốt' cho Haskell ở ngoài đó. (Trong khi đưa ra phán quyết đó, tôi bao gồm các yếu tố như tài liệu, cộng đồng, xác suất-đó-nó-sẽ-không-bị bỏ rơi-trong-một-năm-cho-một-mới-shinier-cách tiếp cận vv).

Nếu bạn muốn nói điều gì đó ít hơn "webby", ví dụ: một dịch vụ trả về dữ liệu bản đồ và không cần hầu hết các tính năng đó, bạn có thể lấy đi một số thứ như Hack hoặc thậm chí Network.CGI để cung cấp cho bạn giao diện HTTP cơ bản, trên đó bạn sẽ xây dựng dịch vụ của mình, chạy với CGI/FastCGI. Nếu bạn cần một trang web động là tốt, bạn có thể sử dụng một cái gì đó như Django cho chỉ là bit đó.

Bạn cũng có thể viết các tệp thi hành độc lập Haskell được gọi từ mã Django. Nhưng trực tiếp Python < -> Haskell interop là không thể có thể/thực tế.

+2

"Python <-> Haskell interop khó có thể thực hiện được/thực tiễn". - chắc chắn có thể và thực tế để gọi Python từ Haskell - và hữu ích nếu bạn cần một thư viện. Xem ràng buộc của hpaste2 đối với sự trêu chọc. –

+0

Bạn có thể thấy điều này đáng ngạc nhiên, nhưng không phải mọi ứng dụng web đều "điền vào một biểu mẫu (và hiển thị các lỗi xác thực lỗi) và đưa kết quả vào cơ sở dữ liệu SQL". – jrockway

+0

@dons: Tôi nghĩ rằng poster gốc đã nói về việc gọi Haskell từ Python. Nhưng tôi đã không nhận thức được bất kỳ Python <-> interop Haskell, tôi đứng sửa :-) @ ĵrockway: đồng ý - đó là lý do tại sao tôi nói một ứng dụng web "điển hình". – spookylukey

1

Tìm hiểu python, bạn sẽ tìm thấy nó có nhiều tính năng chức năng. Nó rất dễ dàng để nhận và rất thú vị.

Lựa chọn tốt với Django.

+1

Tính năng phi chức năng của python là gì? Khác hơn là chống lực hấp dẫn (http://xkcd.com/353) tất nhiên. –

+1

@Dominic: Khả năng biến đổi đối tượng. Khả năng rebind biến. Hỗ trợ giới hạn cho các hàm lambda (đây là một hàm lớn). Thiếu sự hỗ trợ cho các chức năng soạn thảo và áp dụng một phần. – Chuck

3

Nếu bạn chỉ xây dựng một dịch vụ web, bạn có thể viết các chương trình cgi hoặc fastcgi trong Haskell để xử lý các cuộc gọi dịch vụ web.

+0

Đó có phải là phương pháp sẽ hoạt động với django hay một phương án thay thế không? Tôi có một số hiểu biết về CGI bên ngoài django, nhưng chưa thực sự rõ ràng về cách django/CGI làm việc cùng nhau. – jberryman

+0

@ jberryman: Tôi không biết Django hoạt động như thế nào với CGI, nhưng nếu bạn chỉ viết một dịch vụ web, tôi không chắc Django có phải là công cụ thích hợp cho công việc hay không. Như spookylukey nói, nếu bạn có nghĩa là một ứng dụng web chuẩn thì đó là một cái gì đó khác với những gì tôi đang nói đến. Nếu bạn chỉ muốn cung cấp các URL trả về dữ liệu thì tôi nghĩ bạn không nên sử dụng Django chút nào. – Amok

1

Đi tìm F # và xem NDjango - một cổng Django được viết bằng F #. Công bố đầy đủ: NDjango là dự án của tôi www.ndjango.com

+0

Đó là một đề xuất thú vị, nhưng rất nhiều người không quá nóng về ngôn ngữ MS. – Chuck

0

Nếu bạn muốn Haskell nói trực tiếp với cơ sở dữ liệu, bạn sẽ phải sửa đổi kịch bản chuyển đổi cơ sở dữ liệu Django để phát ra mã mô hình Haskell bằng cách sử dụng thư viện như Persistent của Yesod.

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