Explain how information flows between programming languages, for beginning programmers
我是一名自学者,教我如何用不同的语言编写程序和脚本(新手:Java、C++、JavaScript、NoDE.JS、HTML/CSS)、设计项目和原理图、添加电子学和外设。
我在研究中经常看到的是使用多种语言来实现一组目标(例如,在javascript/node中构建Web服务器来处理HTTP请求和响应,使用HTML编写的网页进行响应,使用CSS定制/样式化并嵌入javascript样式;或者,使用PHP编写而不是节点或者Python。
我很难理解为什么使用多种语言而不是一种语言(有些高级语言能够执行大部分(如果不是全部)所需任务),以及不同语言之间如何传递信息。一个程序可以调用另一个程序吗(我知道一个HTML文件可以"调用"CSS和JavaScript文件,所以,我理解这个实例)?
我认为我之所以挂断电话,是因为我缺乏经验和对其他通用语言的了解。这是否意味着某些语言只能以特定的方式处理特定的任务?
我觉得一些语言,例如Java和C++,可以用各种方式和各种实例来处理无数不同的任务。其他的一些(例如,php&python)不是这样吗?
我正在挖掘这个世界上一些最聪明的人的丰富知识和集体经验,但请记住,我对这一点并不陌生,我没有在课堂上这样做的优势,但我已经阅读并拥有许多关于用特定语言和类似语言编程的书籍。请以我和其他人能理解的方式回答。
感谢您抽出时间,我期待您的回复。
干杯。
答案太棒了!
不过,我很好奇;在为一个特定问题寻求解决方案时,程序员什么时候知道在一种语言中何时停止,在另一种语言中何时继续一个段?
这就是我困惑的地方。这通常取决于软件开发人员和他/她自己对如何完成某件事情的特定和艺术偏好,还是某些事情在不使用多种语言的情况下是不可能实现的?
我确实理解脚本,并且当使用脚本比使用程序或应用程序更有益时,我知道运行时执行/编译代码、环境和框架以及虚拟机,但这些都没有清楚地规定任何特定语言的定义边界或功能/能力限制。为什么在Python中调用C++函数?python是否不能完成最初需要的任务,并且选择一种更合适的语言是否能够减轻向解决方案添加另一层复杂性的需要?我可能想得太多了,但知道这一点将指导我学习,并帮助我作为一名程序员制定出更好的解决方案。
基本上,不同的技术(浏览器、操作系统等)和IT编程语言随着时间的推移而发展,因此在实践中使用了许多不同的语言。因为同样的原因,有多种真正的语言。您可以设计一个支持python的Web浏览器,而不是用于前端编程的javascript,但这将涉及到设计脚本用于访问页面的API(dom html模型),它将需要所有主要Web浏览器的支持,标准化,并且Web开发人员将需要使用它。
是的,在许多情况下,用一种语言编写的程序可以调用用另一种语言编写的程序。根据上下文的不同,需要有某种接口来连接这两个部分。例如:
C语言和C++语言都是编译语言。也就是说,它们被转换成要由处理器执行的机器代码。机器代码中一个功能代码所在的位置与其一起存储。操作系统的链接器负责链接两个模块(
.c 文件),以便一个模块中的函数调用指向另一个模块中定义的函数,从而加载正确的机器代码。对于一个C++程序调用一个C程序,一个问题(许多其他问题)是函数被命名为不同的(名字Mangle)。在实践中,C程序的函数需要在链接器的C++源代码中声明EDOCX1 1,以正确地设置这个函数。javascript、css和html由浏览器解释和执行(对于javascript),但不必翻译成机器代码。(javascript引擎可能使用即时编译)。例如,浏览器为JavaScript代码提供了访问CSS定义的可能性。
.style.color = ... 。对于Perl、PHP、Python等脚本语言彼此调用,存在处理必要中间步骤的不同库("粘合代码")。有许多可能,例如,PHP代码可以调用Python解释器来执行一个Python程序,或者它可以通过操作系统的机制将数据传递给正在运行的Python程序等。
例如SWIG这样的包装器允许从脚本语言调用C/C++代码。它们向Python将在内部调用的代码中添加必要的符号(函数)。C++程序被编译为Python扩展,它由Python解释器加载,本身是编译程序,操作系统的链接器被使用。然后,python解释器以这样的方式解释python代码:调用给定的python函数将导致执行扩展的包装函数的机器代码。
有很多方法可以将编程语言分类。例如,从低级(机器代码)到高级(更多抽象,自动处理到机器代码的转换):
- 装配(用于表达机器代码说明)
- 系统级编程的编译语言。(C,C++,Pascal,…)
- 编译语言运行在一个虚拟机(Java,C语言,…)
- 脚本语言(python、perl、php等)不太注重效率,但更灵活。
- 高级领域专用语言(matlab、applescript)
- shell脚本(bash、sh)
编程就是为问题创造解决方案。人们的想法不同。人们从不同的角度看待世界。人们喜欢调整解决方案和使用工具。语言是人们为了解决不同的问题而创造的,在某些情况下只是为了玩耍。我的回答更倾向于"为什么只有一种语言?".