9.7. Limits in Regina Regina tries not to enforce any limits. Wherever possible, “memory” is the limit, at the cost of some CPU whenever internal data structures must be expanded if their initial size were too small. Note that Regina will only increase the internal areas, not decrease them afterwards. The rationale is that if you happen to need a large internal area once, you may need it later in the same program too. In particular, Regina has the following limits: Binary strings source line size Clock granularity 0.001-1 second (note 3) Elapse time clock until ca. 2038 (note 1) Hexadecimal source line size strings Literal string source line size length Nesting of memory comments Parameters memory Significant digits memory (note 2) Subroutine levels memory Symbol length source line size Variable name memory (note 2) length Notes: 1) Regina uses the Unix-derived call time() for the elapse time (and time in general). This is a function which returns the number of seconds since January 1st 1970. According to the ANSI C standard, in which Regina is written, this is a number which will at least hold the number 2**31-1. Therefore, these machines will be able to work until about 2038, and Regina will satisfy the requirement of the elapse time clock until 2006. By then, computers will hopefully be 64 bit. Unfortunately, the time() C function call only returns whole seconds, so Regina is forced to use other (less standardized) calls to get a finer granularity. However, most of what is said about time() applies for these too. 2) The actual upper limit for these are the maximum length of a string, which is at least 2**32. So for all practical purposes, the limit is “memory”. 3) The clock granularity is a bit of a problem to define. All systems can be trusted to have a granularity of about 1 second. Except from that, it’s very difficult to say anything more specific for certain. Most systems allows alternative ways to retrieve the time, giving a more accurate result. Wherever these alternatives are available, Regina will try to use them. If everything else fails, Regina will use 1 second granularity. For most machines, the granularity are in the range of a few milliseconds. Some typical examples are: 20 ms for Sun3, 4 ms for Decstations 3100, and 10 ms for SGI Indigo. Since this is a hardware restriction, this is the best measure anyone can get for these machines.