[Openmcl-devel] two ccl11 issues

Arthur Cater arthur.cater at ucd.ie
Fri Sep 30 09:36:23 PDT 2016


That’s great, thank you very much.
Arthur

> On Sep 30, 2016, at 5:17 PM, Shannon Spires <svs at bearlanding.com> wrote:
> 
> On Sep 30, 2016, at 9:03 AM, Arthur Cater <arthur.cater at ucd.ie> wrote:
> 
>> Hi, I’m trying to move over to Darwin CCL 11   from Darwin CCL 10.
>> I’m using a mid-2015 MacBook Pro with OS X El Capitan 10.11.5.
>> I started lisp in Terminal with   ./dx86cl64 —no-init
>> and then said    (require “COCOA”)
>> 
>> The first issue I want to mention is that, while preparing for the mention of
>> the second issue, I had a once-off weirdness as this screenshot shows:
>> 
>> The second is that my macro for writing messages to the listener window
>> misbehaves when used in the gui (main) thread. Here’s evidence:
>> lisp was started again, successfullyb this time, as described above, and code
>> was pasted into the listener window, and then three functions called in turn.
>> The one where the gui thread is used to execute the form produces no output.
>> In ccl10 there was no such problem with a very similar WRITEOUT macro, I’ve
>> simplified it very slightly for presentation here.
>> 
>> Welcome to Clozure Common Lisp Version 1.11-r16635  (DarwinX8664)!
>> ? (in-package :cl-user)
>> 
>> (defmacro writeout (msg &rest args)
>> (let ((p (gensym)))
>>   `(let ((,p (find 'gui::cocoa-listener-process (ccl::all-processes) :key #'type-of)))
>>      (if ,p
>>          (format (gui::cocoa-listener-process-output-stream ,p) ,msg , at args)))))
>> 
>> (defun test-in-listener ()
>> (writeout "~%Writing in the listener.~%"))
>> 
>> (defun test-in-main ()
>> (gui::execute-in-gui (lambda () (writeout "~&Writing in the gui.~%"))))
>> 
>> (defun test-in-another ()
>> (ccl::process-run-function "A new process"
>>   (lambda () (writeout "~&Writing in a new process.~%")))
>> (sleep 1))
>> 
>> #<Package "COMMON-LISP-USER">
>> ? 
>> WRITEOUT
>> ? 
>> TEST-IN-LISTENER
>> ? 
>> TEST-IN-MAIN
>> ? 
>> TEST-IN-ANOTHER
>> ? ;;; The above was copied from a file and pasted into the listener all at once
>> ;;; Now to test. Get a prompt ...
>> t
>> T
>> ? (test-in-listener)
>> 
>> Writing in the listener.
>> NIL
>> ? (test-in-main)
>> NIL
>> ? (test-in-another)
>> Writing in a new process.
>> NIL
>> ? 
>> 
>> — end of quoted output, resumption of email text —
>> 
>> The SLEEP btw is there just to avoid intermingling of the text output and the
>> function result, which otherwise is a process.
>> 
>> I can work around this by changing my WRITEOUT macro to always use a new
>> process to write its output, but this seems very heavyweight. I don’t understand
>> what’s changed in CCL to make the behaviour different from CCL10.
>> 
>> Help would be appreciated, as always!
>> 
>> Arthur
> 
> This was because of http://trac.clozure.com/ccl/changeset/16524 and it was fixed in http://trac.clozure.com/ccl/changeset/16526.
> To take advantage of the fix, change your definitions as follows:
> 
> (defmacro writeout (msg &rest args)
>  `(hi::with-output-to-listener
>       (format *standard-output* ,msg , at args)))
> 
> (defun test-in-main ()
> (gui::execute-in-gui (lambda () (writeout "~%Writing in the gui.~%"))))
> 
> Note the change from ~& to ~% in #'test-in-main. It's not clear that ~& knows what it's doing in the listener.
> 
> -SS
> 
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> https://lists.clozure.com/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list