Lambda表达式和DEP一起工作吗?

Lambda表达式和DEP一起工作吗?,lambda,functional-programming,scheme,closures,dep,Lambda,Functional Programming,Scheme,Closures,Dep,我试图理解动态分配的代码如何使用dep运行 让我们以编译的Scheme程序为例。 据我所知, 当计算lambda表达式时,运行时必须分配内存以存储代码(实际上存储一个也包含代码的闭包)。 因为它不能预先知道代码的大小,所以它必须是动态的。因此,它必须为此使用堆 为什么在尝试从堆执行此代码时,DEP机制没有运行时异常? 更一般地说,当DEP存在时,整个“代码就是数据,数据就是代码”的想法是如何运作的?否,返回lambda不需要代码内存,只需要数据/参数内存。考虑闭包是OOP中的简单对象,在爪哇中,

我试图理解动态分配的代码如何使用dep运行

让我们以编译的Scheme程序为例。 据我所知, 当计算lambda表达式时,运行时必须分配内存以存储代码(实际上存储一个也包含代码的闭包)。 因为它不能预先知道代码的大小,所以它必须是动态的。因此,它必须为此使用堆

为什么在尝试从堆执行此代码时,DEP机制没有运行时异常?


更一般地说,当DEP存在时,整个“代码就是数据,数据就是代码”的想法是如何运作的?

否,返回lambda不需要代码内存,只需要数据/参数内存。考虑闭包是OOP中的简单对象,在爪哇中,创建是“新的”,C<……/P>P>lambda表达式,或者更一般地说,“由其他函数生成和返回的函数”,似乎需要动态代码生成,但它们不是:此类函数通常由称为函数闭包的数据结构表示

函数闭包是一对

  • 指向(静态编译)函数的指针,以及
  • 其自由变量的值,即在函数外部定义的变量

例如,考虑下面的JavaScript类代码:

    function make_adder(x) {
      function adder(y) {
        return x + y;
      }
      return adder;
      // equivalent to "return function(y) { return x + y; };"
    }

    var add42 = make_adder(42);
    add42(3); // 45

当使用参数
42
调用
make\u adder
时,其实现返回一个闭包

lambda表达式只是一个未命名的函数;它与任何其他函数一样编译(换句话说,不是在运行时)。
    function make_adder(x) {
      function adder(x, y) {
        return x + y;
      }
      return { func : adder, free : x };
    }

    var add42 = make_adder(42);
    add42.func(add42.free, 3); // 45
    (define (make_adder x)
      (lambda (y) (+ x y)))
    (define add42 (make_adder 42))
    (add42 3) ; 45
    (define (make_adder x)
      (define (adder x y)
        (+ x y))
      (cons adder x))
    (define add42 (make_adder 42))
    ((car add42) (cdr add42) 3) ; 45