Subject: Re: IS(O-)Lisp status? From: Erik Naggum <erik@naggum.no> Date: 1996/07/22 Newsgroups: comp.lang.lisp Message-ID: <3047066329923457@arcana.naggum.no> [Marc Wachowitz] | How's the status/development of ISO standardization for Lisp? according to ISO procedure, there is no development at all at this time, and very little to be expected before final approval. after that, the process is called "technical corrigenda" and "amendments", either of which options should not be exercised lightly. ISO/IEC DIS 13816 "Information technology -- Programming languages, their environments and system software interfaces -- LISP" is under balloting as an International Standard. voting began on 1996-05-23 and terminates on 1996-09-23. during this time, there is to be no activity, except to handle incoming comments. after the termination of the voting, negative votes and other comments must be handled; suggested and required editorial changes are made; then it is published. no substantial changes may be made without a second DIS stage. this is very, very unlikely. | Is there going to be a newer version in near future? the ISO procedure allows revision of standards every five years. if errors are discovered, there is of course room for fixing them. there is also room for additions. I have but one serious gripe with ISO Lisp at this time. (the body of the standard uses the name "ISLisp", but the cover reads "LISP", a discrepancy that must be resolved; I prefer to call it "ISO Lisp" until publication.) my gripe concerns the special form `dynamic'. it is used to access a dynamic variable ("special" in the usual terminology). (dynamic foo) means the _dynamic_ variable _foo_. the setter is (setf (dynamic foo) ...), and the global defining macro is (defdynamic foo ...). these are perfectly OK to me. however, the `let'-binding is done wrong. instead of enabling the programmer to decide whether any given variable is dynamic or not by using `foo' or `(dynamic foo)' as needed, a special form `dynamic-let' is introduced. since the Common Lisp `declare' is not found in ISO Lisp, the programmer cannot specify the dynamic nature of a variable except through cumbersome `dynamic-let' forms outside the other binding forms. if this had been done right, IMNSHO, `let' and all its friends would take a "variable name specification" instead of just a name. (this is akin to Common Lisp's "function name specification", allowing `foo' and `(setf foo)' as function names.) e.g., where ISO Lisp now requires (dynamic-let ((foo 1)) (let ((bar 2)) ...)) I would like to see (let* (((dynamic foo) 1) (bar 2)) ...) NOTE: there is no `dynamic-let*', so you may have to nest `dynamic-let's to get the effect of what should have been `dynamic-let*'. ISO Lisp did away with most of the other binding forms (do, do*, dolist, dotimes), preferring the more Algol-like looping construct `while', which _undoubtedly_ will make it more popular with the hordes, so we won't have the "problem" of introducing `dynamic-do' and friends, but this variant treatment of the namespace/property/whatever specifier `dynamic' is still an anomaly that should be fixed. now, why would I want to have a uniform treatment of something that will be used only once? I don't think `dynamic' is the last of the variant forms or properties of variables we will see. since ISO Lisp is intended to be easier in the foreign function interface department than most other Lisps, (that's how I read it, anyway) it would make sense to use language-specific properties on the variables. e.g., if there's a global C variable `gargle', how does one refer to it? one way is to provide "indirection" through a Lisp variable whose references get magically transformed into references to the global C variable. another is to make `gargle' a variable of a new and different kind, and say `(foreign gargle)' just like one would say `(dynamic gargle)' to refer that other special namespace/property/whatever. such an open-ended definition of what a "variable name" is would afford much needed latitude in extending ISO Lisp into special environments and could have several uses besides language interfaces. e.g., reading and writing a memory-mapped I/O register requires a variable to be declared "volatile" in C, and so does a variable that is shared among processes or modified by interrupts. lacking a `declare' mechanism, I think such a general mechanism would make ISO Lisp succeed in areas where Lisp is now being disregarded due to prejudice. such a general mechanism would _also_ allow ISO Lisp to be compiled into other languages that support such things without loss of expressive power or programmer convenience. NOTE: ISO Lisp should not attempt define any of these extended variable forms, but should also not prohibit their addition by an implementation that needs them, such as it does by defining an entirely new and non- orthogonal `dynamic-let' form. (not that I'm anywhere near _happy_ with `while' and `for'.) #\Erik