<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>Thanks Gary for the detailed response. I have just spent some time to write some basic GUI code based on Cocoa in LispWorks and Clozure CL. I could go on about the philosophical differences between LW and CCL wrt Cocoa but that is perhaps left best for some other time. At the end of the day both approaches work. </div><div><br></div><div>CCL gets high scores for having defined interfaces, based on reading the header files I presume. LW includes no such information. As developer I have to define my own function/method/constant definitions for Cocoa and other APIs in LW. Not very practical for large APIs. </div><div><br></div><div>The main problem, we found with CCL and Cocoa, especially vis-a-vis LW, is debugging. Specifically, CCL makes it hard to debug Cocoa call backs. Example: Say I have a window (NSWindow containing NSView) with a buggy event handler. </div><div><br></div><div><div>(defmethod VIEW-LEFT-MOUSE-DOWN-EVENT-HANDLER ((Self event-test-Window) X Y)</div><div> (format t "click: x=~A, y=~A~%" x y)</div><div> (setf (x self) x)</div><div> (setf (y self) y)</div><div> (/ x 0) ;; division-by-zero!!!</div><div> (print *Current-process*)</div><div> (view-draw-contents Self))</div><div><br></div><div>1) output to OS X console does not work as interactive debugging tool. There is too much lag. The print/format statements, if you start CCL 1.2 by double clicking the OS X app will produce output in the OS X console with great lag time. Output from processes such as the APPKIT-PROCESS do not write to the listener. It can sometimes take quite some while for that output to show up. The solution is to start CCL via a terminal window. In that case the output will show up in that terminal window and will do so about 1000 times faster. The MCL had its problem too. It opened up a listener per thread in case of output. For CCL I think it would be good to have just ALL the output be routed to the listener. Perhaps there could be a before method called with the current-process allowing developers to customize output, e.g., by preceding output from certain processes with some prefix prompt.</div><div><br></div><div><br></div><div>2) notice the bug in the method above (division by zero). In the main thread an error would be raised. In the APPKIT-PROCESS there is no evidence of the bug. No error message. No user prompting with continuation. No opportunity to enter backtrace. Is there some implicit error handler in the APPKIT-PROCESS that simply ignores all the errors raised? This makes things hard to debug because one does not even suspect a problem. LW, in contrast, not only catches the error in the usual way (raising a division-by-zero condition) but also allows a backtrace including getting to the point in the source causing the problem. This is very nice. Is there a simple way to get around this?</div><div><br></div><div><br></div></div><div>- detail: Why is the backtrace window in CCL 1.2 a drop shadow less window? Looks like a bug to me.</div><div>- ps: a good way to explore Cocoa functionality is via XCode. It includes some nice documentation browsers</div><div><br></div><div>all the best, Alex</div><div><br></div><div><br></div><br><div><div>On Aug 28, 2008, at 4:18 AM, Gary Byers wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>When learning CL, there were probably some fairly major concepts<br>that needed to be absorbed, including:<br><br> - macros<br> - syntax (or the near total absence of it)<br> - the general notion that everything's a function that returns<br> some number of values, and that most primitive operations<br> (arithmetic, array/string access) are expressed as function calls<br> - closures and higher-order functions<br> - special variables and dynamic binding<br> - lambda-lists and variadic functions<br> - garbage collection (which might or might not be a new concept)<br> - CLOS<br> - the reader, packages ..<br> - the fact that there's a fairly rich library of standard functions<br> for dealing with common data structures<br> - ...<br><br><br></div></blockquote></div><br><div apple-content-edited="true"> <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">Prof. Alexander Repenning</font></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px">University of Colorado</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Computer Science Department</p><p style="margin: 0.0px 0.0px 0.0px 0.0px">Boulder, CO 80309-430</p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><br class="khtml-block-placeholder"></p><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">vCard: <a href="http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf">http://www.cs.colorado.edu/~ralex/AlexanderRepenning.vcf</a></font></p><br class="Apple-interchange-newline"></span></span></span></div></span> </div><br></body></html>