Ear*_*rlz 6 language-agnostic preprocessor language-design
我正在为一个简单的宠物语言编写一个简单的编译器,我正在创建并来自C背景(虽然我用Ruby编写)我想知道是否需要预处理器.
你怎么看?现代语言中仍然需要"哑"预处理器吗?C#的条件编译功能会被视为"预处理器"吗?是否每种不包含预处理器的现代语言都具有正确替换它所需的实用程序?(例如,由于模板,C++预处理器现在已经过时(尽管仍然依赖).)
C的预处理可以做一些非常简洁的事情,但是如果你看一下它所使用的东西你就会意识到它通常只是为了增加另一层次的抽象.
所以我的答案是:如果你的语言足够高,你就不需要预处理器*.我不会称之为预处理邪恶或无用,我只是说语言越抽象,我就越不能想到它需要预处理.
*什么是高水平的?当然,这完全是主观的.
编辑:当然,我只是指宏.使用预处理器与其他代码文件连接或定义常量是邪恶的.
不需要预处理器.对于真正的元编程,你应该有类似MetaML或模板哈斯克尔或卫生宏点菜方案.对于快速和肮脏的东西,如果你的用户绝对必须拥有它,总会有m4.
但是,现代语言应该支持相当于C的#line指令. 这样的指令使编译器能够在原始源中定位错误,即使该源嵌入在解析器生成器或词法分析器生成器或文本程序中也是如此.换一种说法,