home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / DRI-archive / roche / COMALANG.TXT < prev    next >
Internet Message Format  |  2009-12-11  |  10KB

  1. From: "Arobase, Salle multimΘdia" <arobase1.rochef...@wanadoo.fr>
  2. Newsgroups: comp.os.cpm
  3. Subject: Re: Attn French Lurker: Compis Comal
  4. Date: Sat, 10 Nov 2001 17:52:31 +0100
  5. Organization: Wanadoo, l'internet avec France Telecom
  6. Lines: 198
  7. Message-ID: <9sjlmb$b49$1@wanadoo.fr>
  8. References: <3be8ed62$1@grendel.df.lth.se>
  9. NNTP-Posting-Host: apoitiers-102-2-1-70.abo.wanadoo.fr
  10. X-Trace: wanadoo.fr 1005410827 11401 193.253.213.70 (10 Nov 2001 16:47:07 GMT)
  11. X-Complaints-To: abuse@wanadoo.fr
  12. NNTP-Posting-Date: 10 Nov 2001 16:47:07 GMT
  13. X-Priority: 3
  14. X-MSMail-Priority: Normal
  15. X-Newsreader: Microsoft Outlook Express 6.00.2600.0000
  16. X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
  17.  
  18. COMALANG.TXT
  19. ------------
  20.  
  21. COMAL - THE PROGRAMMING LANGUAGE
  22. by David Stidolph
  23.  
  24. A little over 10 years ago,  Borge Christensen,  a professor  in
  25. Denmark, couldn't find a computer language that he  liked enough
  26. to teach. BASIC was fine for the students --  it was interactive
  27. and they could start learning quickly  because they  got to  see
  28. their program execute as soon as they typed RUN.  Unfortunately,
  29. the student programs looked like spaghetti, and  it took  longer
  30. to figure out how they worked than it took to write them.
  31.  
  32. Pascal, on the other hand, was a teachers  dream. Programs  were
  33. readable and precise.  The  long variable  names and  procedures
  34. and functions made checking the programs  easy when  compared to
  35. BASIC.  The problem with Pascal, however, was that  the students
  36. had to learn how to run  the compiler  before they  could run  a
  37. single  line  of code.   The students  also found  it harder  to
  38. experiment with Pascal than with BASIC. Every variable had to be
  39. declared and a student would never know about  errors until  the
  40. program was compiled.
  41.  
  42. Rather than choosing one or the other, Borge decided to  develop
  43. a language that would include the  best features  of both  BASIC
  44. and Pascal.  This language was called COMAL (COMmon  Algorithmic
  45. Language).  His idea was so successful  that it  has become  the
  46. official  programing  language  of  schools  in   five  European
  47. countries.  A  COMAL Standard  was developed  (called the  COMAL
  48. Kernal),   and   meetings   are   held   annually   to  maintain
  49. compatibility between the various implementations.
  50.  
  51. Technically,  COMAL  is  a  three pass,  run-time compiler.   It
  52. combines  the  features  of  a  compiler  and  an   interpreter,
  53. providing an  easy-to-learn language  that is  also easy-to-use.
  54. Explaining the three passes will help describe the language.
  55.  
  56.  
  57. Pass One - Entering Program Lines
  58. ---------------------------------
  59.  
  60. The  first  pass occurs  when a  program line  is entered.   The
  61. line's syntax is immediately checked.  If there is  any problem,
  62. an error message is  printed below  the line  and the  cursor is
  63. placed on the problem. For example, look at the following:
  64.  
  65.             100 hypotenuse=sqr(sidea^2+sideb^2(
  66.  
  67. The open parentheses at the end of the  line should  be a  close
  68. parentheses.  COMAL realizes this  and displays  the message  --
  69. ")" expected, not "(" --  beneath the line as soon as  RETURN is
  70. pressed.  The cursor is placed on  the open  parentheses at  the
  71. end of the line.  To correct the error,  press the  ) key.   The
  72. line on the screen is now correct.  Press the RETURN key and the
  73. line is entered into the program.   Also, the  error message  is
  74. removed and the text it erased is restored. The command:
  75.  
  76.             LIST 100
  77.  
  78. displays the following line:
  79.  
  80.             0100  hypotenuse:=SQR(sidea^2+sideb^2)
  81.  
  82. Notice that COMAL distinguishes between := for assignment  and =
  83. for  comparison,   but  doesn't   require  you   to  type   them
  84. differently.  SQR is capitalized to show that it  is a  built in
  85. keyword  of  COMAL.  Variables  and commands  can be  entered in
  86. either upper or lower  case.  Consider  the following  line: 100
  87. balance=12376.35 This line is valid in both COMAL and BASIC.
  88.  
  89. However, in BASIC, the  line is  stored in  its ASCII  form, and
  90. only  the  first  two  characters  of  the  variable   name  are
  91. significant (balance would be  the same  variable as  bad, bank,
  92. bankrupt and  backpay). Then,  each time  the line  is executed,
  93. BASIC  must  convert  the  number to  floating point  format and
  94. search through memory for the variable ba.
  95.  
  96. In COMAL, the  variable name  can be  up to  78 characters  long
  97. (each character is significant).  To save programming space  and
  98. increase execution speed, the name is  stored in  a table  and a
  99. token  is  used  at  each occurrence  in the  program. When  the
  100. program is executing, COMAL  knows precisely  where to  find the
  101. variable.  In  addition, the  number is  stored in  its floating
  102. point form, allowing faster execution.
  103.  
  104.  
  105. Pass Two - Program Structure Check
  106. ----------------------------------
  107.  
  108. When you  type RUN  and press  RETURN, COMAL  checks the  entire
  109. program  for  structural  errors  and  resolves  all  addressing
  110. (noting  where  procedures  are  located,  where  to branch  for
  111. IF..THEN..ELSE, FOR..NEXT loops, etc). This scan of the  program
  112. is not noticeable (usually less than a second). For example,  if
  113. a REPEAT loop was ended with  ENDWHILE instead  of UNTIL,  COMAL
  114. would give the following error message (xxxx is the problem line
  115. number):
  116.  
  117.             at xxxx: "UNTIL" expected, not "ENDWHILE"
  118.  
  119. BASIC cannot find a structural error until it executes the line.
  120. In COMAL each line of the program is  checked as  it is  entered
  121. and  the  whole  program  is  checked  before a  single line  is
  122. executed.    This   program   scan   greatly  improves   program
  123. reliability and allows COMAL  programs to  run much  faster than
  124. BASIC.
  125.  
  126.  
  127. Pass Three - Running the Program
  128. --------------------------------
  129.  
  130. The  last  pass  is  when  the  program  is  actually  executed.
  131. Although the program has been checked thoroughly for  errors and
  132. all necessary jump addresses have already  been calculated,  the
  133. possibility  of  error  still  exists.  Look  at  the  following
  134. program:
  135.  
  136.             0010 PAGE // Clears screen and homes the cursor
  137.             0020 INPUT "How many apples?": total'apples
  138.             0030 INPUT "How many people?": total'people
  139.             0040 PRINT total'apples/total'people;
  140.             0050 PRINT "apples per person"
  141.  
  142. This simple program seems correct, but what if the user typed in
  143. a zero for total'people (a division  by zero  error) or  typed a
  144. name instead of a number?  In most languages, the  program would
  145. halt.  In fact, COMAL would halt in this case as well. There  is
  146. a way, however, to trap errors. To "user  proof" program  lines,
  147. place them  inside a  TRAP..HANDLER structure.   This may  sound
  148. complicated,  but  actually  the  idea is  simple. Look  at this
  149. re-worked example program (indentation is provided  by the  LIST
  150. command, you do not have to type the spaces):
  151.  
  152.             0010 PAGE // Clears screen and homes the cursor
  153.             0012 LOOP
  154.             0015   TRAP
  155.             0020     INPUT "How many apples?": total'apples
  156.             0030     INPUT "How many people?": total'people
  157.             0040     PRINT total'apples/total'people;
  158.             0050     PRINT "apples per person"
  159.             0060     EXIT // No errors  encountered, leave  loop
  160.             0070   HANDLER
  161.             0080     PRINT "Numbers only, and at  least one."
  162.             0090     PRINT "Please try again..."
  163.             0100   ENDTRAP
  164.             0110 ENDLOOP
  165.  
  166. Now, if an error occurs  during execution  of lines  between the
  167. TRAP and the HANDLER (lines 20  through 60),  the program  would
  168. jump into the HANDLER section (lines  80 -   90). If  both input
  169. requests get proper replies, the EXIT command jumps  out of  the
  170. LOOP (and out of the TRAP  as well).  Since lines  were inserted
  171. between 10 and 20, the RENUM command can be used to make all the
  172. line numbers nice and even. COMAL  only uses  line numbers  only
  173. for editing programs and can even  list a  program without  line
  174. numbers.
  175.  
  176.  
  177. Portability of COMAL and Beyond
  178. -------------------------------
  179.  
  180. Thanks to the early development of a standard, a programmer  can
  181. write a COMAL program that will  run virtually  unchanged on  PC
  182. compatibles, Commodore 64, CP/M, and soon on the Apple II.  With
  183. COMAL, one  language  can  be   taught  for   several  different
  184. machines.  COMAL  provides a  universal language  to bridge  the
  185. gap. Once you have mastered a given language, what do you do? No
  186. one  language  is  perfect  for  all  tasks.  Each  has its  own
  187. advantages and disadvantages.
  188.  
  189. The  purpose  of COMAL  is to  teach programming  skills with  a
  190. minimum of "harassment". When you learn COMAL, you  have learned
  191. the standard programming techniques  of Pascal,  Modula II,  Ada
  192. and other structured languages.  Many of  the concepts  that you
  193. learn in BASIC, LOGO, Forth, are actually undesirable  and later
  194. must be "unlearned".
  195.  
  196.  
  197. Other Features
  198. --------------
  199.  
  200. COMAL  has  many  other  advantages  --   a full  screen editor,
  201. strings and  string arrays  of any  length (up  to the  limit of
  202. memory) with no garbage collection, fast string searches  (up to
  203. 80  times  faster  than  BASIC),  print  using, cursor  control,
  204. procedures and functions with  parameter passing  and recursion,
  205. local/global variables, user defined string functions,  and easy
  206. file  access  and  control.  COMAL  also  allows  you   to  LIST
  207. procedures or entire programs to disk and later merge them  into
  208. other programs.  No more  re-typing the  same routine  each time
  209. you need it in a program.
  210.  
  211.  
  212. EOF
  213.