comp.lang.ada
 help / color / mirror / Atom feed
From: Ted Dennison <dennison@telepath.com>
Subject: Thoughts on the recent ICFP contest
Date: Thu, 12 Sep 2002 02:35:10 GMT
Date: 2002-09-12T02:35:10+00:00	[thread overview]
Message-ID: <3D7FFD66.9030805@telepath.com> (raw)

I was reading over the results of this year's ICFP programming contest 
(http://icfpcontest.cse.ogi.edu/ ) last week.

For those allergic to following links, this year's project was to build 
a simple virtual robot that moves crates around and interacts with other 
robots in a way that maximizes its own score. Entrants had the recent 
long weekend (long in the US anyway) to complete their entries, at which 
time they'd compete against each other's entries to see how they score. 
This is *very* similar to an AI class project I did as an undergrad (in 
Lisp), so I'm somewhat familiar with the issues involved with doing this.

One thing I started wondering is what libraries would have been needed 
to have been available for someone to complete this project 
competitively in Ada. After reading over the web pages of some of the 
contestants (http://icfpcontest.cse.ogi.edu/links.html ) and a bit of 
thought, I came up with the following things that would have helped an 
Ada implementation get into the lightning round (submitted <24 hours 
after the requirements were posted):

   (1) An inference engine.
   (2) High-level socket bindings.
   (3) A generic implementation of Dijkstra's Algorithm

(1) would be useful for the actual robot decision-making process.
We already have it in a preliminary form, with my CLIPS bindings 
(http://www.telepath.com/~dennison/Ted/AdaClips/AdaClips.html )

(3) (http://ciips.ee.uwa.edu.au/~morris/Year2/PLDS210/dijkstra.html ) 
would have saved someone lots of time here, but is probably not 
something that would be general-use enough to find laying around in a 
reusable package library somewhere. I could be wrong though...

That leaves me with (2), which is both generally useful, and not 
available right now (at least not outside of Claw). I'm thinking the 
best way to do this in the context of Ada would be to implement it as a 
stream, with the various sockopt function codes implemented as 
primitives on it.  I'm curious if anyone else thinks something like this 
ought to be available.

Another thought I had was that for a general-purpose socket stream to be 
really useful in many applications, you'd also need some way to tell it 
to transmit an entire buffer at once, rather than one component at a 
time (although you might want that in a lot of situations too). The best 
idea I came up with is a new type that users can convert their objects 
to (via some kind of pointer magic-perhaps), which has its 'Write and 
'Read implemented to write the whole defined length of the buffer at 
once. This would be quite useful with *any* stream too, not just with 
socket streams. Since this is a speed optimization, copying the buffer 
would be missing the point. Therefore, it would probably be implemented 
as a simple addres and length (or pointer if the type is generic).

Anyway, I'm curious what other Ada folks think about all this.




             reply	other threads:[~2002-09-12  2:35 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-09-12  2:35 Ted Dennison [this message]
2002-09-12  3:11 ` Thoughts on the recent ICFP contest tmoran
2002-09-12 14:23   ` Wes Groleau
2002-09-12 16:43     ` Ted Dennison
2002-09-12 16:53     ` David C. Hoos
2002-09-16 20:41       ` Wes Groleau
2002-09-17  3:21         ` Ted Dennison
2002-09-12 19:15     ` tmoran
2002-09-12 16:32   ` Ted Dennison
2002-09-12 19:15     ` tmoran
2002-09-13  1:45       ` Ted Dennison
2002-09-13 15:46       ` Warren W. Gay VE3WWG
2002-09-17 10:36 ` Jacob Sparre Andersen
2002-09-17 12:55   ` Ted Dennison
2002-09-17 14:41     ` Jacob Sparre Andersen
2002-09-17 10:56 ` Preben Randhol
2002-09-17 12:38   ` Ted Dennison
2002-09-18  0:31     ` tmoran
2002-09-18  7:15     ` Samuel Tardieu
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox