我计划在我的网站上添加一个更好的搜索功能,所以我认为我会用C语言编写它并使用CGI作为访问它的方法。但就基于CGI的东西而言,Perl似乎是最受欢迎的语言。这是为什么?用C或机器代码编程是不是更快?
如果有什么优势可以用脚本语言编写它?
感谢。
答案 0 :(得分:18)
在CGI变得流行的那一天,Perl是最容易使用的语言。人们可以很快拿起“宝贝Perl”,由于程序是一个文本文件,他们可以轻松上传并传递它。由于Perl起初是一种系统管理语言,许多服务器已经安装了它。当在某些托管服务上制作CGI脚本时,Perl很可能已经存在。不仅如此,Perl脚本在任何平台上几乎都是一样的,所以你在本地编写的内容很可能在不同的机器上完全相同。
在大型计划中为“偶然程序员”编程更快,因为他们在制作有用程序之前学习的次数较少;他们可以从零开始,并在一小时内运行一个Perl程序,即使它们只是货物结果。他们不必担心编写和编译C程序所带来的所有事情,然后将其转移到另一个主机(可能是一个不同的平台)。
Perl有一个快速的立足点,你仍然可以看到今天的影响。如果Perl今天必须从头开始,我认为它不一定能胜过其他任何东西。 PHP肯定接管了低端,快速启动的人群(对于大多数人来说,它可能是最初的合适工具)。
Perl也有很多文本处理功能。有些人谈论CPAN,但是当Perl开始注意到CGI编程时,这几乎不存在。
然而,Perl并不像过去那样特别适合CGI编程。它仍然可以完成它始终拥有的所有优秀功能,但现在各种其他语言都在兼顾功能,可用性和社区意识。
我在1994年开始编写CGI的东西,我仍然看到大多数框架都是如此令人难以置信且令人难以置信。我真的希望我们当时有Seaside,因为你甚至都不知道其他框架让你做的所有愚蠢的事情。如果我们都学会了Smalltalk,世界会变得多好多少。 :)
答案 1 :(得分:6)
安全,一方面。如果你用C语言编写,你必须非常小心,以确保你的所有字符串处理都是正确的,这样你就不会引入缓冲区溢出等。在任何体面的脚本语言中,其他人已经为你做过。您可能有其他安全漏洞,但除非运行时或扩展模块中存在错误,否则您将不会有缓冲区溢出。这种好处不仅限于脚本语言; Java和C#等编译语言也提供了它,并且可以在C ++中使用std::string
获得(尽管经常更难),并且C具有良好的字符串库。
Securitywise,Perl还有许多其他系统中没有的有用功能:“污点”模式。这使您不会盲目地将用户输入作为数据库查询,命令行等的一部分传递给其他系统。这在编写CGI脚本时是一个很好的好处,因为在将未经检查的用户输入传递给shell之前,脚本会干净地死掉。执行。污点模式并不完美,因为无污染的过程取决于程序员正确处理事情,但它至少有助于捕获您错过的代码路径。
此外,在这一点上,Perl已经被用于CGI脚本很长一段时间了,因此已经存在大量的库,框架等,以便更容易编写新脚本。加上CPAN可以执行任何操作。
答案 2 :(得分:4)
好的,其余答案给出了很好的客观原因。为了完整起见,这是一个主观评价,给它一些颜色:
我写道:
基于这些经验,纯粹的C对于“看看我所做的这个很酷的技术成就”的角度给予了最大的满足。特别是当CGI是品牌闪亮的时代,新的静态HTML是各地的主要内容。
由于其他答案中列出的所有客观原因,我自己的Perl CGI在技术上比C更轻松。
CPAN Perl项目是唯一提供相当不错的交付周转时间的项目,并且让我专注于构建业务逻辑而不是管道。
答案 3 :(得分:3)
使用Perl的最大优势是CPAN。
答案 4 :(得分:3)
除了已经提到的答案之外,对于基本的Web应用程序,网络传输速度是比语言选择更常见的瓶颈。在Perl中编写Web应用程序通常比C更容易,因此运行时速度的微小差异不值得创建应用程序所需的额外工作。实际上,C有时用于计算密集型Web应用程序的某些部分。
答案 5 :(得分:2)
由于缺乏自动内存管理,字符串操作(通常是Web开发的很大一部分)在C中非常痛苦并且容易出错。请记住,脚本执行时间通常不是瓶颈或可以通过适当的缓存机制来规避。在许多情况下,最好选择一种能够最大限度地提高开发人员生产力的语言,而不是不必要地牺牲开发时间来提高性能,而网站用户将不会注意到这一点。
然而,这个一般原则并不完全适用于您的情况,因为搜索引擎可能会从优化的低级代码中受益。这并不意味着你必须用C语言做所有事情:已知PHP解释器的速度很慢,但由于大多数库函数都是用C语言实现的,所以你可以侥幸逃脱。我建议用您选择的高级语言编写应用程序,并且只重新实现C中已被识别为botlenecks的部分。
答案 6 :(得分:0)
我认为使用脚本语言的好处是大多数人使用更高级别的动态语言比使用C语言更有效率。
很多人似乎都担心速度,但实际上它通常很好......如果它确实成为一个问题,大多数脚本语言都有一个扩展机制,你可以在C中编写模块并仍然在更高级别使用它们级别脚本语言(如perl中的XS,或pythons c-api)
答案 7 :(得分:-2)
当CGI早在网络发明时,它就是对Web请求进行任何动态处理的唯一方式,例如响应正在提交的表单或点击图像映射。 Web服务器软件本身只能提供静态内容,因此需要外部程序来处理交互式内容。
第一批网站管理员可能也是系统管理员,他们经常精通Perl。我记得第一个NCSA httpd服务器带有用Perl,C和shell编写的示例CGI程序。 shell脚本很快就被丢弃了,因为它们不安全,除了非常简短的CGI程序之外什么都不好。 C程序运行良好,但Perl更方便。
我的猜测是Perl作为与CGI一起使用的事实上的标准语言起飞有几个原因:
没有必要使用Perl的原因;任何可以使用Unix环境变量的语言都是合适的。
也就是说,CGI已经失宠了,因为它相对于在Web服务器的地址空间中运行的语言来说非常慢,例如PHP。