SYMBOL TABLE FULL

If we don't know about 'em, we can't fix 'em.

SYMBOL TABLE FULL

PostPosted by drab » Sun Mar 19, 2017 10:23 am

In other threads, I have reported several problems getting SYMBOL TABLE FULL. Unsurprisingly, those problems all involved large mixed or nested arrays.

Being unable to run some of my functions because of this, I tried re-writing one of them the long way to completely avoid mixed and nested arrays.

It STILL hit SYMBOL TABLE FULL.

So, I tried ripping stuff out of that function in an effort to isolate the problem. I got it down to a fairly small nonsense function that always causes SYMBOL TABLE FULL when run in a clear ws. It does use a large array of complex numbers, but it has no mixed or nested arrays. I can't quite tell how the symbols are getting used up.

Here's the function:

try;⎕io s s2 c x j c1 x1 z
⎕io←0
s←1000
c←(⍳s)÷s
c←c∘.+0J1×c
s2←⍴x←c←,c
j←0
go:
c1←c[j]
x1←x[j]
→(2<|x1)/gone
x1←c1+x1×x1
gone: x[j]←x1
→(s2>j←j+1)/go
drab
 
Posts: 315
Joined: Thu Oct 09, 2014 6:23 am

Re: SYMBOL TABLE FULL

PostPosted by forummaster » Sun Mar 19, 2017 9:11 pm

drab wrote:In other threads, I have reported several problems getting SYMBOL TABLE FULL. Unsurprisingly, those problems all involved large mixed or nested arrays.

Being unable to run some of my functions because of this, I tried re-writing one of them the long way to completely avoid mixed and nested arrays.

It STILL hit SYMBOL TABLE FULL.

So, I tried ripping stuff out of that function in an effort to isolate the problem. I got it down to a fairly small nonsense function that always causes SYMBOL TABLE FULL when run in a clear ws. It does use a large array of complex numbers, but it has no mixed or nested arrays. I can't quite tell how the symbols are getting used up.

Here's the function:

try;⎕io s s2 c x j c1 x1 z
⎕io←0
s←1000
c←(⍳s)÷s
c←c∘.+0J1×c
s2←⍴x←c←,c
j←0
go:
c1←c[j]
x1←x[j]
→(2<|x1)/gone
x1←c1+x1×x1
gone: x[j]←x1
→(s2>j←j+1)/go

The reason you are running afoul of STF error is that assignments into c1 and x1 are FLT scalars into a named object, so they generate a new STE if the FLT value is not already in the table (there's no reason you would know this). As these value range all over the place, they are filling up the STE and HTE tables.

I tried your function with the Win32 version:

      ⎕SYSVER
0.5.2.0 Sun Mar 19 01:50:10 2017 Win/32
)SYMB
SymTab: Maximum # Entries 65536, Current 4291, In Use 193
HshTab: Maximum # Entries 524288, Current 131072, In Use 193
try
)SYMB
SymTab: Maximum # Entries 131072, Current 131072, In Use 65534
HshTab: Maximum # Entries 524288, Current 524288, In Use 65534

and with the Win64 version:

      ⎕SYSVER
0.5.2.0 Sun Mar 19 01:50:22 2017 Win/64
)SYMB
SymTab: Maximum # Entries 262144, Current 4286, In Use 188
HshTab: Maximum # Entries 2097152, Current 131072, In Use 188
try
)SYMB
SymTab: Maximum # Entries 524288, Current 524288, In Use 262142
HshTab: Maximum # Entries 2097152, Current 1114112, In Use 262142

I suspect you have many other symbols used in your test workspace which causes it to fail. However, the point is not that it happens to work for me on my systems, but that given that it fails on your system, you can push the problem back using the command line switches -symtabsize=NNN and -hshtabsize=NNN. Remember, those values are in units of 1024 entries and that the default values are both 256.

The )SYMB command enhancements to resize the tables are in the queue. However, even if that feature were ready right now, it would be a convenience only in that you wouldn't have to save your work and exit and restart the interpreter. In the meantime, the command lines switches are the way to get around this problem.
forummaster
 
Posts: 567
Joined: Wed Jan 23, 2013 1:00 pm


Return to Bug Reports

Who is online

Users browsing this forum: No registered users and 0 guests

cron