home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / g77-0.5.15-src.tgz / tar.out / fsf / g77 / f / PROJECTS < prev    next >
Text File  |  1996-09-28  |  20KB  |  405 lines

  1. 9502317
  2.  
  3. 0. Improved efficiency.
  4.  
  5. Don't bother doing any performance analysis until most of the
  6. following items are taken care of, because there's no question
  7. they represent serious space/time problems, although some of
  8. them show up only given certain kinds of (popular) input.
  9.  
  10. * Improve malloc package and its uses to specify more info about
  11.   memory pools and, where feasible, use obstacks to implement them.
  12.  
  13. * Skip over uninitialized portions of aggregate areas (arrays,
  14.   COMMON areas, EQUIVALENCE areas) so zeros need not be output.
  15.   This would reduce memory usage for large initialized aggregate
  16.   areas, even ones with only one initialized element.
  17.  
  18. * Prescan the statement (in sta.c) so that the nature of the statement
  19.   is determined as much as possible by looking entirely at its form,
  20.   and not looking at any context (previous statements, including types
  21.   of symbols).  This would allow ripping out of the statement-
  22.   confirmation, symbol retraction/confirmation, and diagnostic inhibition
  23.   mechanisms.  Plus, it would result in much-improved diagnostics.  For
  24.   example, "CALL some-intrinsic(...)", where the intrinsic is not a
  25.   subroutine intrinsic, would result actual error instead of the
  26.   unimplemented-statement catch-all.
  27.  
  28. * Throughout g77, don't pass ffewhereLine/ffewhereColumn pairs where
  29.   a simple ffewhere type, which points to the error as much as is
  30.   desired by the configuration, will do, and don't pass ffelexToken types
  31.   where a simple ffewhere type will do.  Then, allow new default
  32.   configuration of ffewhere such that the source line text is not
  33.   preserved, and leave it to things like EMACS' next-error function
  34.   to point to them (now that next-error supports column numbers).
  35.   The change in calling sequences should improve performance somewhat,
  36.   as should not having to save source lines.  It might even be possible
  37.   to change ffewhere from a pointer to a single 32-bit item that has
  38.   24 bits for line#, 8 bits for col#, or something like that, if it's
  39.   worthwhile for performance' sake at that point.  It might also be
  40.   worthwhile to make it easy to configure away preservation of column
  41.   numbers if that might make g77 faster, though with most Fortran
  42.   programs, column numbers are quite helpful.  (Whether this whole
  43.   item will improve performance is questionable, but it should greatly
  44.   improve maintainability.)
  45.  
  46. * Handle DATA (A(I),I=1,1000000)/1000000*2/ more efficiently, especially
  47.   as regards the assembly output.  Some of this might require improving
  48.   the back end, but lots of improvement in space/time required in g77
  49.   itself can be fairly easily obtained without touching the back end.
  50.   Maybe type-conversion, where necessary, can be speeded up as well in
  51.   cases like the one shown (converting the "2" into "2.").
  52.  
  53. * If analysis shows it to be worthwhile, optimize lex.c.
  54.  
  55. 1. Better optimization.
  56.  
  57. * Get the back end to produce at least as good code involving array
  58.   references as does f2c+gcc.
  59.  
  60. * Do the equivalent of the trick of putting "extern inline" in front
  61.   of every function definition in libf2c and #include'ing the resulting
  62.   file in f2c+gcc -- that is, inline all run-time-library functions
  63.   that are at all worth inlining.
  64.  
  65. * Provide some way, a la gcc, for Fortran code to specify assembler
  66.   code.
  67.  
  68. * When doing CHAR_VAR = CHAR_FUNC(...), and it's clear that types line up
  69.   and CHAR_VAR is addressable or not a VAR_DECL, make CHAR_VAR, not a
  70.   temporary, be the receiver for CHAR_FUNC.
  71.  
  72. * Design and implement Fortran-specific optimizations that don't
  73.   really belong in the back end, or where the front end needs to
  74.   give the back end more info than it currently does.
  75.  
  76. * Design and implement a new run-time library interface, with the
  77.   code going into libgcc so no special linking is required to
  78.   link Fortran programs using standard language features.  This library
  79.   would speed up lots of things, from I/O (using precompiled formats,
  80.   doing single or small #s of calls for arrays or array sections, and
  81.   so on) to general computing (array/section implementations of
  82.   various intrinsics, implementation of commonly performed loops that
  83.   aren't likely to be optimally compiled otherwise, etc.).  Among
  84.   the important things the library would do are: be a one-stop-shop-type
  85.   library, hence shareable and usable by all, in that what are now
  86.   library-build-time options in libf2c would be moved at least to the
  87.   g77 compile phase, if not to finer grains (such as choosing how
  88.   list-directed I/O formatting is done by default at OPEN time, for
  89.   preconnected units via options or even statements in the main program
  90.   unit, maybe even on a per-I/O basis with appropriate pragma-like
  91.   devices).
  92.  
  93. * Probably requiring the new library design, change interface to
  94.   normally have COMPLEX functions return their values in the way
  95.   gcc would if they were declared complex float, rather than using
  96.   the mechanism currently used by CHARACTER functions (whereby the
  97.   functions are compiled as returning void and their first arg is
  98.   a pointer to where to store the result).  Don't append underscores on
  99.   external names for COMPLEX functions in some cases once g77 uses
  100.   gcc rather than f2c calling conventions.
  101.  
  102. * Do something useful with "doiter" references where possible.  E.g.
  103.   CALL FOO(I) cannot modify I if within a DO loop that uses I as the
  104.   iteration variable, and the back end might find that info useful
  105.   in determining whether it needs to read I back into a register after
  106.   the call.  (It normally has to do that, unless it knows FOO never
  107.   modifies its passed-by-reference argument, which is rarely the case
  108.   for F77 code.)
  109.  
  110. 2. Simpler porting.
  111.  
  112. * A new library (see above) should improve portability as well as
  113.   produce more optimal code.  Further, g77 and the new library should
  114.   conspire to simplify naming of externals, such as by removing unnecessarily
  115.   added underscores, and to reduce/eliminate the possibility of naming
  116.   conflicts, while making debugger more straightforward.  Also, it should
  117.   make multi-language applications more feasible, such as by providing
  118.   Fortran intrinsics that get Fortran unit numbers given C FILE *
  119.   descriptors.
  120.  
  121. * Possibly related to a new library, g77 should produce the equivalent
  122.   of a gcc "main(argc, argv)" function when it compiles a main program
  123.   unit, instead of compiling something that must be called by a library
  124.   implementation of main().  This would do many useful things such as
  125.   provide more flexibility in terms of setting up exception handling,
  126.   not requiring programmers to start their debugging sessions with
  127.   "breakpoint MAIN__" followed by "run", and so on.
  128.  
  129. * The back end needs to understand the difference between alignment
  130.   requirements and desires.  E.g. on x86 machines, g77 currently imposes
  131.   overly strict alignment requirements, due to the back end, but it
  132.   would be useful for Fortran and C programmers to be able to override
  133.   these _recommendations_ as long as they don't violate the actual
  134.   processor _requirements_.
  135.  
  136. 3. More extensions.
  137.  
  138. * Support INTEGER/REAL/COMPLEX equivalents for all applicable back-end-
  139.   supported types (char, short int, int, long int, long long int, and long
  140.   double).  This means providing intrinsic support &c as well, and for most
  141.   machines will result in automatic support of INTEGER*1, INTEGER*2,
  142.   INTEGER*8, and so on.
  143.  
  144. * Provide as the default source-line model a "pure visual" mode, where
  145.   the interpretation of a source program in this mode can be accurately
  146.   determined by a user looking at a traditionally displayed rendition
  147.   of the program (assuming the user knows whether the program is fixed
  148.   or free form).  That is, assume the user cannot tell tabs from spaces
  149.   and cannot see trailing spaces on lines, but has canonical tab stops
  150.   and, for fixed-form source, has the ability to always know exactly
  151.   where column 72 is.  Then provide common alternate models (Digital, f2c,
  152.   &c) via command-line options.  This includes allowing arbitrarily long
  153.   lines for free-form source as well as fixed-form source and providing
  154.   pedantic limits and diagnostics as appropriate, plus even on a non-
  155.   tabbed fixed-form line, treating a line with the first non-blank character
  156.   starting with column 6 being a digit as a continuation line (to effect
  157.   the "<TAB>1continuationline..." behavior in "pure visual" mode).
  158.  
  159. * Intrinsics in constant expressions.  This, plus F90 intrinsics such
  160.   as SELECTED_INT_KIND, would give users the ability to write clear,
  161.   portable code.
  162.  
  163. * Provide more intrinsics for system services like EXIT.
  164.  
  165. * A FLUSH statement that does what many systems provide via CALL FLUSH,
  166.   but that supports * as the unit designator (same unit as for PRINT).
  167.  
  168. * Finish support for V027 VXT PARAMETER statement (like PARAMETER in
  169.   stc but type of destination is set from type of source expression).
  170.  
  171. * Consider adding a NUMERIC type to designate typeless numeric constants,
  172.   named and unnamed.  The idea is to provide a forward-looking, effective
  173.   replacement for things like the VXT PARAMETER statement when people
  174.   really need typelessness in a maintainable, portable, clearly documented
  175.   way.  Maybe TYPELESS would include CHARACTER, POINTER, and whatever
  176.   else might come along.
  177.  
  178. * Allow DATA VAR/.../ to come before COMMON /.../ ...,VAR,....
  179.  
  180. * Character-type selector/cases for SELECT CASE.
  181.  
  182. * Option to initialize everything not explicitly initialized to "weird"
  183.   (machine-dependent) values, e.g. NANs, bad (non-NULL) pointers, and
  184.   "-0" integers.
  185.  
  186. * Add run-time bounds-checking of array/subscript references a la f2c.
  187.  
  188. * Output labels for use by debuggers that know how to support them.  Same
  189.   with weirder things like construct names.  It is not yet known if any
  190.   debug formats or debuggers support these.
  191.  
  192. * Provide necessary g77/gdb support to make better native Fortran-language
  193.   debugging.  In the meantime, see item about writing a file named CALLING,
  194.   which would help users understand how various Fortran features are
  195.   implemented at the debugger-visible level.
  196.  
  197. * Support the POSIX standard for Fortran.
  198.  
  199. * Support DEC-style lossage of virtual blanks at end of source line
  200.   if some command-line option specified.  This affects cases where
  201.   a character constant is continued onto the next line in a fixed-form
  202.   source file -- g77, and many other compilers, virtually extend
  203.   the continued line through column 72 with blanks that become part
  204.   of the character constant, but DEC Fortran normally didn't.  (Fairly
  205.   recently, at least one version of DEC Fortran was enhanced to provide
  206.   the g77 behavior when a command-line option is specified, apparently due
  207.   to demand from readers of the USENET group comp.lang.fortran)
  208.  
  209. * Implement # directives in f771 so preprocessing works better.
  210.  
  211. * Consider a preprocessor designed specifically for Fortran to replace
  212.   cpp -traditional.  There are several on the 'net to look at.
  213.  
  214. * Support OPEN(...,KEY=(...),...).
  215.  
  216. * OPEN(NOSPANBLOCKS,...) is treated as OPEN(UNIT=NOSPANBLOCKS,...), so a
  217.   later UNIT= in the first example is invalid.  Make sure this is
  218.   what DEC Fortran users expect.
  219.  
  220. * Currently we disallow READ(1'10) since it is an obnoxious syntax, but
  221.   supporting it might be pretty easy if needed (more details needed, such
  222.   as whether general expressions separated by an apostrophe are supported,
  223.   or maybe the record number can be a general expression, &c).
  224.  
  225. * Support STRUCTURE/UNION/MAP/RECORD fully.  Currently no support at all
  226.   for %FILL in STRUCTURE and related syntax, whereas the rest of the
  227.   stuff has at least some parsing support.
  228.  
  229. * F90 and g77 probably disagree about label scoping relative to INTERFACE/
  230.   END INTERFACE and their contained SUBROUTINE/FUNCTION interface bodies
  231.   (blocks?).
  232.  
  233. * F90: ENTRY doesn't support RESULT() yet, since that was added after S8.112.
  234.  
  235. * F90: Empty-statement handling (10 ;;CONTINUE;;) probably isn't consistent
  236.   with the final form of the standard (it was vague at S8.112).
  237.  
  238. * It seems to be an "open" question whether a file, immediately after being
  239.   OPENed, is positioned at the beginning, the end, or wherever -- it might
  240.   be nice to offer an option of opening to "undefined" status, requiring
  241.   an explicit absolute-positioning operation to be performed before any
  242.   other (besides CLOSE) to assist in making applications port to systems
  243.   (some IBM?) that OPEN to the end of a file or some such thing.
  244.  
  245. 4. Generalize the machine model.
  246.  
  247. * Switch to using REAL_VALUE_TYPE to represent REAL/DOUBLE constants
  248.   exclusively so the target float format need not be required.  This
  249.   means changing the way g77 handles initialization of aggregate areas
  250.   having more than one type, such as REAL and INTEGER, because currently
  251.   it initializes them as if they were arrays of "char" and uses the
  252.   bit patterns of the constants of the various types in them to determine
  253.   what to stuff in elements of the arrays.
  254.  
  255. * Rely more and more on back-end info and capabilities, especially in the
  256.   area of constants (where having the g77 front-end's IL just store
  257.   the appropriate tree nodes containing constants might be best).
  258.  
  259. * Suite of C and Fortran programs that a user/administrator can run on a
  260.   machine to help determine the configuration for GNU Fortran before building
  261.   and help determine if the compiler works (especially with whatever
  262.   libraries are installed) after building.
  263.  
  264. 5. Useful warnings.
  265.  
  266. * Support -pedantic more thoroughly, and use it only to generate
  267.   warnings instead of rejecting constructs outright.  Have it warn:
  268.   if a variable that dimensions an array is not a dummy or placed
  269.   explicitly in COMMON (the 77 standard does not allow it to be
  270.   placed in COMMON via EQUIVALENCE); if specification statements
  271.   follow statement-function-definition statements; about all sorts of
  272.   syntactic extensions.
  273.  
  274. * Warn about modifying DO variables via EQUIVALENCE.  This test might
  275.   be useful in setting the "doiter" flag for a variable or even array
  276.   reference within a loop, since that might produce faster code someday.
  277.  
  278. * Warn if brain-damage auto-decimal-convert-constant-to-REAL*8
  279.   feature might be expected in source (if such warnings are enabled); for
  280.   example, warn in cases like "parameter (pi=3.14159);foo=pi*3d0;" because
  281.   apparently in these and other cases, some compilers append decimal zeros
  282.   to the original single-precision constant and converts the result to
  283.   double-precision -- though undoubtedly it uses an easier equivalent
  284.   implementation (and I suppose g77 could, too, if this kind of dangerous
  285.   feature were actually more useful than just fixing the source).
  286.  
  287. 6. Better documentation of how GCC works and how to port it.
  288.  
  289. * Write CALLING, a text file that describes rules for how g77 passes
  290.   arguments to subroutines and functions, handles COMPLEX return values,
  291.   handles alternate returns, and so on.
  292.  
  293. * Develop and maintain a list of gcc compiler options supported for .f
  294.   files.
  295.  
  296. 7. Better internals.
  297.  
  298. * Generally make expression handling focus
  299.   more on critical syntax stuff, leaving semantics to callers.  E.g.
  300.   anything a caller can check, semantically, let it do so, rather
  301.   than having expr.c do it.  (Exceptions might include things like
  302.   diagnosing "FOO(I--K:)=BAR" where FOO is a PARAMETER -- if it seems
  303.   important to preserve the left-to-right-in-source order of production
  304.   of diagnostics.)
  305.  
  306. * Come up with better naming conventions for -D to establish requirements
  307.   to achieve desired "language" via proj.h.
  308.  
  309. * In global, clean up used tokens and ffewheres in _terminate_1.
  310.  
  311. * Replace sta outpooldisp mechanism with malloc_pool_use.
  312.  
  313. * Check for opANY in more places in com.c, std.c, and ste.c, and get
  314.   rid of the opCONVERT(opANY) kludge (after determining if there is
  315.   indeed no real need for it).
  316.  
  317. * Utility to read and check bad.def msgs and their references in the
  318.   code, to make sure calls are consistent with message templates.
  319.  
  320. * Make a symbol dumper for standalone FFE so testing can be more exhaustive.
  321.  
  322. * Search and fix "&ffe" and similar so that "ffe...ptr..." macros are
  323.   available instead (a good argument for wishing we could have written all
  324.   this stuff in C++, I suppose).
  325.  
  326. * Some modules truly export the member names of their structures (and the
  327.   structures themselves), maybe fix this, and fix other modules that just
  328.   appear to as well (by appending "_", though it'd be ugly and probably
  329.   not worth the time).
  330.  
  331. * Implement C macros RETURNS(value) and SETS(something,value) in proj.h
  332.   and use them throughout FFE source code so they can be tailored to catch
  333.   code writing into a RETURNS() or reading from a SETS().
  334.  
  335. * Decorate throughout with "const" and other such stuff.
  336.  
  337. * All F90 notational derivations in the source code are still based
  338.   on the S8.112 version of the draft standard.  Probably should update
  339.   to the official standard, or put documentation of the rules as used
  340.   in the code...uh...in the code.
  341.  
  342. * Some ffebld_new calls (those outside of ffeexpr or inside but invoked
  343.   via paths not involving ffeexpr_lhs or ffeexpr_rhs) might be creating things
  344.   in improper pools, leading to such things staying around too long or
  345.   (doubtful, but possible and dangerous) not long enough.
  346.  
  347. * Some ffebld_list_new (or whatever) calls might not be matched by
  348.   ffebld_list_bottom (or whatever) calls, which might someday matter.
  349.  
  350. * Probably not doing clean things when we fail to EQUIVALENCE something
  351.   due to alignment/mismatch or other problems -- they end up without
  352.   ffestorag objects, so maybe the backend (and other parts of the front
  353.   end) can notice that and handle like an "opANY" (do what it wants, just
  354.   don't complain or crash).  Most of this seems to have been addressed
  355.   by now, but a code review wouldn't hurt.
  356.  
  357. 8. Better diagnostics.
  358.  
  359. * Implement non-F90 messages (especially avoid mentioning F90 things g77
  360.   doesn't yet support).  Much of this has been done as of 0.5.14.
  361.  
  362. * Generally continue processing for warnings and recoverable (user)
  363.   errors whenever possible -- don't gratuitously make bad code.  Example:
  364.   INTRINSIC ZABS;CALL FOO(ZABS);END when -ff2c-intrinsics-disable should
  365.   complain about passing ZABS but still compile, instead of rejecting
  366.   the entire CALL statement (some of this is related to improving sta.c
  367.   to do the statement-preprocessing work).
  368.  
  369. * If -fno-ugly, reject badly designed trailing-radix quoted (typeless)
  370.   numbers, such as '123'O.
  371.  
  372. * For diagnostics, would be nice to say "In procedure XYZ:" or something
  373.   like that (see what gcc does, etc), perhaps even the line number within
  374.   the procedure would be appropriate?
  375.  
  376. * -fflag-ugly, -fflag-automatic, -fflag-vxt-not-f90 (syn. -fflag-f90-not-vxt),
  377.   -fflag-f90 all should flag places (via diagnostics) where ambiguities
  378.   are found.
  379.  
  380. * When FUNCTION and ENTRY point types disagree (CHARACTER lengths,
  381.   type classes, &c), ANY-ize the offending ENTRY point and any _new_ dummies
  382.   it specifies.
  383.  
  384. * Complain when list of dummies containing an adjustable dummy array does
  385.   not also contain every variable listed in the dimension list of the
  386.   adjustable array.  Currently g77 does complain about a variable that
  387.   dimensions an array but doesn't appear in any dummy list or COMMON area,
  388.   but this needs to be extended to catch cases where it doesn't appear in
  389.   every dummy list that also lists any arrays it dimensions.
  390.  
  391. * Make sure things like RETURN 2HAB are invalid in both source forms (must
  392.   be RETURN (2HAB), which probably still makes no sense but at least can
  393.   be reliably parsed).  Fixed form rejects it, but not free form, except
  394.   in a way that is a bit difficult to understand.
  395.  
  396. * Speed up and improve error handling for data when repeat-count is
  397.   specified; as in "integer x(20);continue;data (x(i),j=1,20)/20*5/;end",
  398.   so 20 messages don't come out after the important one.
  399.  
  400. 9. More library routines.
  401.  
  402. * The sort of routines usually found in the BSD-ish libU77 should be
  403.   provided in addition to the few utility routines in libF77.  Some of
  404.   this work has been done.
  405.