什么是“真正的”编程语言? [关闭]

Posted

技术标签:

【中文标题】什么是“真正的”编程语言? [关闭]【英文标题】:What is a "real" programming language? [closed] 【发布时间】:2011-03-14 10:23:39 【问题描述】:

最近一位老师说“php 不是一门真正的编程语言”,但在我看来,只是给出了一个很弱的理由:

未编译。 这是脚本。 它并非在每个平台上都运行。

PHP 不被认为是一种“真正的”编程语言吗?什么是“真正的”编程语言?一种语言必须经过编译才能被认真对待吗?

背景

两天前,我在学校的 A-Level 计算课上上了一堂入门课——我们在课程的第一年使用 Java。我不熟悉 Java,但对一般编程基础知识(变量、函数、面向对象、循环等)有很好的掌握。

老师完成的第一个任务非常快。她没有费心去解释任何概念,它们是如何工作的,或者你会实际使用它们做什么,并且似乎很高兴看到大多数学生(他们总体上是编程新手)扭动着在他们的座位上不知道她在说什么。事后看来,我认为她以非常快的速度完成了它,看看谁能真正“应付”参加 A-Level 计算,因为学生在 9 月开始之前仍有机会改变他们的科目。

第一个也是唯一的任务是编写一个 Java 命令行应用程序来将二进制转换为十进制(十进制)。我们有两个小时的品尝会来做这件事,在解释了二进制系统是如何工作的之后,我们不得不开始,尽管总的来说,没有人真正知道从哪里开始。一个小时后,有些人比其他人走得更远,但没有人真正取得任何重大成就。老师自己也糊涂了,从隔壁叫来了另外一位老师。他过来帮助人们,看看下一步该去哪里。

不用吹嘘,我可能确实在班上拥有最多的经验,并且在练习中走得最远。他问我以前有没有经验;我说是的,尤其是在 PHP 中,并开玩笑地评论说我可以在几行 PHP 中编写一些东西来将二进制转换为拒绝,而 Java 应用程序正在迅速增长为几个代码屏幕。

他回答说:“PHP 不是真正的编程语言!”...!经过一番讨论,他给出了上述三个理由。但是,我指出您可以在任何运行 Apache 的平台上运行 PHP,但我认为他并不真正了解 Apache 是什么,而且完全不知道!

【问题讨论】:

你的老师可能就是其中之一realprogrammers 听起来你有一个苦涩的老师,可能是在与 PHP 斗争中,并认为它是邪恶的。 @Gamecat 是对 Mel Kaye 的引用吗?或者一些我不明白的后续笑话...... ;) 顺便说一句,感谢您的编辑。我真的太胡扯了。 :D 好老师似乎极不寻常。 【参考方案1】:

首先我们需要知道什么是编程语言。至少,programming language 是由计算机读取并指示它执行某些操作的东西。许多人还期望general purpose programming language 是Turing complete。但是,在某些情况下,domain-specific language 不是图灵完备的,但对于该特定领域仍然是一种有用的编程语言。编程语言可以编译或解释,它们可以在许多平台上运行,也可以只在一个特定平台上运行。不同的需求需要不同的编程语言。显然 PHP 是一种编程语言。

我对“真实”编程语言的定义是在现实世界中至少有一种实际用途的任何编程语言。这与通常没有实际用途的esoteric programming language 相反。由于 PHP 被广泛用于解决实际问题,因此它很容易满足成为真正的编程语言的要求,尽管它可以说不是一种特别漂亮的语言。

PHP 是一种实用的语言。它是为了能够快速制作网页(最初代表个人主页)的特定需求而创建的,并且根据需要扩展了语言。由于没有理论背景或强大的设计原则推动它的创建(甚至没有语言的正式规范),它不如许多其他更现代的语言那么干净。诸如正确处理外来字符/unicode字符之类的功能显然是在之后添加的,并且没有与语言的其余部分完全集成。这种不整洁和缺乏理论严谨性导致许多人(尤其是学者)不喜欢该语言,这可能是您的老师不将 PHP 视为“真正的”语言的部分原因。

然而 PHP 擅长于它的设计目标,许多网站都使用它,甚至是 Facebook、Yahoo! 等非常大的网站。和***。

【讨论】:

不错的答案马克!我只是想:PHP == 'PHP: Hypertext Preprocessor' || PHP == 'Personal Homepage' - ?! 是的,我是用codey-bits写的。 @Jac Webb-Heller:这个名字最初是“个人主页”的缩写,但后来随着 PHP 的发展而改变。 好的,谢谢你的澄清! 来自php.net/manual/en/history.php.php:PHP/FI 代表“个人主页/表单解释器”【参考方案2】:

没有编译

可以编译 PHP(例如通过HHVM)。

这是脚本

这只是 PHP 未编译的另一种说法。

它并非在每个平台上都运行

Java 也没有。

听起来你那里有一个非常糟糕的老师。

【讨论】:

PHP 到优化的 C++!他们接下来会怎么想? 是的,老师试图通过声称他不知道的东西不值得知道来为自己的无知辩护。 @John:但他所说的是正确的。老师在上面列出的所有点上都错了。 @John:你到底在抱怨什么?大卫在老师的论点中发现了错误?他是否同意完全无关紧要。 约翰可能是老师。【参考方案3】:

当然,PHP 是一种编程语言。他可能的意思是它不是一种“真正的”编程语言,就像“真正的”男人不吃乳蛋饼一样。

【讨论】:

看到这个我笑出了声! 这可能是某种出现但...我喜欢乳蛋饼。我觉得我不得不说。 这是唯一没有将“真实”与字面意思混淆的答案...【参考方案4】:

define:programming language

据此看来,PHP 是一种编程语言。它是否是一种真正的编程语言完全是主观的。它是否是一种语言也是主观的。当然,它最常不被用作应用程序编程语言,但它可以通过CLI 用于开发shell 应用程序。我从来没有这样做过,所以我对它的理解是粗略的,但它是可能的

现在,PHP 是“脚本化的”(我认为这是一种脚本语言),它是否可以在每个平台上运行?你判断:

PHP:超文本预处理器是一种广泛使用的通用脚本语言,最初设计用于 Web 开发以生成动态网页。为此,PHP 代码嵌入到 html 源文档中,并由带有 PHP 处理器模块的 Web 服务器解释,从而生成网页文档。作为一种通用编程语言,PHP 代码由解释器应用程序以命令行模式处理,执行所需的操作系统操作并在其标准输出通道上生成程序输出。它还可以用作图形应用程序。 PHP 可用作大多数现代 Web 服务器的处理器,也可用作大多数操作系统和计算平台上的独立解释器。

来源:http://en.wikipedia.org/wiki/PHP

Java 甚至可以在每个平台上运行吗?不。只有那些存在 JVM 的。

最后,语言需要编译吗?许多不是。甚至 Java 的编译方式也与 C 或 C++ 不同。然后你还需要看看 Perl、Python 等。

我个人认为 PHP 是一种真正的编程语言。我从那里开始并轻松地转向 C/C++ 和 Java。我不会将它用于与 Java 相同的目的,它的设计与 Java 不同,但这并不意味着什么。对我来说,它比 Java 更容易学习。

【讨论】:

很好,彻底的答案 TNi!谢谢!【参考方案5】:

首先,不被编译和被解释(他肯定是指脚本化的,这有点模糊,无论如何用于不同的目的)是同一枚硬币的不同方面,因此实际上是相同的原因。

最后一个原因,它不能在每个平台上运行,只是令人困惑。听起来他试图吹捧 Java 的可移植性,而 PHP 根本不是 Java。但是,Java 运行在一个非常特定的平台上:JVM。该平台反过来又可以在许多其他平台上运行,从而赋予 Java 可移植性,但它与“可移植”的传统用法并不完全相同。例如,C 是可移植的,可以在从 PDP-11 到最新的嵌入式设备的所有设备上运行。

但是,C 通过指定其自己的抽象平台的规则来做到这一点,并且编译器根据这些规则将 C 代码转换为汇编。这就是 Java 的可移植性与 C 的相似之处:它们都定义了规则,这些规则被翻译成特定的、具体的机器(处理器)的指令;不同之处在于发生的时间。

计算机科学中的所有问题都可以通过另一个层次的间接来解决。 — 大卫·惠勒

实际上,即使是汇编或“机器代码”也会被处理器解释为其本机操作。 (我手头没有很好的资源,但我记得A Crash Course in Modern Hardware 对它进行了轻微的介绍,无论如何这是一个很好的演示。)随着处理器速度越来越快,我们几乎没有注意到我们未充分使用的盒子是否给定程序在 asm 中或通过解释器运行,但这就是“真正的编程语言”的定义发挥作用的地方。

定义“真正的编程语言”的唯一明智方法是“完成真正的工作的语言”,但这也确实影响了“真正的”的定义。 (然而,它确实与esoteric programming languages 建立了区别,因为没有人做真正的工作,例如,在Malbolge 中,对于“真实”的任何定义,你可以让十个人同意。)而且,与今天相比,您对编程语言的选择在过去受到其实现策略和开销(例如运行时解释器)的限制。然而,即使在今天,对于certain applications 和预期负载而言,某些语言比其他语言更“真实”,这完全取决于您的要求。

听起来您的老师只是通过玩具 Web 应用程序体验了 PHP(也许使用“应用程序”对于他所见的内容来说是一种延伸)。玩具程序不是真正的工作。 PHP 肯定有很多问题,但我不能说它不是真正的编程语言,除非是开玩笑。

人们厌恶地期待调试,不情愿地执行调试,并且永远吹嘘。 — 丹·卡明斯基

“真实”与“难做”(与“实际工作”相关)有一定的关联,您的老师可能一直在表达这种观点。这在我看来一直是bikeshedding 的一种形式(确切地说,有一个更好的术语,但我不记得了),其中一个人对事物价值的估计与一个人必须投入的努力有关它(例如,当我提供关于屋顶颜色以及是否应该有标志的输入时,自行车棚更重要)。我们本质上比其他人更重视自己的努力——只是因为我们熟悉它,如果没有其他原因——即使这样做没有意义。尽管 PHP 有缺陷,但它确实让一些事情变得简单,因此它和用它编写的程序可能会被认为不值钱。

【讨论】:

哇。惊人的答案!这个“自行车脱落”概念是解释它的好方法。【参考方案6】:

Facebook、Digg、***、雅虎。我猜那些不是真正的网站。

【讨论】:

【参考方案7】:

在我学习 PHP 的时候,我也不相信 PHP 是一门编程语言。

我不确定我是从哪里想到这个想法的,但我在某处了解到脚本语言不是编程语言。所以我把这个想法应用到了其他语言上,比如 javascript 和 SQL。

从那以后,我改变了主意,现在我明白了,从高级(例如 PHP、Javascript)到低级(例如 c、汇编程序)的语言范围很广,而 C# 和 Java 之类的语言介于两者之间。

【讨论】:

【参考方案8】:

你是对的。这些理由太弱了。实际上你甚至不需要 Apache 来运行 PHP。 前两个原因只是重复,因为它实际上只是一个原因。因此,可以说“PHP 不是编译语言”,但这并不意味着它“不是真正的编程语言”。 Java 程序也不会编译成机器代码——好吧,它也不是真正的语言。 q.e.d.

【讨论】:

【参考方案9】:

对 OT 感到抱歉,但这张照片有很多错误之处!我只是希望你能尽快离开那个班级、那个系和那个学校。我保证当二月到来时,你将几乎没有一个学期的知识。而且,如果您像我一样,您的课堂时间会在老师为您浪费时间时感到沮丧、怨恨和愤怒。

那个女人不是老师!十进制到二进制作为编码的介绍?可怕!

是凤凰城大学(哈!)吗?

【讨论】:

【参考方案10】:

更新:投票前请仔细阅读,这不是我使用 PHP/Java 的方法,我想看看他的老师是如何看待 PHP/Java 的。谢谢。

我认为你的老师的想法是:PHP是一种锁定在网络服务器中的语言,主要用于生成网页。

另一方面,Java 是一种通用语言,也用于网页,但也用于微波炉和汽车等其他行业,您可以用 Java 编写桌面应用程序等。

考虑到这一点,您的老师说“PHP 不是真正的编程语言!”是可以理解的。

我没有偏见,我不喜欢两者,Java 和 PHP :) ...但必须同时使用它们

【讨论】:

PHP 未锁定在网络服务器中。 php.net/manual/en/features.commandline.php // gtk.php.net 大卫,我知道,当然,我每天都在做 PHP 10 年。在命令行中用 PHP 完成了多少个项目?我试图反映他的老师是如何看待 PHP 与 Java 的。【参考方案11】:

没有真正的编程语言、真正的人或现实世界这样的东西。如果你会用 PHP 编程,你就是程序员

【讨论】:

这可能只是每天一个编码器。如果您从循环、条件、数据结构等方面考虑,那么您就是一名程序员,而与编程语言无关。【参考方案12】:

当然,PHP 是一种编程语言。它甚至是图灵完备的语言,这基本上意味着它的“力量”等于其他编程语言的“力量”。它在严格意义上(它确实存在)和隐喻意义上都是“真实的”(有些人使用 PHP 谋生)。所以看来你的老师有点偏颇。

但是,我看到了您老师的态度。 PHP 和 Java 来自完全不同的背景。尽管有用,PHP 却非常混乱。将 Java 中的标准类库与 PHP 函数的标准库进行比较——后者看起来就像一组不相关的工具。此外,网上有很多 PHP 教程,礼貌地说,质量一般。因为你正在学习如何编程,所以最好使用好的工具来学习,Java 是比 PHP 更好的学习编程工具。

附言。谷歌的“PHP 糟透了”以获取大量信息,为什么 PHP 不是世界上最好的工具。

【讨论】:

【参考方案13】:

“那么,在‘编程语言的定义’中,是什么让 PHP 不是‘合适的’语言?”

真正的原因是大多数人不将其用作通用应用程序编程语言。

这是因为总有更适合的语言(除了一个例外:PHP 的创建目的是 Web 编程)。 PHP 是“另一种语言,甚至没有比现有语言更好的设计功能”。与其他不同语言比较时的一些问题示例包括:缺乏稳定且可移植的 GUI 工具包(至少在 Windows/MacOS 上)、缺乏线程、缺乏速度等等。

最终,打算用 PHP 编写通用应用程序的人,大多是只熟悉 PHP 作为一种编程语言的人。因为没有理由用 PHP 从头开始​​编写新应用程序:您会发现大多数经验丰富或有才华的程序员永远不会考虑这样做。

【讨论】:

【参考方案14】:

这只是人们为了让自己听起来更聪明而让你闭嘴而重复的那些愚蠢的事情之一,它的货物崇拜自鸣得意。如果你让他解释,他要么假装是个玩笑(告诉他“很好”),要么可怜地试图捍卫自己的立场(告诉他“哦,我明白了”,然后慢慢后退)

【讨论】:

【参考方案15】:

只是为了向其他人提出另一个方向的论点......

将 PHP 视为一种编程语言 我觉得有点不舒服,因为我不相信你最终会得到一个程序。您不会让您的 PHP 应用程序运行,而是请求并加载和处理 PHP 页面以生成输出页面,并具有 DB 更改等副作用。

这并不意味着 PHP 在技术上不能被描述为一种编程语言,但我认为以某种方式将它与 Java/C++ 分开是合理的,在 Java/C++ 中,程序可以在某些状态概念下继续运行。每个 PHP 文件肯定是它自己的“程序”,因为您可以请求任何 PHP 页面……除了调用正确页面的约定外,PHP Web 应用程序没有入口点。

【讨论】:

来吧,有 php-cli !究竟是什么阻止了您在 PHP 文件中拥有无限的 while(true) ,例如,检查一个 mysql 表以由电子邮件地址从外部填充,并在它们出现在表中时立即向这些地址发送电子邮件?然后你必须在 CLI 中启动这个 php“进程”,并观察它永远处理电子邮件。这是 php 中“守护程序”的实现。真正研究过 PHP 的人会争辩说,当您使用 Objects 时,PHP 的真正问题是内存泄漏。真正的 php 专家会回应说,从 php 5.3 开始,那些内存泄漏已经消失了。 有几个例子可以反驳这个想法。例如 PHP-GTK 应用程序,如文本编辑器:Tulip tulip.solis.coop.br/us/install_lin.php,或运行很长时间的服务器:nanoweb.si.kz 我已经用 PHP 编写了完全“普通”的命令行应用程序。您将 PHP 编程与 Web 编程混为一谈。您的论点基本上是说 Web 应用程序与客户端应用程序不同,但这并没有说明用于生成两者的 语言。顺便说一句,我认为 PHP 是一种真的可怕的语言。但毫无疑问,它是一种真正的语言。

以上是关于什么是“真正的”编程语言? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

进入iOS和Android编程[关闭]

如何在现实世界中使用函数式编程? [关闭]

如何在 Android 上以编程方式关闭 3G/数据?

真正的编程能力是什么?解决问题的能力,就是编程能力

什么才算是真正的编程能力?

在游戏编程中,如何测试使用的启发式是不是一致?