c - 你怎么能对没有反射的编程语言感到厌烦呢?

标签 c reflection aop dry

<分区>

我发现任何没有合适反射机制的编程语言都会严重削弱快速变化的问题。

对于某些语言来说,它似乎很难或不可能做到:

  • 约定优于配置
  • 自动数据绑定(bind)
  • AOP/元编程

没有反射(reflection)。

一些没有某种编程反射的示例语言是: C、C++、Haskell、OCaml。我敢肯定还有更多。

为了向您展示 DRY(不要重复自己)被大多数这些语言违反的示例,您必须编写单元测试。您几乎总是需要在您定义测试的地方之外用这些语言注册您的测试用例。

这些语言的程序员如何缓解这个问题?

编辑:对于那些不知道的人来说,确实有反射的常见语言是:C#、Java、Python、Ruby 和我个人最喜欢的 F# 和 Scala。

编辑:这两种常见的方法似乎是 code instrumentation和代码生成。但是我从未见过 C 语言的工具。

除了投票关闭,有人可以评论为什么应该关闭这个帖子,我会删除帖子。

最佳答案

你不知道。
但是您可以让重复项彼此靠近,这样当更改某些内容时,您会发现其他内容也必须更改。

例如,我编写了一个输出对象的 JSON-Parser,典型的调用如下所示:

struct SomeStruct
{
        int a;
        int b;
        double c;

        typedef int serializable;
        template<class SerializerT> void serialize(SerializerT& s)
        {
                s("a",a)("b",b)("c",c);
        }
};

当然,当您添加一个字段时,您必须在函数中添加另一个字段,但也许您不想序列化该字段(这在使用反射的语言中也必须处理),并且如果你删除一个字段而不从函数中删除它,编译器会提示。

关于c - 你怎么能对没有反射的编程语言感到厌烦呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3134825/

相关文章:

c - 作业 : In C, 如何仅使用指针获取数组的子串?

c# - 从外部程序集动态加载类型

java - 对于单线程和多线程程序,在 aop 中编写切面的最佳实践是什么?

java - Spring错误创建名称为“org.springframework.aop.config.internalAutoProxyCreator”的bean

客户端在连接被服务器关闭之前在套接字上打印一半数据

c - 使用指针添加数字

c - 哪种变量类型可以容纳 10^18 这样大的数字

java - 如何获取实例变量的引用?

java - 获取当前项目/ war 中的类列表

java - 如何控制同一个包上两个切入点的执行顺序