Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Functional programming versus imperative

Author: Vincent Diepeveen

Date: 01:27:13 02/18/04

Go up one level in this thread


On February 17, 2004 at 23:12:08, Robert Hyatt wrote:

>On February 17, 2004 at 19:33:52, Vincent Diepeveen wrote:
>
>>On February 17, 2004 at 06:41:11, Tord Romstad wrote:
>>
>>>On February 16, 2004 at 14:38:44, Robert Hyatt wrote:
>>>
>>>>On February 16, 2004 at 14:25:10, Tord Romstad wrote:
>>>>
>>>>>On February 16, 2004 at 14:03:11, Robert Hyatt wrote:
>>>>>
>>>>>>Please re-read my statement.  Look at the date.  Then re-read yours.
>>>>>>
>>>>>>My statement was written in 1997.  In general Lisp _was_ interpreted.
>>>>>
>>>>>No, it wasn't.  Lisp has been a compiled language for *decades*.  If you
>>>>>look at the ANSI Common Lisp standard (from 1991, if I recall correctly),
>>>>>you will see that the standard even *requires* a compiler.  There is
>>>>>one implementation (CLISP) which compiles only to bytecode, all other
>>>>>major Lisp implementations have compiled to machine code since a very
>>>>>long time.
>>>>>
>>>>>>Of
>>>>>>course, so was BASIC.  Yet there were basic compilers as well.  My primary point
>>>>>>was speed.  Lisp is slow.  It always was slow.  It always will be slow.
>>>>>
>>>>>It *isn't* necessarily slow.  I have even provided one data point (from
>>>>>1999, just two years after your statement was written) to illustrate that
>>>>>Lisp in practice often enables you to write *faster* programs in *less*
>>>>>time compared to C/C++.
>>>>
>>>>Personally, I would take _any_ challenge to compete with a lisp program, when
>>>>the goal is performance.  Granted, high-level languages may reduce the
>>>>_development_ time.  All the previous languages I have mentioned come to mind,
>>>>from Prolog, to APL, to Snobol.  But when execution speed is the issue, I'll
>>>>take C _every_ time, and if I were unable to beat a lisp program at speed, for
>>>>the same functionality, I'd probably turn in my coding pad.  :)
>>>>
>>>>Just as surely as I would take assembly over C if speed were the ultimate goal,
>>>>no matter how good the C optimizer is.  A bad programmer can write bad C code.
>>>>A programmer that is not familiar with a computer (take a Cray) will probably
>>>>get beaten by the optimizer.  But for a human that knows the architecture, I'll
>>>>take the lowest-level language every time, when raw NPS or whatever is the goal.
>>>
>>>The key point is the "knows the architecture" part.  Just like an assembly
>>>language program doesn't automatically run faster than a C program just
>>>because it is written in assembly language, a C program doesn't automatically
>>>run faster than a Lisp program just because it is written in C.  In both
>>>cases, you need some in-depth knowledge of the computer hardware to take
>>>advantage of the low-level features of C or assembly language.  In both
>>>cases, the performance gain given by the lowest-level language isn't
>>>extremely big.  Given optimizing compilers of the same quality, the
>>>performance difference between assembly language and C is probably
>>>comparable to the difference between C and Lisp.
>>
>>Though i love Hyatt crawling over the floor, i have to admit that in this case
>>he must be crawling laughing for your idiocy here.
>
>Vincent, you won't _ever_ find me "crawling on the floor."  Because I don't
>engage in the behavior that leads to that (heavy drinking).  Perhaps that does
>explain many of your rather insane statements here, however, as they often do
>sound as if they come from someone dead drunk.

Don't make yourself crawl too much. I do not drink alcohol at all by the way.
Note the photo at your homepage indicated an old man dissappointed in life.

>
>
>
>>
>>Let's start the functional programming subject.
>>
>>I wrote a checkersprogram in a functional language. It was called gofer
>>(developed at university amsterdam). Deliberately i didn't use Haskell features
>>because haskell is in fact imperative and that would defeat the goal.
>>
>>The checkers program using lazy evaluation and such high level language stuff,
>>was searching at 2 nodes a second.
>>
>
>
>That does _not_ mean someone else can't do it better.  Again, for the record,
>just because _you_ can't do it does _not_ mean it can't be done.  On the
>contrary, it just means you can't do it yourself... and nothing more.

Ah i didn't tell the good part of course.

It has been optimized for a year by someone trying to get his doctor title under
professor Swierstra (functional programming group). He managed to speed it up a
factor 2 after which it was a factor 50 slower when compiled :)

>>It took me a week or 2 to make and optimize the gofer program.

>Must have been some optimization job...

>
>>
>>Then i converted that by hand into a C program. That took 1 day and it was
>>10000-20000 times faster. Of course interpreted.
>>
>>When compiled the C program was factor 50-100 faster.
>>
>>Functional programming languages would be great to parse anything and easy to
>>use.
>
>
>There are plenty of reasons for functional language development.  I could point
>you to a group at Lawrence Livermore National Laboratory in the US as one place
>where this goes on.  There are many others.  With _that_ kind of brainpower
>using it, it can't be all bad...

There isn't any reason to write anything in a functional language other than why
people create their own new programming language for such as the simple
programming language that i created. To practice a few things.

>
>
>>
>>Well after writing a checkersprogram i realized at least 2 of its disadvantages.
>>Not only it's dead slow but also you can only make small functions. Have you
>>ever written a serious application in LISP?
>>
>>I doubt it.
>>
>>Really i do.
>>
>>((((((((((a b c)(a))))))(((())))))(((())))
>>
>>Sentences like above are not so easy to understand. C is way easier.
>
>So?  Declaring an array of functions that return pointers to functions that
>return pointers to arrays is also very messy-looking in C.  Just don't do it.

I know you are completely lacking any knowledge here to be able to judge
anything, but you should like me try to have a look after the program Paradise
from Wilkins. It's a couple of hundreds of pages of LISP code.

Then you'll understand the problem. Until then i'm sure not having any knowledge
on LISP terrain will not stop you.

>
>
>
>>
>>However if you write a chessprogram in LISP you will end up with tens of
>>thousands of lines of the above.
>>
>>In fact i am 100% sure that a C chessprogram is SMALLER than a LISP chess
>>program is, when just looking to the code size.
>>
>>Now we didn't talk about readability. C is easily readable.
>
>It _can_ be easily readable.  It can be completely unreadable.  It, as always,
>depends on the programmer.

You don't even know the syntax from LISP this is amazing :)

No it is not so easy like in C to write good readable source code.

Jeez i'm really talking to a complete LISP beginner here.

>
>>
>>A huge program when written in LISP will have ten thousand different functions.
>>That really is very bad. Trivially no compiler will be ever capable of
>>optimizing that well.
>>
>>AFAIK only some grey old emacs fans write their stuff in LISP. When i define
>>something in LISP there i continuesly make (((()))((())) mistakes.
>>
>>Defending such a functional dynosaur language as being a good language to
>>program in is against any common sense.
>>
>>Let's summarize the problems of it
>>  - too slow
>>  - too many functions
>>  - difficult to read code thanks to the ((()))(())(()))((
>>  - really slow
>>  - even slower
>>  - dead slow
>>  - slow to program complex applications in too by the way
>>
>>
>>>>>For complicated programs, it sometimes requires somewhat more expertise
>>>>>to write fast code in Lisp compared to C.  You will also need some
>>>>>familarity with the internals of your Lisp implementation.
>>>>>
>>>>>I know what I am talking about -- I am not making all of this up.  I
>>>>>have been working as a full-time Lisp programmer for almost three years,
>>>>>and I have used Lisp extensively before and after that time as well
>>>>>(mostly for mathematical tasks).  In most cases, I find it very hard
>>>>>to write a C program which performs as well as my Lisp solution to the
>>>>>same problem.
>>>>
>>>>
>>>>Perhaps that says more about your C programming than your Lisp programming.
>>>
>>>I've already conceded that point.  If you read my last post again, you
>>>will see that I explicitly state that I am a much better Lisp programmer
>>>than C programmer.  You are one of those who have detailed knowledge and
>>>lots of experience with low-level programming and computer hardware,
>>>and you are therefore able to squeeze out more performance from a C or
>>>assembly language program than I would ever manage.  Without such
>>>knowledge (which, I think, most of us do not posess), C simply doesn't
>>>offer any significant performance advantage.
>>>
>>>>I've never seen anyone claim that a high-level language produces faster
>>>>executables than low-level languages.  The normal claim is "reduced development
>>>>time" at the expense of "program performance".  Claiming the opposite boggles my
>>>>imagination.  IE do you also believe that a good LISP programmer can beat a good
>>>>assembly programmer, since he can beat a good C programmer?
>>>>
>>>>Not on my watch...
>>>
>>>There is noone who forces you to use the same language for the whole program,
>>>of course.  Performance-critical parts of a Lisp program could be rewritten
>>>in C or assembly language.  Mixing Lisp and assembly language tends to be
>>>much easier and more comfortable than mixing C and assembly language, because
>>>of the power of Lisp macros.
>>>
>>>>>To a certain extent, the explanation of this is of course that I am
>>>>>a much better Lisp programmer than C programmer.  But I am not a
>>>>>complete idiot in C either.  After all, my chess engine, written in C,
>>>>>is stronger than most amateur engines.
>>>>
>>>>Why not "my chess engine, written in lisp?"
>>>>
>>>>???
>>>
>>>
>>>If you read a few more lines of my post, you would see the answer.
>>>Portability.  I want to use the same code on Mac OS X, Linux and
>>>Windows, and I have long-term plans to port my engine to Palm OS.
>>>
>>>>>
>>>>>>That is why there has been no successful chess engine based on LISP yet.
>>>>>
>>>>>There hasn't been any attempt to write a conventional chess engine in
>>>>>Lisp yet.  But I know that my engine would have been no weaker if I had
>>>>>implemented it in CMUCL instead of using gcc.  My reason to use C rather
>>>>>than Lisp is not efficiency, but portability.
>>>>>
>>>>>Tord
>>>>
>>>>
>>>>
>>>>There have been Lisp chess programs in the past.  I'm not even sure that Steven
>>>>didn't write one a long while back, although I am thinking of "AI Chess" and he
>>>>might have used something else.
>>>
>>>Yes, Steven started on a project called CIL ("Chess In Lisp").  It is not
>>>a complete program.  The code which is there is entirely unoptimized and
>>>looks like a complete joke, probably because the project was abandoned
>>>early.
>>>
>>>The only complete Lisp chess engine I have seen is called BCE.  This is
>>>terribly weak, but the authors C chess program ("Bace") is not much
>>>better (rated 1319 on Leo's rating list).
>>>
>>>I repeat; there has been no serious effort to make any conventional chess
>>>engine in a modern version of Lisp, and I know that my own engine (currently
>>>rated 2733 in blitz on ICC, on a PIV 2.4 GHz) would perform at most
>>>marginally worse if I rewrote it in Lisp.
>>>
>>>Tord



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.