budd@mist.cs.orst.edu (Tim Budd) (01/26/88)
Yes, Lambert Meertens and his group at the Centrum voor Wiskunde en Informatica (center for matematics and computer science) in Amsterdam have for many years been working on a wonderful language; formerly called B (with the required addition ``not the predecessor of C'') and now (for obvious reasons; namely they got tired of saying the above) called ABC. It is explicitly designed for teaching good programming practices. It is the only language I know that directly supports programming by stepwise refinements, in which you can see the developement even in the final program. It is one of the few languages I know that has no declaration statements and is yet strongly typed. It has nice features such as infinite precision numbers, fractions, tables and lists, and more. So as to not paint an overly rosy picture, there are problems with ABC: For a long time it only ran under Unix (I believe this may have since changed). It is not noted for its speed. It uses a lot of memory. The people producing it are very good researchers, not particuarly good salespeople. I once wrote all the conventional parsing algorithms in ABC. The construction of LR parsing tables took about a page of code. Try that in C. I strongly believe that the speed problem is not inherient, and a good, fast implementation can be constructed. I have even promised Lambert that one of these years I will prove this by making one. This language deserves to be much more widely known. For its intended task (teaching novice users good programming practices) I know of no better language. I think it would be great in a high school setting, or even perhaps in grade schools. For more information, write ABC Implementation CWI / AA Postbox 4079 1009 AB Amsterdam the Netherlands or send a note to my good friend steven pemberton (who will probably regret I mentioned this) at steven@mcvax.uucp Here is a (not very exciting or interesting) example ABC program HOW TO AVERAGE: INITIAIZE GET INPUT WHILE valid: TREAT GET INPUT OUTPUT: INITIALISE: PUT 0,0 IN sum, n GET INPUT: WRITE "Number: " READ i EG 0 TREAT: PUT sum + i, n+1 IN sum, n valid: REPORT i > 0 OUTPUT: WRITE "The average is:", average average: RETURN sum/n the bottom half of the program is a sequence of ``refinements'', simple paramenterless procedures that are part of a larger procedure. Of course, refinements become more useful as programs become longer. --tim budd , oregon state university (budd@cs.orst.edu)