$ Praxis Release notes - Nov 12, 1980$ Fall Decus - San Diego  Dr.J R Greenwood( Lawrence Livermore National Laboratory P.O. Box 5508 L-481 Livermore, CA 94550# Phone: 415-422-5369 FTS: 532-5369** Abstract **--------------S Praxis is a modern, high level, machine-oriented, system implementation languageNintended for applications such as process control, communications, and generalFsystems programming. The intent has been to apply the recent language Vtheory in a way that accommodates applications with stringent performance requirementsHallowing close control of the object machine. Praxis therefore includesVdetailed control ( when needed ) of storage layout, shared variables between processesQand processors, convenient bit operations, and mechanisms which explicitly bypassKthe language design where required. All these detailed control aspects areOpart of high-level, strongly typed, block structured language in the tradition Qof Pascal and Ada. The language includes a rich selection of control structures,Ha powerful module concept with type checking between separately compiledOmodules at compile-time, exception handling, structured constants, and flexibleSarrays. These features have been designed into a new self consistent language which0accents program readability and maintainability.OThree compilers for Praxis have been implemented and are in the final stages of testing: 9 - VAX/VMS generating VAX native mode code ( Praxis.exe)= - VAX/VMS generating PDP-11 or LSI-11 code ( Praxis11.exe )3 - PDP-11/RSX-11M generating PDP-11 or LSI-11 codeUThe compilers and Input/Output packages are written in Praxis and are self-supportingSon each implementation. The bulk of each compiler derives from one set of sources.OThe first compiler compiled itself in March 1980 and all subsequent developmentLhas been done in Praxis. A large process control application within LawrenceILivermore National Laboratory (LLNL) has been programmed with Praxis withHoutstanding success. The Laser Fusion program within LLNL has more thanL12 people programming full-time in Praxis and has standardized on Praxis for;development of the $200 million Nova laser control systems.Acknowledgements----------------L The Praxis design and implementation effort is funded by the Laser FusionNProgram of Lawrence Livermore National Laboratory which is under contract fromLthe Department of Energy ( DOE ). All products and documentation related toDthis project are funded by DOE and will be in the "public domain". I The project manager for Praxis is J.R. Greenwood of LLNL. Most of theIimplementation and design for the products has been subcontracted to BoltHBeranek and Newman Inc. ( BBN ) of Cambridge MA. The BBN team is led byIDr. A. Evans and C.R. Morgan with support from E. Killian, Dr. J. Walker,MDr. G. Williams, R. Shapiro. Design and contract monitoring support has beenJprovided by consultants M.C. Zarnstorff of the University of Wisconsin and$W.I. Nowicki of Stanford University.N Within the Laser program the support ( both finacial and technical) of the Ifollowing people has been essential: Associate Director - Dr. J. Emmett;FProgram Leaders: Dr. H. Ahlstrom, Dr. J. Holzrichter, Dr. L. Coleman;NThe Nova project managers: R.O. Godwin, W. Simmons; and various members of theFControls Development Group including: F. Holloway, G. Suski, J. Duffy,/P. Rupert, M. Gregory, M. Rash, and J. Krammen.!What's about to become available: --------------------------------HThe thre compilers mentioned above are in final completion, testing, andHoptimization now. The PDP-11 hosted compiler that generated VAX code isno longer supported.O A substantial documentation effort is now nearing completion and includes the documents:' An Introduction to Praxis - UCRL-529576 Programming in Praxis - A language guide and tutorial" Language Reference Manual ( LRM ) Input/Output Package Manual Compiler Internals DocumentMThe following support packages have or are in the process of being developed: - Textio -eI A quick and easy package for text and character I/O under VMS or RSX. - VMSRMS -4L A substantial I/O package and conversion routine package giving complete. access to the RMS file services under VMS. - RSXRMS -,K A I/O and conversion routine package for complete access to RMS servicesoK under RSX-11M. THis package is also as much as possible compatible witht the VAXRMS package. QThe latter two packages take advantage of the named formal parameter and optionalmCparamter mechanisms which have recently been added to the language. PRAXIS AXISc ----------- N We are establishing a Praxis distribution group, named the Praxis Axis. ItsRfunction will be to coordinate the distribution of future releases, documentation,Jutilities, and communications. Those interested in joining should send the,following information to Dr. J.R. Greenwood: . Namei . Affiliation . Address . Phone6 . If associated or funded by government, which agency . Interests( . Which machines/operating environments! . any other relevant informationtMAll persons on the list will get the newsletter of the Praxis Axis. The firsts)issue is expected in December or January.eAnticipated Release schedule---------------------------- Decus - Nov 4-7 80o8 Release of preliminary compiler and support for VAX/VMS' Release of some language documentationV December 1980 Newsletter6 Release of field test versions to small set of people January-February 1981@ Release of all three compilers and support ( not total sources) Input/Output packages Miscellaneous routinesp( Completed Programmming in Praxis manual Language Reference manual Spring Decus 1981 Upgrades on all Products , Submission to Decus library of all Products8 Perhaps release of full sources ( legal questions here) Fall Decus 1981% Symbolic debuggers for all compilersL Revisions of all documentationx Additional Praxis packages.Compiler on tape----------------N The compiler as delivered implements approximately 95% of the language andGessentially all of that which is discussed in the Programming in PraxisQmanual. The compiler has two major drawbacks as it stands now: the error message Kreporting is very marginal ( by numbers) and the listing options are not inLOthis version. The compiler also only puts out .MAR files instead of the objectoS( .OBJ ) image. This is done for our convenience in debugging. The final link-time Pcheck for separate compilation validity is not done either since it requires the .OBJ format.P You willmost likely come across small items which aren't implemented in thisQversion. If you do; try coding the thing a little different. However if you finddHactual bugs, I would like to hear about if them. A paper copy of a small3example demonstrating the bug would be most useful.tInstalling the compilers-----------------------fR The compiler and libraies were built and run under VAX/VMS version 2. The .EXE\image should execute directly on any V2.0 VMS system. The default file extensions used are: .PRX - praxis sourcet .SPS - Vax synopsis9 .MAR - Macro output file ( also current compiler output)L .LIS - listing file .OBJ - Object file  .SYN - PDP-11 synopsis file .M11 - PDP-11 macro outputv Using the Compiler under VAX/VMS --------------------------------H Copy the compilers ( praxis.exe) off the tape, and into a convenientLdirectory, say dba0:. Then create a symbol along the following form:'$ praxis :== "$dba0:praxis.exe" andP+$ praxis11 :== "$dba0:praxis11.exe"EThis will allow you to reference the compiler as if it had been wired Kinto DCL, like the other commands ( e.g. FOR, LINK). You may want to define2#this symbol in your LOGIN.COM file.uFAfter defining the symbol, the compiler is invoked with a standard DCLDcommand line, giving the files to compile and switches modifying the.compilations. Such a command line has the form$ praxis file-spec,... Command Qualifiersf ------------------  none.  File Qualifiers Default --------------- ------- /[NO]LIST[=file-spec] /NOLISTn! /[NO]OBJECT[=file-spec] /OBJECTi Command Parameters- ------------------a file-spec,...G Specifies one or more Praxis source programs to be compiled. If you doaD not specify a file type, the compiler uses the default type of PRX.C You can specify more than one input file. If you seperate the filerE specifications with commas (,), each file is compiled separately. IfdH you separate the file specifications with plus signs (+), the files areG concatenated and compiled as a single input file, producing one objectl0 module and, if /list is specified, one listing.@ No wild card characters are allowed in the file specifications. File Qualifiers --------------- /LIST[= file-spec] /NOLISTN- Controls whether a listing file is produced. B The Praxis compiler, by default, does not produce a listing file.E When you specify /LIST, you can control the defaults applied to the C output file specification by the placement of the qualifier in thesC command, as described in Section 5.3.3, "Rules for Entering OutputaD File Qualifiers," in the VAX/VMS Command Language User's Guide. The" output file type defaults to LIS.? No wild card characters are allowed in the file specification.o /OBJECT[=file-spec]t /NOOBJECTo2 Controls whether a macro source file is produced.? The Praxis compiler, by default, produces a macro source file. G In the near future, this qualifier will control whether an object filem is produced.mF When you specify /OBJECT you can control the defaults applied to the C output file specification by the placement of the qualifier in thecC command, as described in Section 5.3.3, "Rules for Entering OutputlD File Qualifiers," in the VAX/VMS Command Language User's Guide. TheB output file type defaults to MAR. When the qualifier controls theB generation of the object file, the default file type will be OBJ.? No wild card characters are allowed in the file specification.dF ---------------------------------------------------------------------D Notice that the compiler does not currently directly produce ObjectG files, but rather produces MACRO source files, which must be assembledmG (i.e. you must run MACRO on them) to produce Object files for linking.e@ The compiler uses .SPS files to communicate information betweenG compilations. This allows full type checking, at compile time, betweenrG all seperatly compiled modules. As a consequence, the compiler expectscF to find a .SPS file for each module that the currently being compiledF module IMPORTs from. If it can not find such a file, it will generateF an error. Currently the compiler only looks in the source's directoryE for any needed .SPS files. This will be changed in a future release.-? When first seperatly compiling a collection of modules, mutual/? references may prevent enough .SPS files being present for all.C compilations. However, by multiply compiling the modules in groupssC (i.e. A, B, C, A, B, C, B, C ) the .SPS files will be created, ande1 eventually all of the compilations will succeed.  LINKING -------A When linking the code produced by Praxis, be sure to include theoD file PRXLIB.OBJ (on this tape), which contains the run-time support routines. Known Bugse ----------t< Currently, FOR loops that increment generate code using theB AOBXXX/SOBXXX instructions. This limits the length of the loop toF very short sections of code, as these instructions use a byte offset.< However, the FOR/THEN/WHILE is not affected and works well.O===============================================================================sWhats on the tape.------------------QThe following files are on the tape a constitute the first preliminary release ofgQthe Praxis compiler products. Probably of most interest is the Praxis.doc manual and the Praxis.exe VAX compiler.Programming in Praxis Manuals --C PRAXIS.DOC;1 1086 No Boldface version - Nice on a versatec-G PRAXISBOL.DOC;1 1551 Double overstrike for Boldface versionsGExecutable Praxis compiler image - VAX/VMS Version2 generating VAX codepR Note: It is very helpful to set your working set page limit up to 500 forE the Praxis compiler usage. You will notice the difference in speed. u" PRAXIS.EXE;1 316 < praxis11.exe 350 Compiler which generates PDP-11 code0DOTAPE example Praxis program for copying things" DOTAPE.EXE;29 22 " DOTAPE.LIS;3 19 " DOTAPE.MAR;49 30 " DOTAPE.OBJ;26 10 " DOTAPE.PRX;50 15 " DOTAPE.SPS;1 1 H UNPASCAL modules - UNPASCAL is a very rough hacked Praxis program whichD will convert a PASCAL program into a Praxis program. This was usedD to boot from the original Praxis compiler written in PDP-10 PascalI into Praxis. Much improvement to this program would be nice. However H it does do 80 to 90% of the job especially for simple Pascal programs.I Note: certain things that bite you in the translation are the differentOH scoping rles between Pascal and Praxis, and the use of GOTOs in PascalE which are hard to convert to the appropriate Break, Loop, or ReturnaJ statements in Praxis. Also some people use GOTO in BAD ways which can'tG be converted. This converted should also be updated to pretty print the output.f" UNPASCAL.EXE;26 47 " UNDO.MAR;84 48 " UNDO.OBJ;24 18 " UNDO.PRX;69 42 " UNDO.PRX;68 42 " UNDO.SPS;1 3 " UNOUT.MAR;43 8 " UNOUT.OBJ;7 3 " UNOUT.PRX;28 11 " UNOUT.PRX;27 11 " UNOUT.SPS;2 2 " UNPASCAL.BLD;2 1 " UNPASCAL.COM;2 1 " UNPASCAL.MAR;1 19 " UNPASCAL.OBJ;1 8 " UNPASCAL.PRX;4 16 " UNPASCAL.PRX;2 16 " UNPASCAL.SPS;2 1 " ERR.MAR;35 22 " ERR.OBJ;7 6 " ERR.PRX;20 15 " ERR.PRX;19 15 " ERR.SPS;5 8 " LEX.MAR;54 30 " LEX.OBJ;9 7 " LEX.PRX;37 23 " LEX.PRX;36 23 " LEX.SPS;5 32 next.mar;1e" NEXT.PRX;45 24 " NEXT.PRX;44 24 " NEXT.SPS;2 1 LGENLDR - Another example program which is used to produce the Runoff control= necessary to produce the Praxis manual. Uses TEXTIO package" GENLDR.COM;61 3 " GENLDR.MAR;4 70 " GENLDR.OBJ;3 19 " GENLDR.PRX;48 25 SMACIO - The Macro routines which interface to the I/O of the system. These are usednJ by the TEXTIO package. Note this also demonstrates how one uses assembly4 langage routines by generating fake synopsis files.! MACIO.OBJ;17 10 e" MACIO.SPS;2 2 " MACIO.SPS;1 2 7 macios.prx 2 File to produce dummy Synopsis for MACIOy1PRXLIB - The run-time support for Praxis programstJ The .OBJ should be linked with all VAX/VMS Praxis programs. This contains@ the initialization, exception handling routines and heap stuff. PRXLIB.MAR! PRXLIB.OBJ;15 17 i9TEXTIO - Text I/O package. See: TEXTIO.DOC for details. " TEXTIO.DOC;1 21 " TEXTIO.LIS;6 20 " TEXTIO.MAR;14 21 " TEXTIO.OBJ;2 6 " TEXTIO.PRX;47 16 " TEXTIO.SPS;18 7