这是我的看法。
有机器码,这是计算机运行某件事所需要的全部。计算机不在乎编程语言。对他们来说,机器代码来自Perl,Python还是PHP都无关紧要。编程语言不适用于计算机。他们为程序员服务。
一些编程语言的运行速度比其他语言慢,但这不一定是因为它们有问题。在许多情况下,这是因为它们可以执行程序员原本必须要做的更多工作(即内存管理),并且通过执行这些事情,他们在应做的工作中会更好-为程序员服务。
那么,编程语言的性能降低真的是一件坏事吗?
这是我的看法。
有机器码,这是计算机运行某件事所需要的全部。计算机不在乎编程语言。对他们来说,机器代码来自Perl,Python还是PHP都无关紧要。编程语言不适用于计算机。他们为程序员服务。
一些编程语言的运行速度比其他语言慢,但这不一定是因为它们有问题。在许多情况下,这是因为它们可以执行程序员原本必须要做的更多工作(即内存管理),并且通过执行这些事情,他们在应做的工作中会更好-为程序员服务。
那么,编程语言的性能降低真的是一件坏事吗?
Answers:
我认为这不会自动变坏。Python比C ++慢,但是当两者都足够快时,即使它较慢,Python可能也是解决当前问题的最佳选择。
总是一个权衡。对于一次性的小任务,编写Python脚本比执行相同操作的C ++应用要快得多(对我而言,典型的示例是某种批处理文本处理或遍历目录树并对文件执行某些操作),我并不在乎是花费10毫秒还是1000毫秒,即使它慢了100倍,因为它可能会花费我一半的时间来编写和测试。
当然,如果Python与C ++一样快,那就太好了,因此从这个意义上说,我同意您的说法:“慢=不好”。但是,我宁愿拥有一种功能强大的语言,只要不做任何事情(例如,检查原始数组的数组边界),就可以按照我想要的速度运行,只要它允许我决定何时进行权衡(例如,使用std: :向量)。
很简单-慢是一件坏事
当程序需要一定程度的性能时
因为没有这种性能,您将无法满足要求。
从需要在可接受的时间内处理查询的业务应用程序到需要在任何时间点在屏幕上显示大量信息的游戏,这都可以是任何东西。如果程序运行速度不够快,那就行不通了。
这样看:计算机是愚蠢的。他们温顺地遵循指示,任何带有触发表的白痴都可以遵循。他们顽固地坚持要做你所说的,而不是你的意思。切勿自我导向或直觉。这太糟糕了。
一台计算机所能达到的目标是,它速度很快。真!带有文件柜的指关节可以完成与数据库相同的工作。某人摇动印刷机可以完成Apache的工作。认真!实际上,他们已经进行了数百年的努力。为什么计算机对任何事物都有好处是其速度。
因此(与其他语言相比)无法利用的编程语言缺少了使用计算机的唯一优势。
编程语言可以是非常高级的,“可以做很多事情”,但是仍然非常快。OCaml是比PHP更高级的语言,但是它生成的代码几乎与C一样快。Javascript与PHP一样动态,但是可以真正快速地执行。因此,主要是语言实现的问题,而不是设计的问题。动态语言更难有效实现,但并非没有。
速度可以根据运行时间,初始开发时间和维护时间(移交问题/错误并产生新代码并部署它所花费的时间)来衡量。
脚本语言通常运行时间较慢,但维护时间较快,因为脚本化语言通常可以快速进行更改和部署,而不必重建整个系统,有时甚至不必停止并重新启动。
因此,取决于您所需的速度,很多都是平衡的。
上下文也很重要。花费0.5秒而不是0.1秒来加载初始配置没什么大不了的,但是在运行时,如果要处理100个查询,则花费0.5秒来执行查询而不是0.1秒可能是一件大事,因此需要50秒而不是10。
简单-客户喜欢快速的软件。实际上,计算机的全部目的是快速计算。
慢是相对的。如果我有一个要求,读取端口每秒10次,这是不能创建一个二进制文件,可以做到这是一种语言过于缓慢。如果我正在写一个Web应用程序,其中服务器和浏览器/客户端之间的请求/响应顺序以秒为单位,并且用户可能在单击按钮之前在屏幕上花费了几分钟,那么该语言可以处理请求处理在1秒内可能足够快(当然大多数情况下要快得多)。
当然,编程语言可能是决定执行速度的一个因素,但这不是语言本身,而是与其附带的编译器和/或运行时。从Java的发展来看,这一点显而易见。多年来,JVM(即使在相同的硬件环境上)的性能也得到了大幅提高。当然,始终可以在您选择的任何环境中编写极其缓慢的代码。因此,诸如“ C ++比Java快十倍”之类的说法会自动被伪造,除非对所测试的条件以及测试方法进行准确的限定和量化。同样有可能在Java比C ++更快的情况下创建测试,这完全取决于您用作测试代码的方式以及执行方式。
由于不存在为程序员服务的编程语言,因此存在为创建服务用户的程序而存在的语言。
如果您只需要一个简单的小个人工具一次执行某项操作,则它的速度可能会随您所愿。但是,一旦您开始向用户部署,他们就会在意速度和扩展性,特别是如果他们打算重复使用它时。(例如,安装程序可能会很慢;最好不要安装该程序。)这不仅是语言;还包括语言。这是整个程序。如果您的程序运行缓慢,用户将不会喜欢它。而且,如果您遇到竞争,那么不喜欢您的程序的用户将是一件非常糟糕的事情。因此,导致用户不喜欢您的程序(使程序变慢)的语言是不好的。
我是为广播媒体编写控制软件的团队的成员。如果您在美国,很有可能会在您喜欢的电视或广播电台上运行。绩效是我们最经常从客户那里听到的事情之一。它最初是为很少的单站操作而编写的,但是现在我们正在签署具有数百个频道的主要广播和有线网络,并且规模开始成为一个问题。如果我们不能让他们快速运转,他们将把他们数百万美元的合同交给有能力的人,我们最终会失业。这就是为什么我们使用快速的编译语言并优化数据库内容的原因。
存在为程序员服务的编程语言。
我不知道你是怎么得出这个结论的。我会说:软件工程师使用编程语言来满足他们的需求。
有些编程语言比其他编程语言要慢,但这不是因为它们有问题。
这也是一个轻松的声明。在此处使用“较慢”一词来定义您的意思。较慢可能意味着:
想到的这两个问题也交织在一起,在开发和性能上花费的时间之间存在某种权衡。
有人评论说“客户喜欢在预算范围内执行的软件”。是的,这是真的-但它与缓慢的软件有很大关系,而且,按照定义,这几乎意味着缓慢的编程语言(和框架),算法和配置。慢速编程语言可能是所有上述方法中最重要的部分,这仅仅是因为它是最难更改的基础。如果您使用Oracle数据库并且需要更多性能,则可以优化表/索引/等。简单。如果您的代码中算法较差,则可以编写其他代码。如果您的框架很慢,则可以替换它-并不是那么容易,但是可以实现而无需重写所有内容。如果您的语言太慢,则实际上必须重新开始。
请参阅Facebook,了解他们在需要扩展时使PHP足够快地运行所带来的麻烦。
对于我们其他人来说,“非功能性能要求”通常会写到规范中,尤其是对于可伸缩的Web应用程序。无法完成“必须在请求后2秒钟内向用户显示该页面”,您将失去合同(或支付罚款)。因此,是的,客户喜欢执行要求的软件-那些要求会说它必须快速(您可能并不在乎用户盯着沙漏花费了多长时间,但客户肯定会花很多时间-但这笔费用很高)。
例如,在一个大型的呼叫中心,我被告知他们确定,您可以在接听电话过程中节省的每一秒钟,可以“缩减”一名呼叫者的身形。那真是一笔不菲的钱,这对于老板们获得更快,更高效,更实用的软件是巨大的刺激。
有很多时间花在担心程序员尽可能快地编写代码上(然后一直进行单元测试和重构,哈哈)。我发现这并不是人们认为的那么重要的因素-如果您是语言专家,则可以比没有经验的人更快地编写代码。因此,熟练的C ++开发人员可以比新手PHP开发人员更快,更准确地编写代码。因此,我认为成为专家比选择“轻松”语言更为重要,这就是为什么我不喜欢如今看来无处不在的“用酷炫的新东西重写”的崇拜。
那么,编程语言的性能降低真的是一件坏事吗?
其他所有条件都是平等的,快一点是一件好事。毕竟,没有人真正想等待更长的时间才能获得某些结果,而一旦完成该结果,它便可以将资源腾出用于其他事情。
但并非所有其他条件都是平等的。对于初学者来说,产生正确的结果或至少正确的结果也很重要。(如果允许完全错误的结果,则您确实可以非常快速地产生这些结果,并且对任何人来说它们的价值都将完全为零。)如果更改某种程度较慢的语言,则更有可能产生正确的结果,通常是巨大的权衡。高级别的语言在这里比低级别的语言有一个优势,因为它们丰富的模型集通常可以更轻松地表达复杂的问题,而无需压倒性的太多细节。
通常,首先要管理生产软件的成本,根据需要添加新功能以及在基础系统发生变化时保持其正常运行的成本也很重要。高级语言通常允许更快的编程周转,并且将编程成本保持在预算之内有很多价值。实际上,将成本控制在最低水平可以总体上实现更多不同的事情,这通常是一件好事。
最后要注意的关键点是,不必只使用一种语言,并且许多软件系统的大部分组件对性能都不重要。明智的做法是使用低级语言为关键位生成高性能组件,而将不太关键的部分留给高级语言(以使它们的生产成本降至最低)是明智的。而且,构成良好的低级语言的功能(能够精确控制机器的功能)不是构成良好的高级语言的功能(能够从更小的描述中推断出细节的功能):它们是完全对立的,因此能够将它们结合在一起并利用它们的优点而避免缺点,这确实是一件好事。
哪些组件应进行高性能处理?优化?测量它们。剖析它们。找到真相而不是猜测。将精力集中在最有用的地方。