Is it possible to have linked namespaces? By which I mean that if evaluating something in namespace n1 and it is not defined in n1 it will go look for it in its parent namespace n0 (or even further if the link is longer):
#lang racket/base
(require rackunit)
(define (test n0 n1 ...)
(displayln ...)
(eval '(define a 1) n0)
(eval '(define b 2) n0)
(eval '(define b 3) n1)
(eval '(define c 4) n1)
(check-equal? (eval 'a n0) 1)
(check-equal? (eval 'a n1) 1)
(check-equal? (eval 'b n0) 2)
(check-equal? (eval 'b n1) 3)
(check-exn #px"" (λ () (eval 'c n0)))
(check-equal? (eval 'c n1) 4))
;; test 1
(define n0 (make-base-namespace))
(define n1 n0)
(test n0 n1 'test1)
;; test2
(define m0 (make-base-namespace))
(define anchor (eval '(begin (define-namespace-anchor anker) anker) m0))
(define m1 (namespace-anchor->namespace anchor))
(test m0 m1 'test2)
;; test3
(define q0 (make-base-namespace))
(define q1 (make-base-namespace))
(namespace-set-variable-value! '#%top (λ (x) (eval x q0)) #f q1)
(test q0 q1 'test3)