language-agnostic - 预处理器在现代语言中过时了吗?

标签 language-agnostic preprocessor language-design

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

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

最佳答案

C 的预处理可以做非常巧妙的事情,但是如果您查看它所使用的东西,您就会意识到它通常只是为了添加另一个抽象级别。

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

  • 所以我的回答是:如果您的语言足够高级,则不需要预处理器 *.我不会说预处理是邪恶的或无用的,我只是说语言越抽象,我认为它需要预处理的理由就越少。

    * 什么才够高级?当然,这完全是主观的。

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

    关于language-agnostic - 预处理器在现代语言中过时了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2940437/

    相关文章:

    parsing - 在F#中模拟Prolog回溯

    collections - Haskell "collections"语言设计

    python - 类实例作为静态属性

    language-agnostic - Lambda 函数的理论基础

    javascript - GCC预处理器如何用空行替换#define

    c++ - 通过 Makefile 的预处理器宏定义在 C++ 中无法正常工作

    Xcode:用于条件调试/测试代码的预处理器宏

    algorithm - 您如何根据号码检测信用卡类型?

    design-patterns - 类之间的循环依赖

    language-agnostic - 我应该编写直接将输入映射到输出的测试,还是动态生成结果?