在 Racket 中指定内存限制

Specify memory limit in Racket

DrRacket 中,我可以使用 GUI 设置内存限制。但是,我发现编辑器不太好,想使用我选择的其他编辑器。但是我该如何指定内存限制呢?

我能想到两种可能性,但找不到关于这两种可能性的任何信息:

在代码的开头,您可以为模块设置一个内存限制。 (docs)

#lang racket/base
(define MAX-BYTES 1000)
(custodian-limit-memory (current-custodian) MAX-BYTES)

....

我不知道直接的命令行解决方案,但您可以在 racketrc 文件中调用 custodian-limit-memory 来设置 REPL 的限制。

另见 racket/sandbox,尤其是 call-with-limits

参见custodians

例如:

#lang racket

;; Set limit
(custodian-limit-memory
   (current-custodian) (* 2 1024 1024))

(define x (make-bytes (* 4 1024 1024)))

此代码的结果是 'out of memory'。