home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / DRACO / DRACO123.MQG / DRACO123.MSG
Text File  |  2000-06-30  |  11KB  |  251 lines

  1. Date: Thursday, 13 November 1986
  2. From: seismo!ubc-vision!alberta!myrias!cg (Chris Gray)
  3. To:   Keith Petersen, W8SDZ
  4. Re:   DRACO CP/M-80 software suite uploaded
  5.  
  6. The following files are the complete DRACO software suite:
  7.  
  8. --> FILE:  DRACO-1 .ARC        CRC = 0B B6
  9. --> FILE:  DRACO-2 .ARC        CRC = B8 3C
  10. --> FILE:  DRACO-3 .ARC        CRC = 6A 97
  11.  
  12. DRACO-1.ARC - documentation - writeups on the language, tools, programs,
  13. etc.  Also contains lots of sample Draco sources.
  14.  
  15. DRACO-2.ARC - compiler - contains the compiler, linker, assembler,
  16. disassembler, librarian, cross-referencer, libraries and include files.
  17.  
  18. DRACO-3.ARC - programs - contains programs which must be configured using
  19. the CONFIG program: several games and the editor.
  20.  
  21.  
  22.     What is Draco, Why Did I Write It and Why Is It Like It Is?
  23.  
  24.     I usually describe Draco (pronounced Dray-ko) as a "systems
  25. programming language". That means that it is a language which is
  26. suitable for what I think of as systems programming - writing
  27. operating systems, compilers, editors, databases, etc. This doesn't
  28. mean that it isn't suitable for other applications such as writing
  29. games, graphics programs, numerical programs, etc. It does mean that
  30. the language has all of the facilities needed for the former type of
  31. programming, such as bit operators, pointer manipulation, support for
  32. complex data structures, etc.
  33.  
  34.     What is different about Draco? I won't try to compare it with
  35. every other programming language in the world; instead I'll stick to
  36. two of the most popular ones for micros nowadays - C and Pascal. Draco
  37. has all of the facilities of C, except for bitfields and the macro
  38. preprocessor. Unlike C, and like Pascal, it is a strongly typed
  39. language. This means that it won't let you assign an integer to a
  40. pointer (unless you really insist). It is also not an expression
  41. language like C, thus it makes a quite strict distinction between
  42. statements like "a := 27" and expressions like "a + 27". Pascal is
  43. strongly typed, but lacks many of C's facilities - pointer
  44. manipulation, bit manipulation, standard separate compilation,
  45. conditional compilation, etc. I like to think that Draco combines the
  46. best features of both languages.
  47.  
  48.     Visually, Draco doesn't really resemble either language closely,
  49. but is a little closer to Pascal than C. It uses ':=' for assignment
  50. and '=' for comparison, like Pascal and unlike C. It's structure and
  51. union declarations are like those of C, however. As a simple
  52. comparison, here follows the same program, written in Pascal, C, and
  53. Draco:
  54.  
  55. Pascal:
  56.  
  57.     PROGRAM test(INPUT, OUTPUT);
  58.     VAR
  59.         i, j : INTEGER;
  60.  
  61.     BEGIN
  62.         FOR i := 0 TO 10 DO BEGIN
  63.             FOR j := 0 TO i DO
  64.                 WRITE(j : 2, ' ');
  65.             WRITELN
  66.         END;
  67.         WRITELN("All done.")
  68.     END.
  69.  
  70. C:
  71.  
  72.     #include <stdio.h>
  73.  
  74.     main(argc, argv)
  75.     int argc;
  76.     char *argv[];
  77.     {
  78.         int i, j;
  79.  
  80.         for (i = 0; i <= 10; ++i) {
  81.             for (j = 0; j <= i; ++j)
  82.                 printf("%2d ", j);
  83.             printf("\n");
  84.         }
  85.         printf("All done.\n");
  86.     }
  87.  
  88. Draco:
  89.  
  90.     proc main()void:
  91.         int i, j;
  92.  
  93.         for i from 0 upto 10 do
  94.             for j from 0 upto i do
  95.                 write(j : 2, ' ');
  96.             od;
  97.             writeln();
  98.         od;
  99.         writeln("All done.");
  100.     corp;
  101.  
  102.     First, it's clear that the C program has lots of brackets, while
  103. the Pascal and Draco programs have lots of keywords. A significant
  104. difference, not very clear in this small example, is that Draco uses
  105. different keywords for each job, rather than relying on a single
  106. construct (the BEGIN - END or '{' - '}' block). I greatly prefer
  107. keywords, finding them easier on the eye. I also prefer languages in
  108. which the use of case (UPPER v.s. lower) is available for my own
  109. purposes, rather than having them equivalent as in most Pascals. Also,
  110. note that the Draco program uses 'upto' in the 'for' loops - this
  111. tells the compiler that the loop will be counting upwards; 'downto' is
  112. used for downward counting loops. C doesn't really have a semantically
  113. different 'for' loop - it's is just a kind of shorthand for a 'while'
  114. loop.
  115.  
  116.     Some of the inadequacies of Pascal from my point of view are as follows:
  117.  
  118.     - no standard separate compilation
  119.     - no conditional compilation
  120.     - no general string mechanism
  121.     - no pointer manipulation
  122.     - no bit manipulation
  123.     - I HATE BEGIN and END!
  124.     - no signed/unsigned types
  125.     - limitations on function and argument types
  126.     - procedure calls don't use '()' - they look like variables
  127.     - no typed, named, constants
  128.     - no available, decent implementations (fast compilation, good code,
  129.         nice libraries, good error reporting)
  130.     - I/O semantics that are poor for interactive programs
  131.     - no file inclusion or module specification facility
  132.  
  133.     Some of the inadequacies of C from my point of view:
  134.  
  135.     - too many bloody brackets!
  136.     - horrible declaration syntax (just what is "char *(*p[])()"?)
  137.     - error prone conventions (how many times have YOU written '=' when
  138.         you meant '=='?)
  139.     - non-portable I/O (if you don't believe this, take a look at the
  140.         open calls on CP/M or MS-DOS versions of C, where you get to tell
  141.         it what it's supposed to do with '\n')
  142.     - potential for extremely unreadable code (misuse of macros, etc.)
  143.     - slow compilers (as I've heard it, the reason that the original UNIX C
  144.         compiler for the PDP-11 generated assembler source was so that the
  145.         compiler writers didn't have to worry about long/short branch
  146.         optimization, since that was done by the assembler. Producing
  147.         assembler source is just plain slow. Those who argue that they want
  148.         to hand edit it to improve it are crazy!)
  149.     - lack of much type checking (I prefer compilers that tell me about my
  150.         dumb mistakes. This a lot better in the ANSI draft version.)
  151.     - inefficient standard setup - passing everything as 16 bits on an 8
  152.         bit CPU isn't so hot
  153.     - stupid linkers - why add all that code I'm never calling?
  154.     - no built-in I/O - this makes even the simplest programs large
  155.     - no typed, named constants
  156.  
  157.     All of these issues have been addressed in the Draco language and
  158. tools.  Just as important to me is the quality of the tools (compiler,
  159. linker, etc.)  The Draco compiler goes from source code to
  160. relocatable, optimized machine code at a rate of about 2000 lines per
  161. minute on a 5 MHz 8085. Working from one 8" floppy disk, the entire
  162. compiler (about 10,000 lines) can be rebuilt in under 10 minutes. No
  163. other compiler I've heard of for CP/M can do this (at least not and
  164. produce good code). The linker will link small programs in one quick
  165. pass, and won't load any code that isn't referenced by the program. A
  166. simple "hello there world" program is under 1000 bytes.
  167.  
  168.     Another reason that these programs exist is that I LIKE writing
  169. compilers and stuff. I'm up to about seven compilers now, the latest
  170. of which is a C compiler that should meet the ANSI draft standard
  171. (it's a huge monster written in C, but at least I was paid to write
  172. it!)
  173.  
  174.     So I've written my very own personal compiler, that does things
  175. just the way I want; why should anyone else want to use it? Put
  176. simply, the Draco package (which includes the various libraries I've
  177. built up) is possibly the most effective way to produce compact,
  178. efficient code for CP/M systems. In the past couple of years, asside
  179. from fine tuning the compiler, I've written somewhere around 20,000
  180. lines of Draco code, including the screen editor I'm typing this into,
  181. a complex graphic role-playing game, several CRT-oriented games for
  182. CP/M, ranging from the trivial to the quite complex, a database
  183. package, a text processor (with a friend), a modem program, etc. If
  184. you want to program a CP/M system, whether for fun, profit or
  185. whatever, and are willing to learn another language, then I feel that
  186. Draco is a valid choice.
  187.  
  188.     To be fair, I will end this intro with a list of things that I
  189. find are lacking in the this version of Draco:
  190.  
  191.     - essentially non-existant floating point support
  192.     - no proper modules (although Draco goes about half way to providing a
  193.         usable kind of module)
  194.     - no bit oriented type (I haven't yet fully convinced myself that this
  195.         is needed)
  196.     - error handling is considerably better than most C compilers I've
  197.         heard of, but it could still use some improvement
  198.     - object code can ALWAYS use improvement, but the improvements that are
  199.         left would either be difficult or of little actual benefit and
  200.         would probably make the compiler too big to fit on standard CP/M
  201.         systems
  202.  
  203. and, of course
  204.  
  205.     - Draco is supported only by me, and available only on the systems that
  206.         I choose to put it on (currently CP/M-80 and Commodore Amiga,
  207.         although the Amiga version hasn't been widely released yet)
  208.  
  209.             About the Draco Disks
  210.  
  211. There are 3 disks in this set:
  212.  
  213. 1 - documentation - writeups on the language, tools, programs, etc.
  214.     Also contains lots of sample Draco sources.
  215.  
  216. 2 - compiler - contains the compiler, linker, assembler, disassembler,
  217.     librarian, cross-referencer, libraries and include files
  218.  
  219. 3 - programs - contains programs which must be configured using the CONFIG
  220.     program: several games and the editor
  221.  
  222.  
  223. All material on these disks are supplied "as is" with no warrantees or
  224. guarantees of any kind. The tools, especially the compiler and linker, have
  225. been heavily used and should be fairly bug free. Some of the games have
  226. known glitches.
  227.  
  228. All material on these disks is supplied as "copyrighted shareware". This
  229. means that you can use the supplied material as you see fit, and you can
  230. give away copies of the disks to anyone, so long as this file, named
  231. "README.TXT" is included on each disk. The author retains all other rights
  232. to the software.
  233.  
  234. This software was originally intended as commercial software, and some of
  235. the writeups reflect this orientation. Due to the lack of a viable market
  236. for CP/M-80, character based software, this software is now being
  237. distributed as "shareware", in which user's are requested to send a suitable
  238. donation to the author if they feel the software merits it. Such
  239. contributions can be thought of as encouragement to the author to create
  240. and release more software and more versions of the current software.
  241. Currently under way is a conversion of the compiler to generate MC68000
  242. code. The immediate target machine is the Commodore Amiga. Soon to follow
  243. that is a comprehensive graphics adventure system originally written for
  244. CP/M-80 using the Compupro "Spectrum" graphics board.
  245.  
  246. Contributions can be sent to:
  247.  
  248.     Chris Gray
  249.     Apt. #1612, 8515 112 Street,
  250.     Edmonton, Alberta, CANADA. T6G 1K7
  251.