Presently the VISTA SAC (Standards And Conventions) describes the use of VISTA Number and Name Spaces (VNNS). The conventions used are, IMO, rather hard to deal with because the variable names become too hard to deal with for typical namespaces (of 3 or 4 characters, short 1 or 2 character name spaces are bad enough, but very difficult to obtain).
The following idea is one that would allow the source code to be preprocessed into conventional MUMPS, where the tools (such as VPE, Eclipse, etc) would deal with the substitution.
A downside, clearly, is that anyone looking at the resulting MUMPS code would not get the benefit of the notational clarity of the original... BUT all of the coding information for the "original" is preserved in the processed source... so "round trip" (to and from) should be possible from either.
### # $Id: Idea.1,v 20080220.1 2008/02/21 04:54:40 ldl Exp ldl $ # vforum:$Source: /home/vforum/RCS/Idea.1,v $ #
Motivation: The localized namespace problem severely highlights the failure of the current M[UMPS] Standard (and implementations) to address access and control of the symbol table.
Current recommended VistA practice significantly impedes the readability of the resulting code, by: - do not allow for clear, nor safe names - exchanging hard to keep straight symbol table problems with unreadable code (twisty little variations of the endings of variable names, running the significant risk of confusion) - comments attempting to rectify the above are completely inadequate and they tend to create a "second program" (a program within a program) that needs to be maintained so as to not mislead the reader.
An idea for namespaces without needing M[UMPS] extensions.
- Allows for "mangling" of the descriptions without having to visually clutter the source code.
- Allows for "mangling" the desciptions without requiring VPE.
- Use a conventional dot notation to separate namespace from namespace element to avoid confusion with pass by reference
- Tag externally visible labels with a leading '&' (similar to existing M[UMPS] referencing of external library packages
- Labels lacking the "external" '&' tagging are private
- Label "mangling" provides strong visibility of externally accessible tags, and automatically (lightly) hides local private tags.
- Keep description in the routine following the reserved tag, here using "NAMESPEC", but it could be any tag we decide on.
- Spec is accessible via $TEXT() for introspection and other mechanisms we desire.
- Almost no thought has been put into where this can go, but lots of ideas are rolling around, including the ability to coordinate namespaces with "include" or other mechanisms.
The main idea is that VPE (or other process) is able to de-ugly (or less ugly) the routine by annotating the code in a more conventional namespace form, while not changing what the resulting M[UMPS] code sees.
Items known to be missing (but seen as tractable): - Namespace replacement within strings, if even needed
Sample Source code that VPE munges to/from routine source
VPE display of the routine | 1 X.1 ;;VistA Header 1 | 2 ;;VistA Header 2 | 3 Q | 4 &MAIN ; Main entry point | 5 N X.SAM S X.SAM="" | 6 F S X.SAM=$O(^GVN(X.SAM)) Q:X.SAM="" D | 7 . D SUB(.X.SAM) | 8 Q | 9 ; | 10 SUB(X.VAR) ; Private routine SUB | 11 W X.VAR,Y.MAX,!
VPE show NAMESPACE | Namespace Description | --------- ----------------------------- | ZLDL Description of namespace ZLDL | ZDLW Description of namespace ZDLW
VPE show NAMESPACE VARIABLES | Namespace Variable Type Description | ---------- ------------- ------ ---------------------------------- | ZLDL X.PETE String Description of PETE | X.SAM String Description of SAM | X.VAR String Description of VAR | ZDLW Y.MAX Number Description of MAX |
Routine source for the above ------------------------------------------------------------------------ ZLDL1 ;;VistA Header 1 ;;VistA Header 2 Q MAIN ; N ZLDLSAM S ZLDLSAM="" F S ZLDLSAM=$O(^GVN(ZLDLSAM)) Q:ZLDLSAM="" D . D XSUB(.ZLDLSAM) Q ; XSUB(ZLDLVAR) ; Private routine SUB W ZLDLVAR,ZDLWMAX,! QUIT ; END NAMESPEC ;; <XML 'various XML chatter'> ;;<NAMESPACE NAME="ZLDL" PREFIX="X"> ;; Description of namespace ZLDL ;; <VAR NAME="SAM" TYPE="String">Description of VAR</VAR> ;; <VAR NAME="PETE" TYPE="String">Description of PETE</VAR> ;; <VAR NAME="VAR" TYPE="String">Description of VAR</VAR> ;;</NAMESPACE> ;;<NAMESPACE NAME="ZDLW" PREFIX="Y"> ;; Description of namespace ZDLW ;; <VAR NAME="MAX" TYPE="Number">Description of MAX</VAR> ;;</NAMESPACE> ;;</XML> ------------------------------------------------------------------------ $Log: Idea.1,v $ Revision 20080220.1 2008/02/21 04:54:40 ldl Initial hack
Revision 20080220.1 2008/02/21 04:51:18 vforum initial hack
End of $Id: Idea.1,v 20080220.1 2008/02/21 04:54:40 ldl Exp ldl $
_________________ 3960 Schooner Loop 651-340-4007 Las Cruces, NM 88012-6067
|