Karim BELABAS on Fri, 3 Sep 1999 18:17:13 +0200 (MET DST)

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Str() limitation

> ? length(Str(10^4094))
> 0                            
> Lurking around points to the following:
> src/language/anal.c:
> #define TOTAL_STRING_ARG 4096 /* Total length of string args */
> So my question is, what's the reasoning behind this limitation, and what
> are the consequences, if any, of lifting this limit?  Memory consideration?

Reasoning was that strings were of a very restricted type when this was
introduced (basically constant strings: "a", within print() statements, t_STR
didn't exist) [when Ilya rewrote the GP line parser using symbolic codes for
his Perl interface. This started version 1.900, which eventually led to
version 2.0].

Then arbitrary PARI objects were allowed to be automagically "stringified",
and the restriction became very dangerous without anybody noticing (my fault,
here). Anyway, it is and always was completely unnecessary; I reworked string
handling for 2.0.17 (forthcoming), removing all static limits in this area.
The code is simpler if slightly less efficient (since it applies mostly to
"print" statements, I don't consider this a problem).

Karim Belabas                    email: Karim.Belabas@math.u-psud.fr
Dep. de Mathematiques, Bat. 425
Universite Paris-Sud             Tel: (00 33) 1 69 15 57 48
F-91405 Orsay (France)           Fax: (00 33) 1 69 15 60 19
PARI/GP Home Page: http://hasse.mathematik.tu-muenchen.de/ntsw/pari/