Import ';导入&x27;和';包括';语言设计的选择?

Import ';导入&x27;和';包括';语言设计的选择?,import,programming-languages,include,language-design,Import,Programming Languages,Include,Language Design,Python和其他人使用import技术获取外部功能 C等,使用包括(和,如C++,有从属命名空间< /代码>头痛)。 在设计语言时,选择其中一种语言(或者像can一样使用这两种语言)的原因是什么 我看到苹果公司通过一篇论文向我们提出了一些更新/更改,我想知道为什么会存在这些差异 基于@的澄清 考虑到有多种方法可以实现导入(直到他的回答我才知道),那么的总体好处是什么!包含与包含?import技术似乎只能根据给定的路径找到单个子组件(至少在Python中是这样的,我只知道Python的[exp

Python和其他人使用
import
技术获取外部功能

C等,使用<代码>包括(和,如C++,有从属<代码>命名空间< /代码>头痛)。

在设计语言时,选择其中一种语言(或者像can一样使用这两种语言)的原因是什么

我看到苹果公司通过一篇论文向我们提出了一些更新/更改,我想知道为什么会存在这些差异

基于@的澄清 考虑到有多种方法可以实现
导入
(直到他的回答我才知道),那么
的总体好处是什么!包含
包含
import
技术似乎只能根据给定的路径找到单个子组件(至少在Python中是这样的,我只知道Python的[expective]方法)


import
方法的其他用途与此有何区别?使用“旧风格”<代码>包括< /C> >在现代语言设计和实现中是否有意义(如果有的话)?< /P> < P> C和C++的简单继承方法,简单地定义和实现(简而言之,“当遇到
#include
,将其替换为文件内容,然后继续”),但存在严重问题。其中一些问题在您所看到的演示文稿(以及其他地方)中有详细说明。有一些习惯用法和最佳做法(也在该演示文稿和其他地方讨论)以及一些较小的扩展名(
#pragma once
,预编译头)这缓解了一些问题,但归根结底,这种方法从根本上来说过于有限,无法处理软件工程师对模块系统的期望。假装它做了更新的替代品所做的事情(见下文)是一种相当漏洞百出的抽象

现在,每个人都对语言设计有不同的看法,如果你能帮助它,你似乎不应该这么做。C++和目标C由于需要向后兼容性而没有选择(尽管两者都有选择,并且还可以选择添加另一种机制,而目标C则这样做)。“,因为这是一个相当好的决定,当它被做出的时候(它工作得很好,如果你有纪律的话,它仍然有点工作),但是世界已经前进了,并确定了更好的方法来将代码拆分成模块,然后将其重新组合在一起。(请注意,这种方式早在C语言早期就已经存在,但很明显,它们在一段时间内还没有流行起来。)


您所描述的“
import
技术实际上是一个相当大的设计空间。许多模块系统几乎(但不是完全)彼此不同,其余的模块系统仍然有足够细微的差异,足以毁掉您的一天。它可以是任何东西,从在新范围内执行导入的文件(Python、PHP)有一些相似之处,所有这些模块系统都给每个“模块”(无论在各自的系统中是什么意思)赋予了它们自己的作用域/名称空间,(通常)允许单独编译模块,并且通常会不遗余力地解决C风格文本包含的问题(或创造者发现的其他备选方案问题)这大概是一个人可以说的一般。

-1,因为你还没有确定你认为是这些方法之间的区别,或者定义了它们的意思。“MrCIN——我要求不同之处……我不知道,这就是问题。下投是对所问问题的明显误解。不,我理解Y。就定义而言,我们的问题。我想指出的一点是,你的问题没有得到充分的定义,因为你没有描述你要求人们评论的方法。你认为“导入方法”的定义是什么?你认为“包含方法”的定义是什么?如果你的抱怨做得好,delnan的回答会很差,但事实上,考虑到你的问题,这是你能得到的最好的回答。@Marcin“导入方法”的确是不懂术语的。“包含方法”然而,对我来说似乎很清楚:这是C对
#include
预处理器指令所做的一切,加上相关的习语。我不会说得那么严厉,但你确实会把一个问题变成几个或多或少独立的问题,所以我认为在这里结束一天的讨论,并在一些研究之后分别问这些问题会更有意义arch(特别是,看看其他模块系统——这是学习更多编程语言的另一个借口,无论如何这是一个好主意!)。对于导入技术
,我不知道有不止一个。对于Modula-2中使用的“导入”(以及Ada中使用的“With/Use”)您不仅可以绕过#include的明显问题,还可以实现名称空间控制;或者导入所有模块并通过限定名称(module.function)访问它或者只导入您需要的。您的编译器还可以使用导入列表正确跟踪程序的依赖项,避免整个Makefile混乱。。。