36 lines
1.0 KiB
Racket
36 lines
1.0 KiB
Racket
|
#lang typed/racket/base
|
||
|
;; Virtualized operating system, this time with presence and types.
|
||
|
|
||
|
;; TODO: contracts for State checking
|
||
|
;; TODO: types for Message and MetaMessage (will require rethinking at-meta-level spawn)
|
||
|
;; TODO: revisit exposure of PIDs to processes.
|
||
|
;; - make processes parametric in the PID type?
|
||
|
;; - simply make PIDs unavailable to processes?
|
||
|
;; - revisit points-of-attachment idea, and expose presence on PIDs properly?
|
||
|
|
||
|
(require racket/match)
|
||
|
(require "types.rkt")
|
||
|
(require "roles.rkt")
|
||
|
(require "vm.rkt")
|
||
|
(require "actions.rkt")
|
||
|
(require "nested.rkt")
|
||
|
(require "ground.rkt")
|
||
|
(require (rename-in "tr-struct-copy.rkt" [tr-struct-copy struct-copy])) ;; PR13149 workaround
|
||
|
|
||
|
(require/typed "unify.rkt"
|
||
|
[opaque Wild wild?]
|
||
|
[wild (case-> (-> Wild) (Symbol -> Wild))]
|
||
|
[non-wild? (Any -> Boolean)]
|
||
|
[ground? (Any -> Boolean)])
|
||
|
|
||
|
(provide (all-from-out "types.rkt")
|
||
|
(all-from-out "roles.rkt")
|
||
|
make-nested-vm
|
||
|
run-ground-vm
|
||
|
|
||
|
Wild
|
||
|
wild
|
||
|
wild?
|
||
|
non-wild?
|
||
|
ground?)
|