【问题标题】:What frameworks/languages support run-time class creation? [closed]哪些框架/语言支持运行时类创建? [关闭]
【发布时间】:2010-06-26 08:13:03
【问题描述】:

我正在尝试汇总支持运行时类创建的框架/语言列表。例如,在 .NET 中,您可以使用 System.Reflection.Emit 库在运行时发出新类。如果您能提及支持此(或它的某些变体)的其他框架/语言,那将非常有帮助。

谢谢:)

【问题讨论】:

    标签: reflection reflection.emit dynamic-class dynamic-class-creation


    【解决方案1】:

    Python、Ruby 等动态语言...

    【讨论】:

      【解决方案2】:

      Objective-C 支持它 (objc_allocateClassPair)

      【讨论】:

      • 谢谢:)。并感谢您的参考。
      【解决方案3】:

      在 JavaScript 中,函数是对象。因此给定一个函数定义,如:

      function Foo(x, y, z)
      {
              this.X = x;
              this.Y = y;
              this.Z = z;  var g = function()
      
      }
      

      你可以像这样创建一个新对象:

      var obj = new Foo(a,b,c);
      

      但在 JavaScript 中,您可以在运行时创建函数。

      function MakeFoo(x, y, z, f) //where parameter f is a function
      {
          var g = function()
          {
      
              this.X = x;
              this.Y = y;
              this.Z = z;
              this.DoSomething = f;
          }
      
          return g;
      
      }
      
      var my_class = MakeFoo(a, b, c, function() { /* Do Stuff */ });
      var obj = new my_class();
      
      obj.DoSomething();
      

      【讨论】:

        【解决方案4】:

        根据你的意思,任何语言都可以。

        例如,C++ 可以。乍一看,这很荒谬——C++ 是一种静态类型的编译语言。所以 - 你所做的就是在你的项目中包含 LLVM 库。这是一个编译器后端,您可以使用它来描述您的类、编译它们并使用 LLVM JIT 运行它们,所有这些都在您的应用程序的运行时进行。

        IIRC,gcc 后端是用 C 编写的,所以如果您愿意弄清楚该代码,原则上您可以使用甚至没有类的语言在运行时定义类。

        无论哪种方式,你的部分工作是定义一个类的确切含义——它没有内置到编译器后端,因为它们应该支持一系列具有不同类型系统的不同前端语言。

        我当然不推荐这种方法 - 只是指出它是可能的。

        【讨论】:

        • 我的意思是明确支持,但这很有趣。谢谢:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-17
        • 1970-01-01
        相关资源
        最近更新 更多