Little clarification. I call (call-with-continuation-prompt (lambda () (generate-digit) (generate-digit))) and it's successfully executed, but if I try (call-with-continuation-prompt (lambda () (generate-digit)) two times - access violation occurs.
03.12.2014, 23:55, "Matthew Flatt" <[email protected]>: > I don't think CGC versus 3m is relevant. > > My guess is that you need to wrap a prompt around each evaluation of a > top-level form. You can try this manually at first: Does it work to > change each `(generate-digit)` at the end below to > > (call-with-continuation-prompt (lambda () (generate-digit))) > > ? If so, then building that `call-with-continuation-prompt` wrapper > into your evaluation function will likely solve the problem. > > At Wed, 03 Dec 2014 23:45:28 +0300, Nesterov Kirill wrote: >> Hi all, >> >> I'm trying to embed racket 3m version as interpreter into GUI application. >> For >> custom interpreters this application have two required APIs - first one is >> init >> and the second one is eval string. So in init I'm calling >> scheme_register_tls_space and scheme_main_setup after. And in eval I'm using >> custom version of Racket's read-eval-print-loop without recursion for >> evaluation of thrings. And everything is working well until I've tried to >> implement generator. Some reading of sources lead we into problem of >> continuation. This simple code leads to error "continuation application: >> attempt to cross a continuation barrier". >> >> (define (generate-one-element-at-a-time lst) >> >> (define (control-state return) >> (for-each >> (lambda (element) >> (set! return (call-with-current-continuation >> (lambda (resume-here) >> ;; Grab the current continuation >> (set! control-state resume-here) >> (return element))))) >> lst) >> (return 'you-fell-off-the-end)) >> >> (define (generator) >> (call-with-current-continuation control-state)) >> >> ;; Return the generator >> generator) >> >> (define generate-digit >> (generate-one-element-at-a-time '(0 1 2))) >> >> (generate-digit) ;; 0 >> (generate-digit) ;; 1 ;; error "continuation application: attempt to cross a >> continuation barrier" >> >> Attemt to use generators library lead to memory access violation. I suppose >> the >> problem lies in stack frames which are cleared every time eval callback from >> the main program is called. For some reasons I can't run racket in another >> thread. So may be there is an option how this problem could be solved? May >> be >> my assumption is not right? May be switch to CGC and mapping stack with >> scheme_set_stack_base into heap can help? If it help I can show the source >> of >> this plugin. >> >> Thanks, >> Kirill >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users

