为初级程序员解释信息如何在编程语言之间流动
Explain how information flows between programming languages, for beginning programmers
我是一个自学成才的人,自学如何用不同的语言编程和编写脚本(新手:Java、C++、Javascript/Node.js、HTML/CSS)、设计项目和原理图,添加电子设备和外围设备。
我在研究时看到的很多是使用多种语言来实现一组目标(例如在 Javascript/Node 中构建 Web 服务器来处理 HTTP 请求和响应,用 Web 响应页面用 HTML 和 customized/stylized 编写,带有 CSS 并嵌入 Java 脚本习惯;或者不用 Node,而是用 PHP 或 Python).
我很难理解为什么使用多种语言而不是一种语言(一些高级语言能够执行大部分(如果不是全部)所需任务)以及如何使用信息在不同语言之间传递。一个程序可以调用另一个程序吗(我知道 HTML 文件可以将 "calls" 转换为 CSS 和 Java 脚本文件,所以,我理解那个实例)?
我想我之所以挂在这个上面是因为我经验不足,对其他常见语言的了解不足。这是否意味着某些语言只能以特定方式处理特定任务?
我觉得某些语言,例如 Java 和 C++,可以以各种方式和在各种情况下使用,以处理无数不同的任务。其他一些(例如 PHP 和 Python)不是这样吗?
我正在挖掘这个世界上一些最聪明的头脑所能提供的知识财富和集体经验,但请记住,我是新手,而且我没有这样做的优势一个教室,但我已经阅读并拥有许多关于特定语言等编程的书籍。请以我和可能跟随的其他人可以理解的方式回答。
感谢您的宝贵时间,我期待您的回复。
干杯。
很棒的答案!
不过我很好奇;在为特定问题寻找解决方案时,程序员何时知道何时停止使用一种语言并继续使用另一种语言的片段?
这就是我感到困惑的地方。这通常取决于软件开发人员和 his/her 自己对如何完成某事的特殊和艺术偏好,或者某些事情如果不使用多种语言就不可能实现?
我确实了解脚本以及何时使用它而不是程序或应用程序是有益的,我知道运行时 execution/compiled 代码、环境和框架以及虚拟机,但这些都没有明确规定定义的范围或任何特定语言的限制在 functionality/ability。为什么在 Python 中调用 C++ 函数?难道 Python 不能首先完成所需的工作,选择更合适的语言是否可以减轻为解决方案增加另一层复杂性的需要?我可能想得太多了,但知道这将指导我的学习并帮助我制定出更好的程序员解决方案。
编程就是创造问题的解决方案。人们的想法不同。人们从不同的角度看世界。人们喜欢调整解决方案并使用工具。语言是人们为了解决不同的问题而创造的,在某些情况下只是为了玩耍。我的回复更像是 'Why would there only be one language?'.
基本上,不同的技术(浏览器、操作系统等)以及随之而来的编程语言随着时间的推移而发展,因此在实践中使用了许多不同的语言。出于同样的原因,存在多种真实语言。您可以设计一个支持 Python 而不是 Java 前端编程脚本的 Web 浏览器,但这将涉及设计脚本用于访问页面的 API (DOM HTML 模型),它需要得到所有主要网络浏览器的支持,标准化,并且网络开发人员需要使用它。
是的,在很多情况下,用一种语言编写的程序可以调用用另一种语言编写的程序。需要有某种接口连接这两个部分,具体取决于上下文。例如:
C和C++都是编译型语言。也就是说,它们被翻译成机器代码以供处理器执行。一个功能的代码所在的机器代码中的位置与它一起存储。操作系统的链接器负责链接两个模块(.c
文件),以便在一个模块中对另一个模块中定义的函数进行的函数调用导致加载正确的机器代码。对于调用 C 程序的 C++ 程序,一个问题(许多其他问题)是函数的命名不同(名称改编)。实际上,C 程序中的函数需要在 C++ 源代码中声明 extern "C"
,以便链接器正确设置它。
JavaScript,CSS和HTML由浏览器解释和执行(对于JavaScript),但不一定翻译成机器代码。 (Java脚本引擎可以使用即时编译)。因此浏览器为 Java 脚本代码提供了访问 CSS 定义的可能性。 .style.color = ...
.
为了使 Perl、PHP、Python 等脚本语言相互调用,存在不同的库来处理必要的中间步骤 ("glue code")。有很多可能性,例如 PHP 代码可以调用 Python 解释器来执行 Python 程序,或者它可以将数据传递给 运行 Python通过操作系统的机制等编程
SWIG 等包装器允许从脚本语言调用 C/C++ 代码。他们将必要的符号(函数)添加到 Python 将在内部调用的代码中。 C++ 程序被编译为 Python 扩展,由 Python 解释器加载,它本身是一个编译程序,并且使用操作系统的链接器。 Python 解释器然后以这样的方式解释 Python 代码,即调用给定的 Python 函数导致扩展包装函数的机器代码被执行。
编程语言的分类方法有很多种。例如从低级别(机器代码)到更高级别(更多抽象,自动处理机器代码的翻译):
- 汇编(用于表达机器码指令)
- 用于系统级编程的编译语言。 (C, C++, Pascal, ...)
- VM 中的编译语言 运行(Java、C#、...)
- 脚本语言(Python、Perl、PHP、...)不太注重效率,但更灵活。
- 高级领域特定语言(MATLAB、AppleScript)
- Shell 脚本 (bash, sh)
我是一个自学成才的人,自学如何用不同的语言编程和编写脚本(新手:Java、C++、Javascript/Node.js、HTML/CSS)、设计项目和原理图,添加电子设备和外围设备。
我在研究时看到的很多是使用多种语言来实现一组目标(例如在 Javascript/Node 中构建 Web 服务器来处理 HTTP 请求和响应,用 Web 响应页面用 HTML 和 customized/stylized 编写,带有 CSS 并嵌入 Java 脚本习惯;或者不用 Node,而是用 PHP 或 Python).
我很难理解为什么使用多种语言而不是一种语言(一些高级语言能够执行大部分(如果不是全部)所需任务)以及如何使用信息在不同语言之间传递。一个程序可以调用另一个程序吗(我知道 HTML 文件可以将 "calls" 转换为 CSS 和 Java 脚本文件,所以,我理解那个实例)?
我想我之所以挂在这个上面是因为我经验不足,对其他常见语言的了解不足。这是否意味着某些语言只能以特定方式处理特定任务?
我觉得某些语言,例如 Java 和 C++,可以以各种方式和在各种情况下使用,以处理无数不同的任务。其他一些(例如 PHP 和 Python)不是这样吗?
我正在挖掘这个世界上一些最聪明的头脑所能提供的知识财富和集体经验,但请记住,我是新手,而且我没有这样做的优势一个教室,但我已经阅读并拥有许多关于特定语言等编程的书籍。请以我和可能跟随的其他人可以理解的方式回答。
感谢您的宝贵时间,我期待您的回复。
干杯。
很棒的答案!
不过我很好奇;在为特定问题寻找解决方案时,程序员何时知道何时停止使用一种语言并继续使用另一种语言的片段?
这就是我感到困惑的地方。这通常取决于软件开发人员和 his/her 自己对如何完成某事的特殊和艺术偏好,或者某些事情如果不使用多种语言就不可能实现?
我确实了解脚本以及何时使用它而不是程序或应用程序是有益的,我知道运行时 execution/compiled 代码、环境和框架以及虚拟机,但这些都没有明确规定定义的范围或任何特定语言的限制在 functionality/ability。为什么在 Python 中调用 C++ 函数?难道 Python 不能首先完成所需的工作,选择更合适的语言是否可以减轻为解决方案增加另一层复杂性的需要?我可能想得太多了,但知道这将指导我的学习并帮助我制定出更好的程序员解决方案。
编程就是创造问题的解决方案。人们的想法不同。人们从不同的角度看世界。人们喜欢调整解决方案并使用工具。语言是人们为了解决不同的问题而创造的,在某些情况下只是为了玩耍。我的回复更像是 'Why would there only be one language?'.
基本上,不同的技术(浏览器、操作系统等)以及随之而来的编程语言随着时间的推移而发展,因此在实践中使用了许多不同的语言。出于同样的原因,存在多种真实语言。您可以设计一个支持 Python 而不是 Java 前端编程脚本的 Web 浏览器,但这将涉及设计脚本用于访问页面的 API (DOM HTML 模型),它需要得到所有主要网络浏览器的支持,标准化,并且网络开发人员需要使用它。
是的,在很多情况下,用一种语言编写的程序可以调用用另一种语言编写的程序。需要有某种接口连接这两个部分,具体取决于上下文。例如:
C和C++都是编译型语言。也就是说,它们被翻译成机器代码以供处理器执行。一个功能的代码所在的机器代码中的位置与它一起存储。操作系统的链接器负责链接两个模块(
.c
文件),以便在一个模块中对另一个模块中定义的函数进行的函数调用导致加载正确的机器代码。对于调用 C 程序的 C++ 程序,一个问题(许多其他问题)是函数的命名不同(名称改编)。实际上,C 程序中的函数需要在 C++ 源代码中声明extern "C"
,以便链接器正确设置它。JavaScript,CSS和HTML由浏览器解释和执行(对于JavaScript),但不一定翻译成机器代码。 (Java脚本引擎可以使用即时编译)。因此浏览器为 Java 脚本代码提供了访问 CSS 定义的可能性。
.style.color = ...
.为了使 Perl、PHP、Python 等脚本语言相互调用,存在不同的库来处理必要的中间步骤 ("glue code")。有很多可能性,例如 PHP 代码可以调用 Python 解释器来执行 Python 程序,或者它可以将数据传递给 运行 Python通过操作系统的机制等编程
SWIG 等包装器允许从脚本语言调用 C/C++ 代码。他们将必要的符号(函数)添加到 Python 将在内部调用的代码中。 C++ 程序被编译为 Python 扩展,由 Python 解释器加载,它本身是一个编译程序,并且使用操作系统的链接器。 Python 解释器然后以这样的方式解释 Python 代码,即调用给定的 Python 函数导致扩展包装函数的机器代码被执行。
编程语言的分类方法有很多种。例如从低级别(机器代码)到更高级别(更多抽象,自动处理机器代码的翻译):
- 汇编(用于表达机器码指令)
- 用于系统级编程的编译语言。 (C, C++, Pascal, ...)
- VM 中的编译语言 运行(Java、C#、...)
- 脚本语言(Python、Perl、PHP、...)不太注重效率,但更灵活。
- 高级领域特定语言(MATLAB、AppleScript)
- Shell 脚本 (bash, sh)