【问题标题】:What is the difference between textual and symbolic insertion?文本插入和符号插入有什么区别?
【发布时间】:2017-09-07 01:01:27
【问题描述】:

The D language 使用“符号”而不是“文本”插入代码。我相信像 Java 和 Go 这样的语言也使用符号插入,因此它似乎同样适用于编译为本机代码的语言,就像它适用于解释/字节码语言一样。

谁能给我解释一下区别?

编辑

问题是关于不同软件模块之间的依赖关系。 C/C++ 使用预处理器“#include”宏来实现这一点,该宏本质上是复制和粘贴文件。这是必需的,以便编译器知道类的大小/对齐等。这是“文本”插入。 D/Java/Go/etc 不使用文本插入,而是使用符号插入。这样做的实际意义之一是提高了编译速度。我想知道的是,“符号插入”实际上是如何工作的?

【问题讨论】:

  • “插入代码”是什么意思?您是在谈论预处理器宏的工作原理吗?
  • 关于编程语言属性的问题可能更适合 cs.stackexchange.com。 SO 适用于您尝试编写的实际代码的问题。
  • 关于 D 的问题与不同的语言 C 或 C++ 有什么关系?不要垃圾标签!
  • @Olaf,我已将我的问题编辑得更清楚。如果问题与这些语言无关,它只是垃圾邮件标记。我引用的链接特别讨论了 d/c/c++ 中的 include-vs-import 用法。
  • @user1420752: 1) 它不会改变您询问的是 D,而不是其他语言。仅提及一种语言并不能证明该标签的合理性。 2) 如您所知,我们不是辅导/解释语言的网站。如果可能,请删除此问题并在其他地方询问或作为要迁移的模式。

标签: d


【解决方案1】:

我承认我必须多次阅读这个问题才能理解它......如果我理解正确,你想知道你在 C/C++ 中所谓的“文本”插入代码与 #include 之间有什么区别指令和 D 的import 声明?

在我继续之前,让我告诉你,D 也有(嗯,有点)“文本插入” - 看看D's import expression

D 的 import 和 C/C++ #include 的主要区别在于 D 是一种模块化语言。所以 D 中的import 实际上是一个声明。您的问题已在“The C Preprocessor vs D”文章中得到解答:

C 和 C++ 严重依赖于头文件的文本包含。这经常导致编译器不得不为每个源文件一遍又一遍地重新编译数万行代码,这是编译时间缓慢的明显原因。头文件通常用于进行符号插入而不是文本插入更合适。这是通过 import 语句完成的。符号包含意味着编译器只加载一个已经编译的符号表。对宏“包装器”的需求以防止多重#inclusion、时髦的#pragma once 语法以及预编译头文件的难以理解的脆弱语法对 D 来说完全没有必要且无关紧要。

【讨论】:

  • 如果这就是 OP 的意思:实际上所有设计更好的语言都在使用它,包括 Pascal、Ada、Modula、Python 等。C 和 C++ 比正常情况下更多。
  • 我不会将导入表达式称为文本插入,其含义与 C 预处理器相同。即使你 mixin(import(file)),它是单独编译的,而不是仅仅粘贴到源中,然后编译后的 AST 节点会附加到源中的那个位置。
  • 是的。我这么说只是因为 import expression 加载文本而没有做任何其他事情。 string txt = import("file.txt");
猜你喜欢
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多