现代语言中的预处理器是否已过时?

Ear*_*rlz 6 language-agnostic preprocessor language-design

我正在为一个简单的宠物语言编写一个简单的编译器,我正在创建并来自C背景(虽然我用Ruby编写)我想知道是否需要预处理器.

你怎么看?现代语言中仍然需要"哑"预处理器吗?C#的条件编译功能会被视为"预处理器"吗?是否每种不包含预处理器的现代语言都具有正确替换它所需的实用程序?(例如,由于模板,C++预处理器现在已经过时(尽管仍然依赖).)

Oak*_*Oak 8

C的预处理可以做一些非常简洁的事情,但是如果你看一下它所使用的东西你就会意识到它通常只是为了增加另一层次的抽象.

  • 在不同平台上进行不同操作的预处理?它基本上是平台独立性的抽象层.
  • 预处理可以轻松添加复杂的代码?抽象,因为语言不够通用.
  • 在代码中添加扩展的预处理?抽象,因为您的代码/您的语言不够灵活.

所以我的答案是:如果你的语言足够高,你就不需要预处理器*.我不会称之为预处理邪恶或无用,我只是说语言越抽象,我就越不能想到它需要预处理.

*什么是高水平的?当然,这完全是主观的.

编辑:当然,我只是指.使用预处理器与其他代码文件连接或定义常量邪恶的.


小智 7

预处理器是一种廉价的方法,以丑陋的方式为语言提供不完整的元编程设施.

更喜欢真正的元编程或Lisp风格的宏.


Nor*_*sey 5

不需要预处理器.对于真正的元编程,你应该有类似MetaML或模板哈斯克尔或卫生宏点菜方案.对于快速和肮脏的东西,如果你的用户绝对必须拥有它,总会有m4.

但是,现代语言应该支持相当于C的#line指令. 这样的指令使编译器能够在原始源中定位错误,即使该源嵌入在解析器生成器或词法分析器生成器或文本程序中也是如此.换一种说法,

  • 设计您的语言,以便不需要预处理器.
  • 不要将您的语言与祝福的预处理器捆绑在一起.
  • 但是,如果其他人有自己的理由使用预处理器(解析器生成很流行),请提供对准确错误消息的支持.