Remove :template in favour of ->preserve

This commit is contained in:
Tony Garnock-Jones 2021-06-08 16:20:58 +02:00
parent ef66c1d358
commit 40c26f006e
4 changed files with 37 additions and 64 deletions

View File

@ -12,15 +12,19 @@
(define-field value 0) (define-field value 0)
(define reporter (report-stats REPORT_EVERY)) (define reporter (report-stats REPORT_EVERY))
(send! k (hash 'getter (send! k (hash 'getter
(ref (during* (action (observer) (embedded
(log-info "observer ~v" observer) (ref (during* #:name 'subscription-handler
(at observer (assert (value)))))) (action (observer)
(log-info "observer ~v" observer)
(at (embedded-value observer) (assert (value)))))))
'setter 'setter
(ref (entity #:message (embedded
(action (new-value) (ref (entity #:name 'update-handler
(reporter new-value) #:message
(when (= new-value LIMIT) (stop-facet root-facet)) (action (new-value)
(value new-value))))))))) (reporter new-value)
(when (= new-value LIMIT) (stop-facet root-facet))
(value new-value))))))))))
(define client (define client
(action (getter setter) (action (getter setter)
@ -29,17 +33,21 @@
(define root-facet this-facet) (define root-facet this-facet)
(define count 0) (define count 0)
(at getter (at getter
(assert (ref (entity #:assert (assert (embedded
(action (_value _handle) (ref (entity #:name 'termination-detector
(set! count (+ count 1))) #:assert
#:retract (action (_value _handle)
(action (_handle) (set! count (+ count 1)))
(set! count (- count 1)) #:retract
(when (zero? count) (action (_handle)
(log-info "Client detected box termination") (set! count (- count 1))
(stop-facet root-facet)))))) (when (zero? count)
(assert (ref (entity #:assert (log-info "Client detected box termination")
(action (value _handle) (send! setter (+ value 1)))))))))) (stop-facet root-facet)))))))
(assert (embedded
(ref (entity #:name 'update-handler
#:assert
(action (value _handle) (send! setter (+ value 1)))))))))))
(module+ main (module+ main
(time (time
@ -47,10 +55,12 @@
(define root-facet this-facet) (define root-facet this-facet)
(define disarm (facet-prevent-inert-check! this-facet)) (define disarm (facet-prevent-inert-check! this-facet))
(box this-turn (box this-turn
(ref (entity #:message (ref (entity #:name 'box-boot-handler
#:message
(action (refs) (action (refs)
(log-info "refs ~v" refs) (log-info "refs ~v" refs)
(match-define (hash-table ('getter g) ('setter s)) refs) (match-define (hash-table ('getter (embedded g))
('setter (embedded s))) refs)
(client this-turn g s) (client this-turn g s)
(stop-facet root-facet)))) (stop-facet root-facet))))
500000 500000

View File

@ -11,8 +11,7 @@
assertion-struct assertion-struct
message-struct message-struct
:pattern :pattern)
:template)
(require (except-in "actor.rkt" actor-system)) (require (except-in "actor.rkt" actor-system))
(require "syntax.rkt") (require "syntax.rkt")
@ -23,6 +22,6 @@
(define-syntax-rule (assertion-struct item ...) (struct item ... #:prefab)) (define-syntax-rule (assertion-struct item ...) (struct item ... #:prefab))
(define-syntax-rule (message-struct item ...) (struct item ... #:prefab)) (define-syntax-rule (message-struct item ...) (struct item ... #:prefab))
(require (only-in "pattern.rkt" :pattern :template)) (require (only-in "pattern.rkt" :pattern))
(module reader syntax/module-reader syndicate/lang) (module reader syntax/module-reader syndicate/lang)

View File

@ -9,7 +9,6 @@
analyse-pattern-bindings) analyse-pattern-bindings)
define-preserves-pattern define-preserves-pattern
:pattern :pattern
:template
pattern->constant-values pattern->constant-values
pattern->constant-paths pattern->constant-paths
@ -53,10 +52,6 @@
(syntax-case s () (syntax-case s ()
[(_ field-stxs ...) pattern-stx] [(_ field-stxs ...) pattern-stx]
[_ (raise-syntax-error 'ctor-stx "Invalid pattern")])] [_ (raise-syntax-error 'ctor-stx "Invalid pattern")])]
['template
(syntax-case s ()
[(_ field-stxs ...)
(syntax (->preserve (ctor-stx field-stxs ...)))])]
['bindings ['bindings
(syntax-case s () (syntax-case s ()
[(_ field-stxs ...) bindings-stx] [(_ field-stxs ...) bindings-stx]
@ -228,34 +223,7 @@
'()] '()]
[other [other
'()]))) '()]))))
(define (analyse-template stx)
(syntax-case stx ($ quasiquote unquote quote)
[(ctor args ...)
(constructor-registered? #'ctor)
((free-id-table-ref preserves-pattern-registry #'ctor) 'template stx)]
;; Extremely limited support for quasiquoting and quoting
[(quasiquote (unquote p)) #'p]
[(quasiquote (p ...)) (analyse-template #'(list (quasiquote p) ...))]
[(quasiquote p) #''p]
[(quote p) #''p]
[(ctor piece ...)
(struct-info? (id-value #'ctor))
#`(ctor #,@(map analyse-template (syntax->list #'(piece ...))))]
[(list-stx piece ...)
(list-id? #'list-stx)
#`(list-stx #,@(map analyse-template (syntax->list #'(piece ...))))]
[(hash-stx piece ...)
(hash-or-hasheqv-id? #'hash-stx)
#`(hash-stx #,@(append-map-pairs (lambda (k v) (list k (analyse-template v)))
(syntax->list #'(piece ...))))]
[other #'other])))
(define-pattern-expander :pattern (define-pattern-expander :pattern
(lambda (stx) (lambda (stx)
@ -272,11 +240,6 @@
[(_ pat-stx) [(_ pat-stx)
(analyse-pattern #'pat-stx)]))) (analyse-pattern #'pat-stx)])))
(define-syntax (:template stx)
(syntax-case stx ()
[(_ template-stx)
(analyse-template #'template-stx)]))
;;--------------------------------------------------------------------------- ;;---------------------------------------------------------------------------
(define (select-pattern-leaves desc capture-fn lit-fn) (define (select-pattern-leaves desc capture-fn lit-fn)

View File

@ -40,6 +40,7 @@
(require racket/stxparam) (require racket/stxparam)
(require (for-syntax racket/base)) (require (for-syntax racket/base))
(require (for-syntax racket/syntax)) (require (for-syntax racket/syntax))
(require preserves-schema)
(require "actor.rkt") (require "actor.rkt")
(require (prefix-in actor: "actor.rkt")) (require (prefix-in actor: "actor.rkt"))
@ -105,7 +106,7 @@
(turn-sync! this-turn peer (action (_reply) expr ...))) (turn-sync! this-turn peer (action (_reply) expr ...)))
(define-syntax-rule (send! peer assertion) (define-syntax-rule (send! peer assertion)
(turn-message! this-turn peer (:template assertion))) (turn-message! this-turn peer (->preserve assertion)))
(define-syntax spawn (define-syntax spawn
(syntax-rules () (syntax-rules ()
@ -154,7 +155,7 @@
(define-event-expander assert (define-event-expander assert
(syntax-rules () (syntax-rules ()
[(_ expr) [(_ expr)
(turn-assert/dataflow! this-turn this-target (action () (:template expr)))])) (turn-assert/dataflow! this-turn this-target (action () (->preserve expr)))]))
(define-event-expander stop-when (define-event-expander stop-when
(syntax-rules () (syntax-rules ()