From: Jim A. <ja...@us...> - 2003-03-01 19:52:47
|
Update of /cvsroot/thinlisp/thinlisp-1.0/src/docs In directory sc8-pr-cvs1:/tmp/cvs-serv2714 Modified Files: tl-manual.texinfo Log Message: Fixed some grammatical problems in the rant. Index: tl-manual.texinfo =================================================================== RCS file: /cvsroot/thinlisp/thinlisp-1.0/src/docs/tl-manual.texinfo,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -r1.15 -r1.16 *** tl-manual.texinfo 13 Oct 2001 02:47:23 -0000 1.15 --- tl-manual.texinfo 1 Mar 2003 19:52:43 -0000 1.16 *************** *** 11,15 **** for real time applications and anything that shouldn't be fat and slow. ! Copyright (c) 1999-2001 The ThinLisp Group @end ifinfo --- 11,15 ---- for real time applications and anything that shouldn't be fat and slow. ! Copyright (c) 1999-2003 The ThinLisp Group @end ifinfo *************** *** 25,29 **** @page @vskip 0pt plus 1filll ! Copyright @copyright{} 1999-2001 The ThinLisp Group @*Copyright @copyright{} 1995 Gensym Corporation. @*All rights reserved. --- 25,29 ---- @page @vskip 0pt plus 1filll ! Copyright @copyright{} 1999-2003 The ThinLisp Group @*Copyright @copyright{} 1995 Gensym Corporation. @*All rights reserved. *************** *** 39,43 **** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! For additional information see @url{http://www.thinlisp.org/}. @end titlepage --- 39,43 ---- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! For additional information see @uref{http://www.thinlisp.org/}. @end titlepage *************** *** 110,114 **** imposed by ThinLisp cannot by sped up by rewriting it in C. ! The ThinLisp home is @url{http://www.thinlisp.org/}. The newest source distributions of TL and this manual can be found here. Bugs should be reported to @email{bugs@@thinlisp.org}. --- 110,114 ---- imposed by ThinLisp cannot by sped up by rewriting it in C. ! The ThinLisp home is @uref{http://www.thinlisp.org/}. The newest source distributions of TL and this manual can be found here. Bugs should be reported to @email{bugs@@thinlisp.org}. *************** *** 162,166 **** programmer's productivity in developing new functionality by enabling the purest form possible of coded solutions, and so to hide as many of the platform ! specific details as possible. In the ongoing evolution of Lips, considerations of the efficiency of processing speed and memory use came in a distant second to programmer convenience and to the attempt to protect the programmer from bugs --- 162,166 ---- programmer's productivity in developing new functionality by enabling the purest form possible of coded solutions, and so to hide as many of the platform ! specific details as possible. In the ongoing evolution of Lisp, considerations of the efficiency of processing speed and memory use came in a distant second to programmer convenience and to the attempt to protect the programmer from bugs *************** *** 199,203 **** However, when it came to deploying these systems, things didn't turn out so smoothly. Most software products of that era were coded in languages such as ! Fortran, Cobol, Pascal, C, and assembly language. It turned out that Software developers who could breathe fire in Lisp were clumsy, inefficient, or flatly unwilling to port their systems to these traditional languages. --- 199,203 ---- However, when it came to deploying these systems, things didn't turn out so smoothly. Most software products of that era were coded in languages such as ! Fortran, Cobol, Pascal, C, and assembly language. It turned out that software developers who could breathe fire in Lisp were clumsy, inefficient, or flatly unwilling to port their systems to these traditional languages. *************** *** 250,254 **** direct consequence of the performance problems caused by garbage collection this pilot project was closed out, and this particular deployment approach was ! dropped. A different The G2 system is a real-time supervisory level control system built by Gensym --- 250,255 ---- direct consequence of the performance problems caused by garbage collection this pilot project was closed out, and this particular deployment approach was ! dropped. A different implementation containing some of Cooker's ideas ! eventually became the TDC Expert product. The G2 system is a real-time supervisory level control system built by Gensym *************** *** 406,416 **** default choice for people building big systems. ! Lisp and other languages (such as CLU, Smalltalk, Eiffel, and recently Java) ! were are exemplars of the mathematical style, emphasizing denotational ! semantics. The operations in these languages were defined with semantics that ! are deep (or fat if you prefer), focusing not on what an operation @emph{did} ! but on what it @emph{meant}. Of course there had to be implementations of these ! operations, but the actual machine instructions carried out were allowed (even ! expected) to vary widely depending on the manner and situation in which it was used. --- 407,417 ---- default choice for people building big systems. ! Lisp and other languages (such as CLU, Smalltalk, Eiffel, and recently Java) are ! exemplars of the mathematical style, emphasizing denotational semantics. The ! operations in these languages were defined with semantics that are deep (or fat ! if you prefer), focusing not on what an operation @emph{did} but on what it ! @emph{meant}. Of course there had to be implementations of these operations, ! but the actual machine instructions carried out were allowed (even expected) to ! vary widely depending on the manner and situation in which the operation was used. *************** *** 418,424 **** consequences of each style evoking surprise, disbelief, or even indignant disgust in ardent followers of the opposing camp. Denotational fans can't ! believe how much of the underlying limitations of systems are exposed, and ! operational fans can't believe how disassociated operations are from the ! machine. One sees too much exposed, and the other sees too much being hidden. @section GOTO Right Now, or GOTO When You're Ready --- 419,426 ---- consequences of each style evoking surprise, disbelief, or even indignant disgust in ardent followers of the opposing camp. Denotational fans can't ! believe how much of the underlying limitations of systems are exposed in ! operational languages, and operational fans can't believe how disassociated ! operations are from the machine in denotational languages. One sees too much ! exposed, and the other sees too much being hidden. @section GOTO Right Now, or GOTO When You're Ready *************** *** 471,484 **** function, and the @code{(go bad)} form is contained within an embedded @code{lambda} form defining a different function, then the situation is very ! different. Because goto tags have lexical scope, even across function ! boundaries, requires that the @code{go} be able to exit the function it is in ! and re-enter the outer function at the appropriate point. In this case, ! entering the @code{tagbody} statement would require establishing a restart point ! similar to a @code{setjmp}, and the @code{go} would become something similar to ! a @code{longjmp}. If the iteration contains an @code{unwind-protect}, then ! cleanup code will be executed after the @code{go} executes, but before the code ! at the @code{bad} statement. If the @code{unwind-protect} clean-up forms ! contain a go to a further surrounding tagbody, then the code after the ! @code{bad} tag will never be executed. In this example, operational prorammers are floored by how complicated a simple --- 473,486 ---- function, and the @code{(go bad)} form is contained within an embedded @code{lambda} form defining a different function, then the situation is very ! different. The fact that Lisp @code{go} tags have lexical scope, even across ! function boundaries, requires that the call to @code{go} be able to exit the ! function it is in and re-enter the outer function at the appropriate point. In ! this case, entering the @code{tagbody} statement would require establishing a ! restart point similar to a @code{setjmp}, and the @code{go} would become ! something similar to a @code{longjmp}. If the iteration contains an ! @code{unwind-protect}, then cleanup code will be executed after the @code{go} ! executes, but before the code at the @code{bad} statement. If the ! @code{unwind-protect} clean-up forms contain a go to a further surrounding ! tagbody, then the code after the @code{bad} tag will never be executed. In this example, operational prorammers are floored by how complicated a simple *************** *** 494,511 **** @section ThinLisp's Compromises ! While C++ and Java can be viewed as attempts to move C more towards a ! denotational footing, Thinlisp is an attempt to move Common Lisp more towards an ! operational footing. I've attempted to lessen the impact of Lisp's "gotchas" ! that frustrate programmers who look at languages from an operational semantics ! point of view. Attempting to allow the benefits of deep denotational semantics ! while warning of performance and behavior surprises is the underlying goal for ! ThinLisp. ! ! One of the goals of ThinLisp is to implement the deep semantics of Lisp, while ! offering compile time warnings whenever these semantics force behavior that ! deviates from expectations consistent with operational (or "thin") semantics. ! If the programmer really intends to use the full, deep semantics, then a ! lexically apparent declaration can be used to suppress the warnings and accept ! the more expensive behavior required by the deep semantics. There are three main areas where ThinLisp warnings are used to help prevent --- 496,512 ---- @section ThinLisp's Compromises ! While C++ can be viewed as an attempt to move C more towards a denotational ! footing, Thinlisp is an attempt to move Common Lisp more towards an operational ! footing. I've attempted to lessen the impact of Lisp's "gotchas" that frustrate ! programmers who look at languages from an operational semantics point of view. ! Attempting to allow the benefits of deep denotational semantics while warning of ! performance and behavior surprises is the underlying goal for ThinLisp. ! ! In ThinLisp we've implemented the deep semantics of Lisp, while offering compile ! time warnings whenever these semantics force behavior that deviates from ! expectations consistent with operational (or "thin") semantics. If the ! programmer really intends to use the full, deep semantics, then a lexically ! apparent declaration can be used to suppress the warnings and accept the more ! expensive behavior required by the deep semantics. There are three main areas where ThinLisp warnings are used to help prevent *************** *** 616,629 **** @section Overview of Translations ! There are four different modes in which GL (Gensym Lisp, oops, er, Language) ! source code will need to be processed, two Lisp compilation modes and two ! translation modes. The first is development compilation in an underlying Lisp ! environment. The second is a macro definition compilation to define macros in ! preparation for a translation. These are otherwise unremarkable uses of the ! underlying Lisp implementations compile-file and load functions, distinguished ! only by what we do with the :development and :distribution compiler switches. ! The third is a translation pre-process step in which the names and data types ! of variables and functions are determined. The fourth and final is a ! translation mode in which C files and H files are generated. The translator from GL to C will be written to make as few dependencies as --- 617,631 ---- @section Overview of Translations ! There are four different modes in which GL (Gensym Lisp, oops, er, Language, ! oops, er ThinLisp) source code will need to be processed, two Lisp compilation ! modes and two translation modes. The first is development compilation in an ! underlying Lisp environment. The second is a macro definition compilation to ! define macros in preparation for a translation. These are otherwise ! unremarkable uses of the underlying Lisp implementations compile-file and load ! functions, distinguished only by what we do with the :development and ! :distribution compiler switches. The third is a translation pre-process step in ! which the names and data types of variables and functions are determined. The ! fourth and final is a translation mode in which C files and H files are ! generated. The translator from GL to C will be written to make as few dependencies as |