2010-05-23 27 views
5

Tôi dự định thêm một tính năng tìm kiếm tốt hơn vào trang web của mình, vì vậy tôi nghĩ rằng tôi sẽ viết nó trong C và sử dụng CGI làm phương tiện để truy cập nó. Nhưng có vẻ như Perl là ngôn ngữ phổ biến nhất khi nói đến các công cụ dựa trên CGI. Tại sao vậy? Nó sẽ không được lập trình nhanh hơn trong C hay mã máy?Tại sao Perl thường được sử dụng để viết kịch bản CGI?

Lợi ích nào, nếu có, có để viết nó bằng ngôn ngữ kịch bản không?

Cảm ơn.

+0

bản sao có thể có của [Lý do chọn ngôn ngữ kịch bản trên C# là gì?] (Http://stackoverflow.com/questions/1193912/what-are-reasons-to-choose-a-scripting-langu age-over-c) – Quentin

+1

@David: câu hỏi này dường như đặc biệt về Perl so với C đối với các tập lệnh CGI. –

+0

Các câu trả lời là như nhau mặc dù. – Quentin

Trả lời

3

Lợi thế lớn nhất khi sử dụng Perl là CPAN.

+4

oh, chắc chắn, * bây giờ * đó là tất cả về CPAN - nhưng trở lại trong ngày, tất cả mọi người có Perl CGIs của họ từ Matt's Script Archive. (đó không phải là một điều tốt, sau đó họ phát hiện ra). – Joe

2

Thao tác chuỗi, thường là một phần lớn phát triển web, khá đau đớn và dễ bị lỗi trong C, trong các bộ phận do thiếu quản lý bộ nhớ tự động. Hãy ghi nhớ rằng thông thường, thời gian thực thi tập lệnh không phải là nút cổ chai hoặc có thể bị phá vỡ bởi các cơ chế lưu bộ nhớ đệm thích hợp. Trong nhiều trường hợp, bạn nên chọn ngôn ngữ tối đa hóa năng suất của nhà phát triển thay vì mất thời gian phát triển không cần thiết để đạt được hiệu suất sẽ không được người dùng chú ý đến.

Nguyên tắc chung này không áp dụng đầy đủ trong trường hợp của bạn, vì công cụ tìm kiếm có thể được hưởng lợi từ mã cấp thấp được tối ưu hóa. Điều này không có nghĩa là bạn sẽ phải làm mọi thứ trong C, mặc dù: trình thông dịch PHP đã được biết là chậm chạp, nhưng vì hầu hết các hàm thư viện được thực hiện trong C, bạn có thể thoát khỏi nó. Tôi khuyên bạn nên viết ứng dụng bằng ngôn ngữ cấp cao mà bạn chọn và chỉ thực hiện lại các phần trong C đã được xác định là botlenecks.

6

Bảo mật, một điều. Nếu bạn viết trong C, bạn phải rất cẩn thận để chắc chắn rằng tất cả các chuỗi xử lý của bạn là chính xác, do đó bạn không giới thiệu tràn bộ đệm, vv Trong bất kỳ ngôn ngữ kịch bản phong nha, người khác đã làm điều đó cho bạn. Bạn có thể có lỗ hổng bảo mật khác, nhưng trừ khi có lỗi trong thời gian chạy hoặc mô-đun mở rộng, bạn sẽ không bị tràn bộ đệm. Lợi ích này không giới hạn đối với các ngôn ngữ kịch bản; các ngôn ngữ biên dịch như Java và C# cũng cung cấp nó, và nó có thể đạt được (mặc dù thường khó khăn hơn) trong C++ với std::string và C với một thư viện chuỗi tốt.

Bảo mật, Perl có một tính năng hữu ích khác không được thấy trong nhiều hệ thống khác: chế độ "taint". Điều này giúp bạn không được phép chuyển người dùng vào các hệ thống khác như một phần của truy vấn cơ sở dữ liệu, dòng lệnh, v.v. Đây là một lợi ích tuyệt vời khi viết kịch bản CGI. chấp hành. Chế độ Taint không phải là hoàn hảo, vì quá trình untainting phụ thuộc vào lập trình làm việc chính xác, nhưng nó ít nhất giúp bắt các đường dẫn mã mà bạn bỏ qua. Ngoài ra, tại thời điểm này, Perl đã được sử dụng trong một thời gian dài cho kịch bản CGI, do đó, có một cơ thể lớn các thư viện, khung, vv đã tồn tại để làm cho việc viết kịch bản mới dễ dàng hơn. Plus CPAN có mã để làm bất cứ thứ gì.

+1

Mặc dù đây là những tính năng tốt đẹp của Perl, tôi hiếm khi gặp bất kỳ ai chọn Perl vì chúng. Thật vậy, rất ít người dường như thậm chí sử dụng chế độ taint hoặc biết những gì một bộ đệm là (ít hơn những gì tràn nó sẽ làm). –

+1

Tôi ước mọi người sẽ xem xét nó chỉ vì những lý do đó - tuy nhiên, tôi đã có ai đó đưa cho tôi một kịch bản shell vào tháng trước và muốn tôi vạch trần nó như một CGI. (kiểm tra taint? những gì là gì?) – Joe

+0

Mặc dù bạn có thể bọc shell script với một wrapper Perl CGI. –

3

Ngoài các câu trả lời đã đề cập, các ứng dụng web cơ bản tốc độ truyền mạng là một nút cổ chai phổ biến hơn so với lựa chọn ngôn ngữ. Nó thường dễ dàng hơn để viết các ứng dụng web trong Perl so với C, do đó, một sự khác biệt nhỏ về tốc độ thời gian chạy là không đáng để nỗ lực thêm cần thiết để tạo ra ứng dụng. C là trong thực tế đôi khi được sử dụng cho một số phần của các ứng dụng web rất tính toán chuyên sâu.

4

OK, phần còn lại của câu trả lời đều có lý do khách quan khá tốt.Chỉ cần cho đầy đủ, đây là một đánh giá chủ quan để cho nó một số màu sắc:

tôi đã viết:

  • phần mềm CGI trong C tinh khiết (đối với tiền bạc, chuyên nghiệp). Điều này bao gồm việc tạo ra toàn bộ thư viện CGI (đó là trong những ngày trước khi các thư viện CGI có sẵn).
  • Thư viện CGI của riêng tôi trong Perl
  • Công cụ CGI trong Perl bằng CPAN.

Dựa trên những trải nghiệm đó, chiếc C thuần khiết đem lại sự hài lòng nhất cho đến mức "Hãy nhìn vào góc nhìn kỹ thuật tuyệt vời mà tôi tạo". Đặc biệt là trong những ngày mà CGI là thương hiệu sáng bóng mới và HTML tĩnh là nội dung chính ở khắp mọi nơi.

Cuộn Perl CGI cuộn của riêng tôi dễ dàng hơn nhiều so với C một do tất cả các lý do khách quan được liệt kê trong các câu trả lời khác.

Và các dự án CPAN Perl là những dự án duy nhất cung cấp thời gian quay vòng giao hàng khá tốt và cho phép tôi tập trung xây dựng logic kinh doanh trái ngược với hệ thống ống nước.

19

Quay lại ngày CGI trở nên phổ biến, Perl là ngôn ngữ dễ sử dụng nhất. Mọi người có thể nhận "em bé Perl" rất nhanh, và vì chương trình là một tập tin văn bản, họ có thể dễ dàng tải nó lên và vượt qua nó. Kể từ khi Perl bắt đầu cuộc sống như một ngôn ngữ quản trị hệ thống, rất nhiều máy chủ đã cài đặt nó. Khi đến lúc tạo một kịch bản CGI trên một số dịch vụ lưu trữ, Perl đã có nhiều khả năng ở đó. Không chỉ vậy, một kịch bản Perl là khá giống nhau trên bất kỳ nền tảng nào, vì vậy những gì bạn đã viết cục bộ có khả năng hoạt động chính xác như nhau trên một máy tính khác. Nó được nhanh hơn để chương trình cho "lập trình viên ngẫu nhiên" trong kế hoạch lớn của sự vật bởi vì họ có ít hơn để tìm hiểu trước khi họ có thể làm cho một chương trình hữu ích; họ có thể bắt đầu với không có gì và có một chương trình Perl chạy trong một giờ, ngay cả khi họ chỉ là vận chuyển hàng hóa. Họ không phải lo lắng về tất cả những thứ đi kèm với việc viết và biên dịch một chương trình C, sau đó chuyển nó sang một máy chủ khác (có thể là một nền tảng khác).

Perl có chỗ đứng nhanh và bạn vẫn thấy hiệu ứng của ngày hôm nay. Nếu Perl đã bắt đầu từ đầu ngày hôm nay, tôi không nghĩ rằng nó sẽ nhất thiết phải giành chiến thắng trên bất cứ điều gì khác. PHP chắc chắn đã thực hiện trên đám đông cấp thấp, khởi động nhanh (và đối với hầu hết trong số họ, nó có thể là công cụ thích hợp lúc đầu).

Nó không làm tổn thương rằng Perl cũng có rất nhiều tính năng xử lý văn bản. Một số người nói về CPAN, nhưng điều đó hầu như không tồn tại khi Perl bắt đầu chú ý đến lập trình CGI.

Tuy nhiên, Perl không đặc biệt cho lập trình CGI như trước đây. Nó vẫn làm tất cả những điều tuyệt vời mà nó luôn luôn có, nhưng bây giờ các ngôn ngữ khác nhau đã bắt kịp cả về chức năng, tính khả dụng và nhận thức của cộng đồng.

Tôi bắt đầu lập trình các công cụ CGI vào năm 1994 và tôi vẫn thấy các khung công việc khó khăn nhất và đáng kinh ngạc nhất tạo ra nó như thế nào. Tôi thực sự muốn chúng tôi đã có Seaside trở lại sau đó bởi vì bạn thậm chí không bao giờ biết về tất cả những điều ngu ngốc khác khuôn khổ làm cho bạn làm. Thế giới sẽ tốt hơn thế nào nếu chúng ta học Smalltalk. :)

-2

Vào thời điểm CGI được phát minh trở lại trong những ngày đầu của web, đó là cách duy nhất để xử lý các yêu cầu web động, chẳng hạn như trả lời các biểu mẫu được gửi hoặc nhấp vào một sơ đồ tưởng tượng.Bản thân phần mềm máy chủ web có thể chỉ cung cấp nội dung tĩnh, vì vậy các chương trình bên ngoài là cần thiết để xử lý các nội dung tương tác.

Quản trị viên web đầu tiên có lẽ cũng là quản trị viên hệ thống thường xuyên thông thạo Perl. Tôi nhớ rằng các máy chủ httpd NCSA đầu tiên có các chương trình CGI mẫu được viết bằng Perl, C và shell. Các kịch bản shell đã bị loại bỏ khá nhanh bởi vì chúng không an toàn và không tốt cho bất kỳ điều gì khác ngoài các chương trình CGI thực sự ngắn. Các chương trình C hoạt động tốt, nhưng Perl thuận tiện hơn rất nhiều.

tôi đoán là Perl cất cánh như de facto ngôn ngữ tiêu chuẩn để sử dụng với CGI vì nhiều lý do:

  • quản trị hệ thống đã quá quen thuộc với nó.
  • Thư viện an toàn, nhanh chóng trở nên phổ biến rộng rãi; mô-đun CGI.pm được vận chuyển tiêu chuẩn với Perl.
  • Perl cung cấp sự thỏa hiệp tốt giữa tốc độ và sự phát triển dễ dàng.

Không có lý do gì khiến Perl phải được sử dụng; bất kỳ ngôn ngữ nào có thể làm việc với các biến môi trường Unix đều phù hợp.

Điều đó nói rằng, CGI đã bị mất ưu thế vì nó rất chậm so với các ngôn ngữ chạy trong không gian địa chỉ của máy chủ web, chẳng hạn như PHP.

+4

Đoạn cuối cùng của bạn là một chút iffy, kỹ thuật nói - trong khi tôi chắc chắn * bạn * hiểu rằng CGI là một giao diện và ** không ** ngôn ngữ, văn bản của bạn giúp người khác dễ hiểu và giải thích hai thuật ngữ một cách dễ dàng. Ngoài ra, sự chậm trễ là độ trễ do chi phí quá trình khởi động lặp lại.Các vấn đề tốc độ với CGI đã được giải quyết trong hai thời trang chính: bằng cách nhúng các trình thông dịch ngôn ngữ động vào máy chủ web (Apache + mod_php, mod_ruby hoặc mod_perl) và bằng cách sử dụng các máy gia tốc CGI như FastCGI hoặc SpeedyCGI. Ngoài ra, các tập lệnh PHP có thể được (và) được sử dụng với CGI để cung cấp nội dung web. – daotoad

+1

PHP thường được chạy dưới dạng CGI trên các nhà cung cấp dịch vụ lưu trữ –

0

Tôi nghĩ lợi ích cho việc sử dụng một ngôn ngữ kịch bản, là hầu hết mọi người nhiều hơn nữa hiệu quả sử dụng một mức ngôn ngữ năng động cao hơn họ đang sử dụng C.

Rất nhiều người dường như lo lắng về tốc độ, nhưng trong thực tế nó bình thường ... và nếu nó trở thành một vấn đề hầu hết các ngôn ngữ kịch bản có một cơ chế mở rộng nơi bạn có thể viết mô-đun trong C và vẫn sử dụng chúng trong ngôn ngữ kịch bản cấp cao hơn (Giống như XS trong perl, hoặc pythons c-api)

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