home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / educ / port1.doc < prev    next >
Encoding:
Text File  |  1988-05-03  |  33.2 KB  |  856 lines

  1. Subject: Major Ada porting technical report
  2. Date: Fri, 15 May 87 08:25:36 EDT
  3. From: Lt Col Francis L Falgiano III <falgiano@mitre.ARPA>
  4.  
  5.  
  6.   The following is a paper presented at the WWMCCS application
  7. and systems software committe meeting.  The authors want to
  8. share some of their experiences with other Ada users.
  9.  
  10.  
  11.   TRANSPORTING A MAJOR ADA APPLICATION
  12.  
  13.  
  14.                        Prepared by:  Joe Tenney
  15.                                      Don Whiteley
  16.                                      Honeywell
  17.                                      Federal Systems Inc.
  18.  
  19. Honeywell Federal Systems Inc.
  20.  
  21. Project Team
  22.  
  23. J. Tenney
  24. D. Whiteley
  25.  
  26. Honeywell ADA Development Group
  27.  
  28. E. Kearns
  29. D. Ward
  30. W. Munsil (Subcontractor APSE, Inc.)
  31.  
  32.  
  33.  
  34.                    SAC Airborne Developers
  35.  
  36.  
  37. Providing Project Support
  38.  
  39. Cpt. G. Butcher
  40. Lt. T. Brooke
  41. Lt. E. Schulz
  42. Ssgt. C. Rasmussen
  43.  
  44.  
  45.  
  46. I.      MIMS REHOSTING PROJECT
  47.  
  48. I.1.    Rationale
  49.  
  50. DOD Directive 5000.31
  51.  
  52. ..."The Ada programming language shall become the
  53.  single, common computer programming language for
  54.  defense mission-critical applications.  Effective
  55.  1 January l984 for program entering advanced
  56.  development and 1 July l984 for programs entering
  57.  full scale engineering development, Ada shall be
  58.  the programming language.".....
  59.  
  60.                            Undersecretary of Defense Delauer
  61.                                           10 June l983
  62.  
  63.  
  64. The Delauer pronouncement considers Ada to be more than
  65. just another high level language.  Ada is considered to
  66. be a full fledged software engineering environment that
  67. translates into simplified large-scale software
  68. development signaling an end to machine dependence.
  69.  
  70. The Ada compiler system is to be reliable, easily
  71. maintainable, and portable.  Although reliability and
  72. maintainability would be a function of abstraction and
  73. design, the portability criteria is of prime import in
  74. providing a universal computer language.
  75.  
  76. Ada development at Honeywell dates back to the original
  77. design procurement process of the Department of
  78. Defense.  The language finally accepted as a result was
  79. the version proposed by Honeywell.
  80.  
  81. I.2. Introduction
  82.  
  83. On 25 November l986, Honeywell Federal Systems Division
  84. and the Headquarters Strategic Air Command Airborne
  85. Division (Offutt AFB, NE), agreed to attempt porting
  86. the Mobile Information Management System (MIMS) to a
  87. Honeywell DPS90 platform.  Previous attempts by Vendors
  88. other than Honeywell to rehost MIMS were unsuccessful
  89. due to the maturity level of their compilers.
  90.  
  91. The release of the MIMS software package to Honeywell
  92. was projected to accrue benefit to the government by
  93. gaining experience in porting Ada code, demonstrating
  94. the protability of mission-critical command and control
  95. software, and the usability of Honeywell's Ada
  96. environment.  Honeywell was presented with an
  97. opportunity to test their new GCOS8 Ada compiler using
  98. the complex programming constructs contained within
  99. MIMS.
  100.  
  101. I. 3. MIMS
  102.  
  103. MIMS is a full featured relational information
  104. management system written entirely in the Ada
  105. programming language and containing 66,000 plus lines
  106. of code (25,000+ lines of Ada source statements).  It
  107. is being developed to provide a productive environment
  108. for the development of battle management application
  109. programms to support SAC's Post Attack Command and
  110. Control System (PACCS).  It provides the capability to
  111. describe and manipulate data as relations, without user
  112. concern for physical links and pointers.  It also
  113. provides the capability to write applications programs
  114. using either Ada or a fourth-generation data management
  115. language patterned after ANSI standard SQL.  This
  116. language, called Extended-SQL, contains all the
  117. commands necessary to:
  118.  
  119.         1)  Describe, manage, and manipulate relations.
  120.  
  121. 2)  Perform selective queries against single or
  122.     multiple relations.
  123.  
  124.         3)      Develop applications programs.
  125.  
  126. 4)      Describe side-effects for any attribute.  A side-
  127.      effect is a procedure that executes automatically
  128.      any time its associated attribute is changed.  A
  129.      side-effect procedure can contain any statements
  130.      allowed in an application program.
  131.  
  132. MIMS has two major components:  a data management and a
  133. language processor.  The data management component
  134. provides the single point of access to the data base,
  135. insuring integrity, security and access protection of
  136. the data.  The language processor interprets sequences
  137. of Extended-SQL commands into requests to the data
  138. management component.
  139.  
  140. I.4.    Host System
  141.  
  142. The host/development system is a ROLM MSE-800 Ada Work
  143. Center with 8mb of memory and 277mb of disk storage.
  144. The ROLM MSE-800 is a ruggedized version of the Data
  145. General MV80000 system.  It runs Data General's AOS/VS
  146. operating system revision 4.01 and the ADE 2.3 version
  147. of the ROLM/Data General Ada compiler.  The terminals
  148. used on this system were normally Dasher 200's and
  149. Dasher 460's.
  150.  
  151. I.5.    Target System
  152.  
  153. The target system is a Honeywell DPS90 with 96mb of
  154. memory and 5000+ mb of disk storage.  The DPS90 is an
  155. NEC1000 sold under the Honeywell label in the United
  156. States.  It runs the pre-release version of Honeywell's
  157. GCOS8-SR3000 operating system and the pre-validated
  158. version of Honeywell's virtual Ada compiler.
  159. Honeywell's Ada compiler is a version of the Dansk
  160. compiler re-hosted on a Honeywell DPS8, 88, and 90
  161. level system.  The target terminal was Honeywell's
  162. VIP7801 in asynchronous/character mode.
  163.  
  164. I.6.    File Conversion
  165.  
  166. The first task in the porject as to convert the source
  167. tapes created on the Data General to Honeywel format.
  168. To acomplish this a physical record dump of the tape
  169. was obtained to ascertain its format.  Once the record
  170. format was defined, a 'C" program to do the actual
  171. conversion from tape to disk source file was written.
  172. Although some problems were encountered in source lines
  173. spanning physical records, this protion of the project
  174. was completed within 30 man-hours.
  175.  
  176. I.7.    Initial Functionality Testing
  177.  
  178. The next step was to determine the ability of our
  179. compiler to successfully compile MIMS.  For this we
  180. chose a sample timing test and the MIMS Tools package.
  181.  
  182. The timing tests compiled and executed without any
  183. problem.  The results of the timings showed a mixed
  184. view.  We saw from these reports that file preparation
  185. (e.g. opening, closing, and creating), was
  186. significantly slower on the Honeywell system due to the
  187. overhead of a large operatinng system and a large file
  188. structure.  On the other hand, I/O speeds were greatly
  189. improved on the Honeywell, due largely to the Software
  190. Disk Cache buffering facility.
  191.  
  192. Compilation of the tools package proceeded with one
  193. small complication.  The heap size test failed when
  194. attempting to allocate over 1mb of heap space.  This
  195. problem was caused by memory limitations on programs
  196. generated by Honeywell's current validated Ada
  197. compiler.  Once run on the new, then un-validated
  198. virtual compiler, the heap size could be grown for
  199. beyond the needs of MIMS.
  200.  
  201. I.8.    System Dependent Routines
  202.  
  203. Adjudging no major problems in the test compilations,
  204. we proceeded headlong into the full port of MIMS.  The
  205. first item attacked aws identifying the system
  206. dependent characteristics of MIMS.  After talking with
  207. the MIMS developers and previewing the source code, we
  208. identified the following areas:
  209.  
  210. 1)  A Data General Package named TTY_IO had been used
  211.     to perform I/O to the terminals.  This allowed
  212.     control functions that would have been stripped by
  213.     Data General's TEXT_IO routines to be passed
  214.     between terminal and program.  MIMS depends heavily
  215.     on the use of function keys an control characters,
  216.     so some new way had to be found to tersmit this
  217.     information on the Honeywell system.
  218.  
  219. 2)  A Data General package named SYSTEM-CALLS was used
  220.     to perform file maintenance (e.g. file copying and
  221.     renaming).  No corresponding routines currently
  222.     existed on the Honeywell system.
  223.  
  224. 3)  A Data General package named CURRENT_EXCEPTION was
  225.     used to return the name of the last exception
  226.     encountered.  This would be very useful in
  227.     identifying error returns from various routines and
  228.     was used extensively throughout MIMS.  No
  229.     corresponding facility existed on the Honeywell
  230.     system.
  231.  
  232. 4)  The MSE-800 used no front-end communications
  233.     processor, which enticed the MIMS developers to
  234.     take total control of all terminal I/O on a
  235.     character-by-character basis as no buffering of
  236.     data was done.  This included parsing each
  237.     character input for validity, field placement,
  238.     control function execution, and echo printing.  The
  239.     Honeywell system used a DN8 communications
  240.     processor, which, by default, buffered the I/O and
  241.     sent the buffer only upon receipt of certain
  242.     control information.  Although the line could be
  243.     configured to transfer data a character at a time,
  244.     the amount of system overhead required to
  245.     accomplish this form of I/O would be prohibitive in
  246.     a large, multi-user environment.
  247.  
  248.  
  249. 5)  A Data General Math package contained on their Ada
  250.     system library had no equivalent on the current
  251.     Honeywell Ada library.
  252.  
  253. The protability aspect of MIMS was well thought out by
  254. its designers.  All of the system dependent routines
  255. were called from individual packages, which renamed
  256. these routines for use by all other MIMS routines.
  257. This made the task of isolating and changing these
  258. routines far less complex than would have occurred if
  259. these calls were spread through all 149 source files.
  260. The function keys and cursor control routines were also
  261. isolated and easily identified.
  262.  
  263. Our initial perception was that none of the system
  264. dependencies would be easily resolved and some I/O and
  265. system calls might present a major stumbling block.
  266. The CURRENT_EXCEPTION routine was easy to dummy out by
  267. simply returning a default string of all calls to this
  268. function.  However, we found later that this made
  269. troubleshooting much more difficult.  Eventually the
  270. Honeywell Ada development group in Phoenix developed a
  271. package similar to CURRENT_EXCEPTION which returned the
  272. name of the exception, and the package the exception
  273. was defined in.  Due to the exception being stored in a
  274. stack in Honeywell's impementation, this routine could
  275. not be made compatible with the one from Data General,
  276. but did prove helpful in isolating several problems.
  277.  
  278. To repalce the Data General math package we obtained a
  279. copy of a math package contained on the Ada repository.
  280. This package surprisingly had all the routines
  281. necessary to satisfy the calls from MIMS, and even
  282. returned values in the same format.  All that was
  283. needed was to change the names of some of the called
  284. routines in the single MIMS interface package.
  285.  
  286. The file maintenance interfaces proved to be a more
  287. difficult task, as no current direct link to
  288. Honeywell's file system existed from Ada yet.  However,
  289. the only ones  that could not be accomplished by an Ada
  290. routine were the renaming and physical copying of a
  291. file.  Discussion with the MIMS developers led us to
  292. the conclusion that these features were only used on
  293. rare occasions and could easily be disabled.
  294. I.9.    Terminal I/O
  295.  
  296. That left us with the major problem of terminal I/O.
  297. There were several question marks in this area and a
  298. multiplicity of ways to approach the subject.  Our
  299. choice was to attempt to use TEXT_IO to accomplish
  300. this, and to suggest to the Ada development group any
  301. minor modifications we may need in TEXT_IO routines to
  302. allow us to successfully complete the task.  If the
  303. TEXT_IO routines could be modified to support
  304. unfiltered, full screen I/O, it would allow future
  305. users a much easier method of accomplishing this same
  306. purpose.
  307.  
  308. Our first test was to write and I/O echoing routine
  309. which showed the user the ASCII codes corresponding to
  310. the input and then echoed back the input.  In this
  311. fashion we could test successful transfer of control
  312. characters.  We were pleasantly surprised to find out
  313. that Honeywell's TEXT_IO package could already pass
  314. control functions back and forth successfully to the
  315. VIP7801, negating any need for modification in this
  316. area.
  317.  
  318. Our next step was to modify the MIMS terminal I/O
  319. packages to use TEXT_IO and the VIP7801 control
  320. sequences.  We then needed an application to invoke the
  321. routines in these packages to perform the I/O.  The
  322. MIMS developers, being more familiar with what they
  323. needed to see, wrote an application for us, which
  324. exercised the terminal's input and output abilities.
  325.  Running this program brought some errors to light.
  326.  
  327. 1)  The 1280 byte TEXT_IO output buffer overflowed when
  328.     using special cursor control and screen formatting
  329.     characters.  The Ada development group had to
  330.     enlarge the size of the output buffer to correct
  331.     this problem.
  332.  
  333. 2)  MIMS uses reverse video to outline viewports and
  334.     other pertinent information on the screen.  When
  335.     the reverse video portion needed to be erased, they
  336.     merely wrote blanks over these locations on the
  337.     Dasher terminals to accomplish this.  The VIP7801,
  338.     however, stored the starting and stopping positions
  339.     for reverse video as control information in the
  340.     VIP. It required specific reset commands to these
  341.     positions to turn off the reverse video.  This was
  342.     difficult to accomplish due to the number of places
  343.     reverse video was used, and the fact that they had
  344.     designed no facility to store all viewports
  345.     currently displayed, making them difficult to find
  346.     and erase, short of clearing the entire screen.
  347.     This same problem also occurred to a lesser degree
  348.     with underlininng and blinking.  It took over two
  349.     man-weeks to clean up this area alone.  In
  350.     retrospect, it would have been better to use the
  351.     VIP7801 graphics features as they would have been
  352.     more compatible with the MIMS code than the special
  353.     screen formatting.
  354.  
  355.         3)      Buffer transmissions to the terminal were being
  356.                 terminated with a carrige return/line feed, whi
  357.                 caused incorrect cursor positioning when
  358.           requesting following input.  The Ada development
  359.                 group modified the TEXT_IO routines to eliminat
  360.                 this.
  361.  
  362. Although we had anticipated serious problems in
  363. buffering the terminal I/O, after correcting problems
  364. 1) and 3) above we could not find any cases where it
  365. caused us major anomalies.  We did notice system status
  366. messages that were time dependent were queued until the
  367. buffer was transmitted, but changing these messages to
  368. PUT_LINES eliminated that problem.
  369.  
  370. I.10. Compilation
  371.  
  372. Once the system dependent routines were either replaced
  373. or had work-arounds, we proceeded with the compilation
  374. of the 68 packages that comprise MIMS.  We started by
  375. stringing all the compilations together into a single
  376. run, but soon found that we were wasting a considerable
  377. amount of time due to errors encountered in earlier
  378. compilations.  It proved more efficient to step through
  379. the compilations one at a time during this phase.
  380.  
  381. Several of the errors we encountered were due to
  382. compilation order, which had to be resolved before we
  383. could continue.  The complexity of this problem when
  384. dealing with 149 source files increased the time spent
  385. resolving the correct order.  A later examination by
  386. the MIMS developers uncovered an incorrect file order
  387. on the original source tape they had given us.
  388.  
  389. The next order of business was to trouble-shoot the
  390. remaining compiler errors and aborts.  We knew that
  391. these packages, short of our changes, had successfully
  392. compiled and executed on another system.  Therefore the
  393. problems we were currently encountering could be lumped
  394. into three categories.
  395.  
  396.         1)  Errors in our modifications.
  397.  
  398.         2)  Errors in MIMS code not detected by the Data
  399.          General compiler.
  400.  
  401.         3)  Errors caused by the Honeywell compiler.
  402.  
  403.         We, needless to say, encountered errors in our
  404. modifications which had to be resolved.  We also found two
  405. instances where the Honeywell compiler detected an incorrect
  406. matching of a formal private type to an actual limited type
  407. which the Data General compiler had not detected.  This is
  408. in violation of a rule specified in section 12.3.2. of
  409. MIL-STD-1815A.
  410.  
  411. We found several compile time errors and aborts caused
  412. by our compiler which are enumerated in an addendum to
  413. this report.  By working closely with the Ada
  414. development group we were able to either correct, or
  415. work-around, all of these problems.  Once all packages
  416. compiled successfully, a timed run showed a compile
  417. time of 2 hours, 48 minutes for all 68 packages, a
  418. considerable improvement over the smaller MSE-800
  419. system.
  420.  
  421. I.11. Elaboration and Execution
  422.  
  423. The first attempt at elaboration brought to light a
  424. difficult and too lightly regarded area of this
  425. project, the run-time errors.  We had weighed the
  426. possibilities of the compiler generating incorrect
  427. code, but had under estimated the complexity of these
  428. problems and the time required to resolve them.  The
  429. bulk of the time we spent on this project was involved
  430. in this area.  By use of a master mode debugger and
  431. debug statements, we set to work on the long, tedious
  432. process of identifying these errors.  A symbolic
  433. debugger would have been a great boon during this
  434. portion of the project.
  435.  
  436. A lot of time was spent attempting to determine and set
  437. an elaboration order.  The Data General system insured
  438. all "WITH" dependencies for a package were elaborated
  439. before attempting to elaborate the given package.  In
  440. most cases this prevented the need for PRAGMA ELABORATE
  441. statements, unless the order needed to be changed.  The
  442. Honeywell system elaborated by an order dependent on
  443. the unit number in the library, which changed whenever
  444. that unit was re-compiled.  To avoid this problem we
  445. had to place PRAGMA ELABORATE statements into the
  446. specification and body of every package for al its
  447. dependencies.
  448.  
  449. The other run-time errors we encountered during
  450. elaboration and execution are enumerated in an addendum
  451. to this report.  These problems were much more severe
  452. than the same problems would have been if encountered
  453. during a development phase, as every problem had to be
  454. approached from a total system perspective and worked
  455. back to the failing code.  Each step along this path
  456. required insertion of debug statements,
  457. re-compilations, re-linking, and execution; making each
  458. step a very time consuming process.  At times during
  459. elaboration it left one with a feeling of attempting to
  460. chop one's way out of a forest.  Each time a tree was
  461. felled, another was encountered just behind it.
  462. Persistence and perseverance did pay off though.  On
  463. February 12 we were able to fully elaborate MIMS, after
  464. two months of effort.
  465.  
  466. Once fully elaborated we encountered fewer run-time
  467. errors in the remaining code, due in part to
  468. corrections made on the compiler.  Some minor
  469. modifications to our changes were required in the area
  470. of terminal I/O, but otherwise we were mostly ready to
  471. proceed to the next step of executing an ESQL
  472. application to demonstrate full functionality.
  473.  
  474. I.12. Full Functionality Testing
  475.  
  476. For this the MIMS developers working with us developed
  477. an unclassified demonstration program, which creates a
  478. relational database and performs various retrieval and
  479. update functions to exercise the majority of MIMS code.
  480. We installed and ran this application with few
  481. problems, but we were not totally pleased with its
  482. performance on the DPS88.  Response times were only
  483. slightly improved over the MSE-800 and, in some cases,
  484. actually slower.  Considering the power differences
  485. between the two processors, we initiated a study to
  486. determine why MIMS was running slower on the DPS88.
  487.  
  488. A trace of file opens and closes soon made it very
  489. clear where our slowdown was occurring.  In a 15 minute
  490. period of elaboration and execution we had over 2200
  491. lines of file opens and closes.  On the MSE-800 they
  492. are limited to a maximum of approximately 200 files
  493. open and therefore opened and closed files quite
  494. profusely.  This cost them very little on their small
  495. system, but on our system we were opening files almost
  496. six times slower than they were and it was hurting the
  497. system performance sorely.
  498.  
  499. Under SR3000 users are allowed to have in excess of
  500. 2000 files open.  One possible way around our
  501. performance problem was to leave all the MIMS files
  502. open, closing them only upon termination and therefore
  503. avoiding the overhead.  At the time, Ada would only
  504. support in the proximity of 200 files due to the buffer
  505. requirements for these files.  Working with the Ada
  506. development group, we were able to devise a method to
  507. allow Ada users to allocate a number of files up to the
  508. system limitation.
  509.  
  510. The performan ce improvement in MIMS caused by this
  511. change was dramatic.  We saw our response time improve
  512. on the order of 3 to 8 times.  Elaboration time, which
  513. was taking over 9 minutes, was now under 3.  Although
  514. we saw other areas for improvement, we felt the
  515. performance was now at an acceptable level and further
  516. efforts in this area were beyond the scope of our
  517. project.
  518.  
  519. Once we had proven acceptable performance on the DPS88
  520. we transferred the executable file, libraries, and the
  521. applications files to a development DPS90 system at
  522. LCPD. Our execution on this system ran without error
  523. and showed approximately a 30% improvement in
  524. performance over the DPS88.  This was the final step in
  525. the port of MIMS to a Honeywell DSP90 system.
  526.  
  527.  
  528. On March 16, l987 we installed the final demonstration
  529. application and on March 18 this demonstration ran to a
  530. successful competion.  The entire project, including
  531. functionality testing, had spanned nearly four months
  532. and included over three months actual work.  Not
  533. including support the Ada development group and the
  534. MIMS developers supplied on this project, the two
  535. project analysts spent approximately 1500 man hours to
  536. accomplish the port.  This number does reflect time
  537. spent in isolating compiler errors and thus may not be
  538. a valid representation of total time required to port
  539. other Ada applications.  We would estimate that 15
  540. percent of the total man hours were actually spent
  541. converting MIMS code.
  542.  
  543.  
  544. I.13. SUMMARY
  545.  
  546. This project represented one of, if not the first, port
  547. of a major Ada application from one hardware platform
  548. to another.  As such, it represents a milestone in the
  549. proof of the portability concept of Ada programs.  It
  550. is our feeling that even given the youth and problems
  551. encountered in our compiler, the time spent to port
  552. MIMS was quite reasonable for a major application.
  553.  
  554. At the outset of the project we were somewhat concerned
  555. by articles and papers we had read concerning the level
  556. of difficulty of the Ada programming language.
  557. However, we found as we proceeded through the project,
  558. these concerns were simply unfounded.  Although both
  559. analysts on the project had several years of data
  560. processing experience, and accessability to the
  561. Honeywell and MIMS Ada developers, both had a minimum
  562. of Ada training in preparation for this activity.  We
  563. found that Ada was both flexible and versatile,
  564. allowing constucts for the beginning programmer, as
  565. well as the advanced.  Ada programs can also be easily
  566. understood when well written, however, as with any
  567. language, there is well written and poorly written
  568. code.
  569.  
  570.  
  571. Most of MIMS was well written and well thought out,
  572. making it much easier to port.  Their method of
  573. constraining all system dependent calls to a few
  574. packages made finding and replacing them a much easier
  575. task.  It will be difficult to avoid using system
  576. dependent routines in any major application, but care
  577. in their use and placement will enhance portability.
  578.  
  579. Some of the naming conventions were overused and made
  580. debugging somewhat more difficult as the same name was
  581. used for different purposes in several routines.  The
  582. USE statement also caused difficulty during debugging
  583. and our opinion was that in most circumstances it
  584. should be restricted to system or common package names.
  585.  
  586. The availability of tools currently is of a concern.
  587. The compilers appear to be too young and too little
  588. used to be equipped with all the hooks and handles
  589. that, for example, COBOL compilers have.  Flux within
  590. the specifications os SQL has slowed down efforts to
  591. adopt an Ada/SQL interface to a system dependent
  592. database.  Other interfaces and tools may be slow in
  593. coming until the suppliers see a more concerted
  594. direction in the Ada community.
  595.  
  596. We did encounter several compiler errors.  However,
  597. there is no error-free compiler of any language on the
  598. market today.  This is a very important aspect to
  599. consider in any porting effort.  Any project of this
  600. nature must plan on encountering a certain number of
  601. compiler errors, and allowances in time schedules made
  602. accordingly.  Although we were able to find methods of
  603. coding around most errors, there may be problems that
  604. arise which cannot be avoided and require a correction
  605. to the compiler.  These errors should become less
  606. common as the Ada validation suite becomes more
  607. stringent, but in all likelihood will still remain a
  608. nemesis to other porting projects.  Problems of this
  609. nature may be minimized for applications requiring a
  610. base on multiple hardware platforms by keeping program
  611. constructs simple, and by avoiding use of "fringe"
  612. areas in the language.
  613.  
  614. Ada development appears to be at a critical stage. Now
  615. that some of the larger companies have fielded an Ada
  616. compiler there appears to be some reluctance in upper
  617. management to invest resources in this area until a
  618. more defined path is set.  The attitude in the
  619. commercial world is of mild interest, but nobody
  620. appears to be ready to make a mad dash toward writing
  621. new applications in Ada.  They appear to be watching
  622. the federal sector to see how committed they really
  623. are.  Currently their view is of strongly worded
  624. directives for new development in Ada, immediately
  625. followed by exemptions to develop in other languages.
  626. There appears to be a lot of in-fighting in the federal
  627. community on their commitment to Ada, and until these
  628. are resolved and a firm direction set, one may not see
  629. much movement in the commercial sector towards Ada, and
  630. thus only limited support for an Ada environment
  631. supplied by the major manufacturers.
  632.  
  633. The federal sector, and especially the military, have
  634. to spearhead any push towards Ada.  Without this
  635. impetus, Ada will likely die on the vine in the same
  636. manner as JOVIAL.  Not to allow Ada to flower into a
  637. major language environment would be to deny all the
  638. reasons it was originally developed and would mortally
  639. wound any chance to language standardization for the
  640. future.  In our opinion, Ada has the necessary
  641. fundations to become a base for most future development
  642. efforts and deserves to be carefully examined and
  643. nurtured to bring about its successful fruition.
  644.  
  645.  
  646. II.  Problems Encountered with the Honeywell
  647.         Virtual Ada Compiler During the MIMS Project
  648.  
  649. 1.      If a deferred type is declared in a package
  650.      specification, and another package which references
  651.      that type is compiled before the full type declaration
  652.      in the body, the compile may abort in Pass 6 with an
  653.      "Error 27 - Unexpected Data Structure".
  654.  
  655.         Avoidance:  Put the full type declaration in the
  656.                           Package Specification.
  657.  
  658.         Correction: None
  659.  
  660.  2.     Using "RENAMES" to define an internal element of a
  661.      generic record type in another package may cause the
  662.      compilation to abort with a numeric eror abort.
  663.  
  664.         Avoidance:  Delete the "renames" clause and use the
  665.                  full field name, or if it's an "in" only
  666.                  parameter being "renamed", simply make the
  667.                  new name a local object.
  668.  
  669.         Correction: None
  670.  
  671. 3.      Compilations occasionally abort with a storage error
  672.      abort.
  673.  
  674.         Avoidance:  Re-submit the compile.
  675.  
  676.         Correction: Correction to the operating system dynamic
  677.                  memory manager.
  678.  
  679. 4.      Instantiating a dynamic array in a generic package may
  680.      cause a numeric error in the package currently
  681.      elaborating.  Problem seems to only occur in large or
  682.      complex compilations.
  683.  
  684.         Avoidance:  Create multiple generic packages, each
  685.                  containing a static array.
  686.  
  687.         Correction: None
  688.  
  689. 5.      Constraints on generic arrays may not be passed when
  690.      using "Renames" causing a constraint error when
  691.      attempting to access an element in the array.
  692.  
  693.         Avoidance:  Delete the "RENAMES" clause and use the
  694.                  full field name.
  695.  
  696.         Correction: Problem resolved by the Ada development
  697.                  group.
  698.  
  699. 6.      Discriminant record types in complex packages may
  700.      cause numeric or constraint errors when attempting
  701.      to use.
  702.  
  703.         Avoidance:  Remove the Discriminant parts of the
  704.                  record.
  705.  
  706.         Correction: None
  707.  
  708. 7.      The <type>'value attribute when used with any type
  709.      causes a storage error.
  710.  
  711.         Avoidance:  None
  712.  
  713.         Correction: Problem resolved by the Ada development
  714.                  group.
  715.  
  716. 8.      The <type>'value attribute makes a distinction
  717.      between upper and lower case and may cause a NAME
  718.         error if the value and the element do not have
  719.      the same letters capitalized.
  720.  
  721.         Avoidance:  Insure the use of capitals in the spelling
  722.                  of the element name.
  723.  
  724.         Correction: Problem resolved by the Ada development
  725.                  group.
  726.  
  727. 9.  Aggregate assignments may cause various problems when
  728.     used to reference complex structures.
  729.  
  730.         Avoidance:  Remove the aggregate parts of the
  731.                  assignment.
  732.  
  733.         Correction: Problem corrected by Ada Development.
  734.  
  735. 10.     A function return inside a block within the function
  736.      can cause a storage error.
  737.  
  738.         Avoidance:  Do the function return external to the
  739.                  block.
  740.  
  741.         Correction: None
  742.  
  743. 11.     When certain structures containing an array of arrays
  744.      are defined, the compiler may incorrectly try to
  745.      optimize the code in PASS8, causing invalid data to
  746.      be stored in the arrays.
  747.  
  748.         Avoidance:  None
  749.  
  750.         Correction:  Problem corrected by Ada Development.
  751.  
  752.  
  753. 12.     The enerated Ada libraries could not grow over
  754.         16384 links.
  755.  
  756.         Avoidance:  Use multiple libraries with parenting.
  757.  
  758.         Correction: Problem resolved by the Ada development
  759.                  group.
  760.  
  761. 12.     Ada libraries tend to de-generate after repeated
  762.      modification, destroying current occupants of the
  763.      library.
  764.  
  765.         Avoidance:  None
  766.  
  767.         Correction  Problem resolved by the Ada development
  768.                  group.
  769.  
  770. III.  Enhancements to Honeywell's Ada System Made During the
  771.       MIMS Project
  772.  
  773.         The following enhancements were made to facilitate the
  774. handling of various constructs in MIMS.  However, future
  775. development efforts in Ada on a Honeywell system will also
  776. be enhanced by having these features available.
  777.  
  778.         1.  Problem
  779. MIMS used a Data General routine called
  780. TTY_IO to send data to the terminal
  781. without stripping out control
  782. characters.  Data transmission was
  783. unbuffered character-by-character.  The
  784. Honeywell system buffers all TEXT_IO to
  785. the terminal until receipt of a
  786. new_line, put_line, or GTE in the
  787. program.  This caused a problem with the
  788. data buffers overflowing when
  789. transmitting a full screen of data.
  790.  
  791.            Solution
  792. It would be ideal to have TEXT_IO handle
  793. all forms of I/O to the terminal, thus
  794. avoiding the need for any separate,
  795. system-dependent packages.  As
  796. Honeywell"s TEXT_IO package already
  797. passed VIP7801 control characters, all
  798. that was added were larger buffers for
  799. TEXT_IO to accommodate a full screen of
  800. data.  Although the time of delivery of
  801. some messages (those sent to the
  802. terminal a character at a time) was
  803. delayed, the buffer transmission
  804. conditions caused us far fewer problems
  805. than we had anticipated.
  806.  
  807.  
  808. 2.  Problem
  809. All buffer transmissions to the terminal
  810. were terminated with a NEW_LINE which
  811. caused the cursor to be incorrectly
  812. positioned when doing full screen data
  813. transmissions.
  814.  
  815.         Solution
  816.                         The NEW_LINE was removed from the
  817.                transmission leaving the cursor
  818.                positioned correctly.
  819.  
  820.  
  821. 3.      Problem
  822. The increased time required to open a
  823. file on a large scale system as opposed
  824. to the ROLM/DG became prohibitive during
  825. the execution of MIMS.  A trace to file
  826. opens, over elaboration and ten minutes
  827. of execution, showed over 1100 opens of
  828. the 240 attached files.
  829.  
  830.         Solution
  831. A change was made to allow the system
  832. maximum 2000 files to be open.  This
  833. allowed us to change MIMS to delete file
  834. closings, and thus the subsequent file
  835. opens.  By so doing, we were able to
  836. obtain execution times in the order of 3
  837. to 8 times faster.
  838.  
  839.  
  840. 4.      Problem
  841. The ROLM/DGG system had a very useful
  842. routine which returned the name of the
  843. last exception, thereby avoiding the
  844. need for multiple exception conditions
  845. to trap the error encountered.
  846.  
  847.         Solution
  848. A routine was added to the Ada library
  849. on the Honeywell to return not only the
  850. name of the exception, but the library
  851. unit number of the package or procedure
  852. it was defined in.  This routine is not
  853. compatible with the ROLM/DG routine of
  854. the same name.
  855.  
  856.