home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / DATABASE / DBFAST.ZIP / DBFAST
Encoding:
Text File  |  1988-08-18  |  13.8 KB  |  257 lines

  1. DATE:    June 15th, 1988
  2. TO:      ALL
  3. FROM:    MELVIN L. NORELL
  4.          Computer Information Center
  5.          Glendale, CA
  6. SUBJECT: A Review of the dBFast Compiler
  7.  
  8. Two  dBASE  III Plus compilers that have recently been announced
  9. are the FORCE III Compiler by SOPHCO  in  Boulder,  CO  and  the
  10. dBFast   Compiler   by   dBFast   Inc.  in  Issaquah,  WA.   The
  11. advertisements, product releases and promotional  literature  on
  12. both  of  these products are impressive enough that I considered
  13. ordering a copy of each product for my review and consideration.
  14.  
  15. Last Thursday, I ordered a copy of  the  dBFast  Compiler  being
  16. advertised  in  the  May  issue  of BYTE Magazine at the cost of
  17. $69.00.  Upon talking to the salesperson I was informed that the
  18. price of the compiler was now $99.00 and that it  was  "still  a
  19. good  bargain  for  the price."  I asked if the 60 day Guarantee
  20. was still included and the salesperson assured me that  it  was.
  21. I asked that the compiler be sent UPS 2nd Day Air and my invoice
  22. for  $109.00  reflects  that.   Today,  Tuesday,  I received the
  23. dBFast Compiler, one day late.
  24.  
  25. The dBFast Compiler comes on a 5-1/4" floppy diskette,  together
  26. with  a  200  page  soft-bound,  6"  x  9" reference guide.  The
  27. reference guide is relatively easy to read and the material  has
  28. been  organized  in a logical usable sequence.  The normal Table
  29. of Contents and Index cross reference the  manual  in  a  manner
  30. that you would expect any technical reference manual to do.  The
  31. reference  guide  is  sub-divided  into  the  following  logical
  32. groups:
  33.  
  34.         Getting Started
  35.         Compiling & Running Programs
  36.         Command & Functions
  37.         Using dBFast on a LAN
  38.         Compiler Error Messages
  39.         Runtime Error Messages
  40.         Index
  41.         The dBFast Editor
  42.  
  43. dBFast is a compiler for  the  dBASE  III  Plus  language.   The
  44. compiler  uses  the  concept of a memory or RAM-resident runtime
  45. library,  much  like  the  same  idea  used  in  the   MicroSoft
  46. QUICKBASIC  compiler  with the BRUN40 library.  According to the
  47. manufacturer, "dBFast's unique technology results in  incredible
  48. execution  speeds,  and compile times...".  Let me tell you that
  49. there is NOTHING unique  about  their  technology!   The  dBFast
  50. "engine,"  as commonly referred to by the manufacturer, is a TSR
  51. program that takes up 86K of RAM memory.  You need to  have  the
  52. dBFAST  engine  loaded  prior  to  doing any compilations and/or
  53. running a compiled program.  The manufacturer supplies a utility
  54. that allows  the  dBFast  engine  to  be  removed  from  memory.
  55. Included  with the package is a full-screen programmer's editor,
  56. complete with pull-down menus and user configurable options.  At
  57. first glance, the editor appears to be  feature  rich  and  well
  58. thoughtout; however, "I need to learn another editor like...I'll
  59. stick  with BRIEF!"  Sixty pages of the reference guide document
  60. the usage of the editor.  I did not spend any time reviewing the
  61. editor program supplied with dBFast, however, I  did  read  that
  62. portion  of the manual that deals with the compiler, the command
  63. language and functions.
  64.  
  65. dBFast does not support the ANSI Terminal Protocol.   Therefore,
  66. you  must  run  the  system on a standard IBM or 100% compatible
  67. computer.  This causes a problem right away for our shop because
  68. we do have several customers that  do  use  compatible  machines
  69. that  are  not  100%  IBM  compatible.   Listed  below  are  the
  70. specifications listed for the dBFast compiler.
  71.  
  72.         1 Billion       Max number of records
  73.         2 Billion       Max number of bytes / dbf
  74.         4000            Max number of memory variables
  75.         65535           Memory available for memory variables
  76.         4000            Max number of bytes / record
  77.         128             Max number of fields / record
  78.         254             Bytes / Character field
  79.         8               Bytes / Date field
  80.         1               Byte / Logical field
  81.         N/A             Max Editor Capacity for Memo fields
  82.         19              Bytes / Numeric field
  83.         10              Max number of open databases
  84.         7               Max number of open indexes / dbf
  85.         64              Max number of open format files
  86.         512             Max command line length
  87.         65535           Max size of Program File (.PRG)
  88.         196605          Max size of compiled file
  89.         128             Max number of procedures / compiled prg
  90.         20              Max number of program loop nesting lvls
  91.  
  92. dBFast Inc. allows you  to  give  away  any  programs  that  are
  93. created  using the dBFast compiler.  They also allow you to give
  94. away the dBFast engine and the program that removes  the  engine
  95. from  memory  (a  good  idea since none of the compiled programs
  96. will work without the engine.)
  97.  
  98. In evaluating any new product, I normally place a  big  emphasis
  99. on  the working environment; that is, how much of an impact will
  100. the  product  cause  and  demand  from  our   established   shop
  101. procedures.   To  give  dBFast a fair and unbiased evaluation, I
  102. decided to parallel  the  development  of  a  Church  Management
  103. Information  System that our shop is currently doing for a local
  104. non-profit organization.  I would  attempt  to  generate  normal
  105. unmodifed  dBASE  III  Plus  code  for dBFast and the same thing
  106. would be done for DBXL/QUICKSILVER.  We normally use GENIFER  to
  107. generate  the  code  for  the  systems  that  we develop and the
  108. GENIFER SOLUTION to clean up programs for DBXL/QUICKSILVER.   If
  109. dBFast is as compatible and wonderful as the manufacturer claims
  110. it  to  be,  then  this  compiler  should  be able to accept the
  111. unmodified code generated directly out of GENIFER.
  112.  
  113. My story  begins  with  an  actual  Screen  Maintenance  Program
  114. generated  by  the  GENIFER Applications Generator.  The program
  115. was generated as a normal file containing the usual main program
  116. followed by the procedure modules.  Two copies  of  the  program
  117. were  made--one  for  dBFast and the other for DBXL/QUICKSILVER.
  118. The first copy of the program was split into two separate files.
  119. One file contains the main program and I called  it  MLMAIN.PRG;
  120. the  other  file  contains the procedure modules and I called it
  121. MLMAINP.PRG.  A "SET PROCEDURE TO MLMAINP" command was added  to
  122. the main program so that it could recognize its procedure file.
  123.  
  124. dBFast,  like  QS,  has  the  capability  of  compiling external
  125. Program and Procedure files.  The compiler handles this function
  126. automatically, and it is the only  mechanism  available  to  the
  127. programmer  to compile a large multi-program application.  There
  128. are no provisions for the  independent  compilation  of  various
  129. programs  and  no  link  step  is  ever used.  dBFast produces a
  130. running .EXE file as the result of the compilation.
  131.  
  132. My first attempt at compiling the MLMAIN program  proved  to  be
  133. unsuccessful.   I received 86 error messages; all about a SYNTAX
  134. ERROR with "ENDIF" commands.  Listed below  each  error  message
  135. was  the  cryptic  note: "An error occurred while trying to open
  136. the .FRM form file LINE #: xxx."  Humm?  My program doesn't  use
  137. any  .FRM  form files!  I would have to check the PROCEDURE File
  138. to see which statement(s) were causing the problem.  At first, I
  139. thought that the problem could be due to the fact  that  GENIFER
  140. generates  a  comment  after each ENDIF command.  I proceeded to
  141. remove the comment from each and every ENDIF  in  the  PROCEDURE
  142. file.   Attempt  two  to  compile the MLMAIN program yielded the
  143. same results.  This time I removed the comments from each ENDDO,
  144. which GENIFER also provides.  Attempt three  to  compile  failed
  145. also.   By  this  time,  I am wondering why would a program that
  146. works in dBASE III +  without  errors  doesn't  compile  with  a
  147. compiler that claims to be dBASE III + compatible.
  148.  
  149. Earlier,  in  reading  the  manual, I had remembered that dBFast
  150. limits the number of program loop nesting levels to twenty (20).
  151. Now, I know for sure that at the most, GENIFER only issues three
  152. (3) nest levels for IF/ENDIF commands.  I would  hope  that  the
  153. compiler  designer  and  coder(s)  did  not make the traditional
  154. mistake of counting IF  statements  and  quit  after  the  20th.
  155. (This  is  a  common  problem  found  in compiler design classes
  156. taught at the university level)  To verify that this was not the
  157. case, I went back  to  the  MLMAINP  PROCEDURE  File  and  began
  158. counting  IF/ENDIF  blocks.   I  couldn't  believe  it when upon
  159. counting the 20th IF/ENDIF block, the very  next  block's  ENDIF
  160. was  the  first  line statement flagged by the compiler to be in
  161. error.  The ENDIF statement of every IF/ENDIF block  after  that
  162. was  also  flagged by the compiler to be in error.  SHAME DBFAST
  163. INC.  --  YOU  NEVER  TESTED  YOUR  COMPILER  WITH  ANY  NORMAL,
  164. REASONABLY SIZE DBASE PROGRAM.
  165.  
  166. With  this  FATAL error in the dBFast compiler, it is impossible
  167. for me to continue my review of the product,  and  consequently,
  168. prompted  me to pack dBFast and send it back from whence it came
  169. from.  End of my review story.
  170.  
  171. Since I did  take  the  time  to  read  and  review  the  dBFast
  172. reference  guide,  I'll  like  to give you my honest opinion and
  173. comments on the dBFast Compiler product.  First,  I  think  that
  174. dBFast  Inc.  has attempted to develop its compiler for a target
  175. market that does not include the business program developer.  It
  176. appears that dBFast is targeted  at  the  casual  dBASE  program
  177. developer,  who strictly codes in dBASE and never uses any other
  178. language to interface to his/her program.  Second, this  product
  179. has  been developed in a hurry to attempt to capture the growing
  180. dBASE compiler market, and consequently, FATAL errors  like  the
  181. one  that  I  encountered  are never caught, because the company
  182. wants to get the product "out the door."   Third,  many  of  the
  183. commands  and  functions  implemented  by  dBFast are limited in
  184. scope and prevent the applications developer  from  implementing
  185. sophisticated  programs.   The  rest  of the text in this review
  186. discusses the commands  and  functions  as  implemented  by  the
  187. dBFast Compiler.
  188.  
  189. dBFast  imposes  some  restrictions which normally present minor
  190. problems to the program developer.  All program files must  have
  191. the  extension  .PRG.   If  .MEM  files are used in SAVE/RESTORE
  192. operations, then the extension can only be .MEM.  All files used
  193. with extension .PRG, .NDX, .FMT, .LBL and .FRM must  be  on  the
  194. same  drive  and  sub-directory  as  the  .PRG file that you are
  195. attempting to  compile.   You  must  have  at  least  one  space
  196. following  a  command.   There  must  not  be  a space between a
  197. function and its specification argument.
  198.  
  199. dBFast limits the user to 128 called procedures within a  single
  200. set  of programs.  This means that it doesn't matter if you have
  201. used the SET PROCEDURE command or not, each "DO program"  counts
  202. as a separate procedure.  In theory, you are limited to 128 sub-
  203. programs per compiled module.  dBFast overcomes this restriction
  204. by  giving the user the CHAIN command, which allows one compiled
  205. module to call another up to one nesting level deep.
  206.  
  207. The SET FILTER TO command cannot use the & macro substitution to
  208. set the filter expression.  This is a SERIOUS  LIMITATION  which
  209. creates massive amounts of programming work to code around.  All
  210. of  the  programs generated by GENIFER have a generalized Filter
  211. routine which allow the user to  set  any  filter  condition  or
  212. conditions.   This limitation of the dBFast compiler would cause
  213. us a substantial amount of reprogramming work.  In addition, the
  214. SET FILTER TO command is only supported in the mode in which the
  215. expression is stated at compile time... Auuuugggg!
  216.  
  217. Index files opened with the USE...INDEX or SET INDEX TO commands
  218. must be present when the  program  is  compiled.   The  compiler
  219. actually  opens  the index file and gets the index expression at
  220. compile time rather than at runtime.  This means that  you  have
  221. to  have  your .DBF and .NDX files within the sub-directory that
  222. you are compiling from.  To overcome this unusual implementation
  223. of these commands, dBFast has the SET NDXEXP FOR <index  number>
  224. TO <index expression> command.
  225.  
  226. The  &  Macro  Substitution  function  cannot be used to replace
  227. entire commands or  modifiers  in  command  lines.   The  dBFast
  228. compiler  treats  variables  as  literal variables.  It does not
  229. expand a macro...it treats the variable as a variable.  Embedded
  230. Macros are not supported.  Macros that  are  actual  expressions
  231. and  not  a  single  variable  are  not supported.  This SERIOUS
  232. LIMITATION of the & Macro Substitution function  in  my  opinion
  233. makes the dBFast Compiler TOTALLY USELESS.
  234.  
  235. On  the  LAN  side of things, dBFast does implement the standard
  236. RLOCK(), LOCK(), FLOCK(), and UNLOCK() commands found  in  dBASE
  237. III  Plus.  dBFast also implements a SET AUTOLOCK ON/OFF command
  238. similar to QS and an RLOCKRE (Rlock with a Re-Read).
  239.  
  240. In conclusion, I like to offer the people at dBFast Inc.  a  bit
  241. of  free  advise...Pull  this compiler off the market and get it
  242. tested and upgraded to a level where companies like mine,  doing
  243. real  business  applications,  can  begin  making use of it.  It
  244. makes no sense to release a premature product as in the case  of
  245. dBFast,  to  have  people like myself attempt to use it and then
  246. find that its performance and features are poor.  Also, get  rid
  247. of  the  handling fee that you charge on returns.  It only makes
  248. me think that dBFast doesn't believe in what they  are  selling.
  249. On  the  bright  side, I think that the dBFast compiler offers a
  250. unique approach at solving the speed problem and the  .EXE  file
  251. size  problem  encountered  with  both  QS  and  CLIPPER.  Maybe
  252. WORDTECH should consider the concept of implementing a  run-time
  253. library  module that is memory resident at execution time.  What
  254. do you think?
  255.  
  256. -FIN-
  257.