From: <pet...@ya...> - 2004-11-18 08:08:18
|
Dear Peter Graves I've just signed in to this list. Let me first introduce myself briefly: After being introduced to programming with procedural languages at the beginning of my undergraduate studies (Pascal, some Fortran 90 and C), I deeply delved into O-O Programming in my final years at university, using some Java and a lot of Eiffel, having the pleasure to work with its inventor Prof. Betrand Meyer for my diploma thesis. In my professional carreer as a software engineer, I started in two light-weight Perl projects and am now in a really big Java project. In my spare time, I continue my programming education. After a brief look at O-O scripting languages like Python and Ruby, I am now entering the Lisp world. I would like to use J and ABCL for my studies, mainly because they are free and I managed to download them and build them from source without problems (I am working on Windows XP: Although crazy for ever better programming languages, I just go with the mainstream regarding the OS...) and because abcl-jfli seams to give me acces to the Java libraries, which would make it possible for me to use a familiar GUI toolkit (Swing) and other libraries if needed. As far as I can tell so far, you and your few colleagues are doing a hell of a job on your editor and language implementation, and I thank you a lot for it! If I get deeper into it, I might later be able to give you some help, although it could always only be a few hours per week as I have a demanding job and a family life. First, a general question: Do you have any record of J's history and original intentions? Was it just to be an editor first, and the lisp interpreter was a side product? Or was it to be a lisp environment from the beginning? And why is the editor implemented in Java? Where did the Java-Lisp connection originate? A lot of people I know use emacs or xemacs which I have never used myself (for languages like Perl, I use UltraEdit, for Eiffel EiffelStudio, for VB VS and for Java Eclipse). Is J some kind of an emacs port to java, with similar configuration and extension possibilities in Lisp? Second, a concrete question, maybe a bug report: (read) doesn't seem to work correctly if it follows a (format) for a string that is not terminated by a newline. The following example is taken from David Touretzky's `COMMON LISP: A gentle intro...': (defun my-square () (format t "Please type in a number: ") (let ((x (read))) (format t "The number ~S squared is ~S.~%" x (* x x)))) It should produce: > (my-square) Please type in a number: 7 The number 7 squared is 49. NIL but intead produces: CL-USER(2): (my-square) 7 Please type in a number: The number 7 squared is 49. NIL CL-USER(3): in abcl. All works well if I put a newline at the end of the of the first string: (format t "Please type in a number: ~%") CL-USER(4): (my-square) Please type in a number: 7 The number 7 squared is 49. NIL CL-USER(5): But I don't really want a line break there, and as I take from Touretzky's book (and also from Paul Graham's `ANSI Common Lisp' which should describe the standard), it should work without the newline as well. Is that a bug or am I misunderstanding something here? Sincerely yours, Peter Häfliger ___________________________________________________________ Gesendet von Yahoo! Mail - Jetzt mit 100MB Speicher kostenlos - Hier anmelden: http://mail.yahoo.de |
From: Adam W. <li...@co...> - 2004-11-18 10:13:31
|
Hi Peter Hÿffffe4fliger, > (defun my-square () > (format t "Please type in a number: ") > (let ((x (read))) > (format t "The number ~S squared is ~S.~%" x (* > x x)))) > > It should produce: > >> (my-square) > Please type in a number: 7 > The number 7 squared is 49. > NIL > > but intead produces: > > CL-USER(2): (my-square) > 7 > Please type in a number: The number 7 squared is 49. > NIL > CL-USER(3): > > in abcl. All works well if I put a newline at the end > of the of the first string: > > (format t "Please type in a number: ~%") > > CL-USER(4): (my-square) > Please type in a number: > 7 > The number 7 squared is 49. > NIL > CL-USER(5): > > But I don't really want a line break there, and as I > take from Touretzky's book (and also from Paul > Graham's `ANSI Common Lisp' which should describe the > standard), it should work without the newline as well. > > Is that a bug or am I misunderstanding something here? While not being Peter I still enjoyed your introduction. The problem above is that you need to flush the output since it didn't happen automatically due to a newline. It's not a bug. (defun my-square () (format t "Please type in a number: ") (force-output) (let ((x (read))) (format t "The number ~S squared is ~S.~%" x (* x x)))) Note that unless you bind *READ-EVAL* to NIL you can evaluate code within READ which has security implications. Please type in a number: #.(+ 1 2) The number 3 squared is 9. That could just have easily been a function call to DELETE-FILE. (defun my-square () (format t "Please type in a number: ") (force-output) (let* ((*read-eval* nil) (x (read))) (format t "The number ~S squared is ~S.~%" x (* x x)))) (my-square) Please type in a number: #.(+ 1 2) Debugger invoked on condition of type READER-ERROR: Can't read #. when *READ-EVAL* is NIL. Regards, Adam |
From: Peter G. <pe...@ar...> - 2004-11-18 15:18:46
|
On Thu, 18 Nov 2004 at 08:56:25 +0100, Peter H=FFffffe4fliger wrote: > First, a general question: Do you have any record of > J's history and original intentions? Was it just to be > an editor first, and the lisp interpreter was a side > product? Or was it to be a lisp environment from the > beginning? And why is the editor implemented in Java? > Where did the Java-Lisp connection originate? A lot of > people I know use emacs or xemacs which I have never > used myself (for languages like Perl, I use UltraEdit, > for Eiffel EiffelStudio, for VB VS and for Java > Eclipse). Is J some kind of an emacs port to java, > with similar configuration and extension possibilities > in Lisp? I began work on j in November of 1998. I had already written a largish editor for Windows in C++, and I was starting to use Linux. It's not so easy to port a C++ editor from Windows to Linux, so I was using emacs for my Linux work, which coincidentally involved reading a fair amount of Java source. I was reasonably happy with emacs, but when you're accustomed to using your own editor it's hard to be completely satisfied with anything else. In retrospect, a couple hundred lines of elisp would probably have made a big difference. In any case, one thing led to another and I started writing yet another editor. I chose Java since (in theory, at least) the same code would work on both Windows and Linux. I liked Java at the time, based mostly on code I had read rather than code I had written. It wasn't hard to like Java back then, particularly if you were coming from the far greater insanity of C++ on Windows. At the beginning there was no thought of Lisp at all, although, as mentioned, I was using emacs on Linux and had a high regard for it. The first try at giving j an extension language involved BeanShell, which wasn't too bad for very simple things, but after a while it became clear that there wasn't any real advantage to using BeanShell over just writing extensions in Java. What I really wanted was a way to be able to customize, extend, and/or modify j without (in the normal case) having to restart it. It seemed like Lisp had more potential in this direction. So in the fall of 2002 I decided to take a week or two and write a simple Lisp interpreter for j. My initial plan was to do something like elisp-in-java; I certainly had no thought of doing all of Common Lisp. And I really did plan to be done in a week or two... :) The thing that eventually got me to do all of Common Lisp was the existence of Paul Dietz's ANSI test suite. Early on, I used pieces of the test suite to test basic things, even though j's Lisp could nowhere near run the whole suite. After a while, running the whole suite became the goal. Then, 99% compliance became the goal... So the Java-Lisp connection is really just an accident. -Peter |